diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..4f65c1899ef0a63ef4484ee252f1f911a2649865
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,8 @@
+config
+notes
+dist
+.venv
+.vscode
+.idea
+.mypy_cache
+.pytest_cache
diff --git a/.gitignore b/.gitignore
index 117937a4db85aab110e1e26c82c46b37d3fb8175..2f859921bc84c29becef704932e4f951c3d01974 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,10 +4,11 @@ lib
 config
 tmp
 
+.venv
 .vscode
 .idea
 *.code-workspace
 
 __pycache__
 
-dist
\ No newline at end of file
+dist
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..7cf049731bbb2dbbcec88b5e2c2ac101f202a491
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,18 @@
+FROM jupyter/minimal-notebook:python-3.10
+# TODO: add venv instead of image with correct version
+# https://jupyter-docker-stacks.readthedocs.io/en/latest/using/recipes.html#add-a-custom-conda-environment-and-jupyter-kernel
+
+RUN rmdir work
+
+COPY . .
+RUN pip install poetry
+# RUN poetry config virtualenvs.in-project true
+RUN poetry config virtualenvs.create false
+RUN poetry install
+# RUN source .venv/bin/activate
+
+USER root
+RUN fix-permissions /home/jovyan
+
+# Switch back to jovyan to avoid accidental container runs as root
+USER ${NB_UID}
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..bfd1bb4c549db22d9d61b6f579b795badb03379a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,11 @@
+
+
+docker-build:
+	docker build --tag fairnb .
+
+docker-run:
+	docker run -it -p 8888:8888 fairnb
+
+docker-save:
+	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 67cf5d2585ec96bbaac7bfef027169c14a553cfe..904f6c65f666c8f34c57ff97efbe4fba407be315 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
-# DBREPO-ISMIR
-
-## Description
-A Repository that shows the usage of the DBRepo and Invenio platforms to create a genre prediction SVM and make its results reproducible.
+# FAIRNB
+A Repository for FAIR data handling in Jupyter Notebooks.
+It shows the usage of the DBRepo and Invenio platforms to create a genre prediction SVM and make its results reproducible.
 
 ## Installation
 Install poetry via pip or conda and run
@@ -10,25 +9,34 @@ Install poetry via pip or conda and run
 Following packages are additionally needed: git-lfs, libsnfile1 (needed for librosa).
 Install them with your package manager.
 
-To authenticate with the DBRepo and Invenio servers, rename example-config.yml located in the config folder to config.yml and enter you credentials in the placeholders.
+To authenticate with the DBRepo and Invenio servers, rename example-config_<platform>.yml located in the config folder
+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 called ismir_presentation.ipynb located in the notebooks folder.
+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.
 
-## Support
 
+### Docker
+A docker image is also provided for download on invenio, containing a running jupyter instance with all dependencies installed.
 
-## Roadmap
+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
 
 ## License
 
-
-## Project status
-Currently in early development
+## References
+Docker Image on invenio: https://researchdata.tuwien.ac.at/
+DBRepo: https://dbrepo1.tuwien.ac.at/
+Invenio: https://researchdata.tuwien.ac.at/
+Thesis: https://repositum.tuwien.ac.at/
diff --git a/config/example-config.yml b/config/example-config.yml
deleted file mode 100644
index 9b21e8ac6d43afba2760db505876d4a68685dba6..0000000000000000000000000000000000000000
--- a/config/example-config.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-# Credentials for Invenio
-invenio:
-  host: https://test.researchdata.tuwien.ac.at
-  credentials:
-    token: <insert token from invenio>
-
-dbrepo:
-  host: https://dbrepo2.ec.tuwien.ac.at
-  credentials:
-    username: <insert username from dbrepo>
-    password: <insert password from dbrepo>
-  container-id: 1
-  database-id: 1
-
-
-
diff --git a/config/example-config_dbrepo.yml b/config/example-config_dbrepo.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a86a8f1a4fac1fb8fc7356225a8d89f4acdd87a4
--- /dev/null
+++ b/config/example-config_dbrepo.yml
@@ -0,0 +1,7 @@
+host: https://dbrepo1.ec.tuwien.ac.at
+container-id: <insert id>
+database-id: <insert id>
+credentials:
+  username: <insert username from dbrepo>
+  password: <insert password from dbrepo>
+  client_secret_key: <insert client secret key from dbrepo>
diff --git a/config/example-config_invenio.yml b/config/example-config_invenio.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ea9ba267f9dfd6a34bdab36bd9d23edef14ed86e
--- /dev/null
+++ b/config/example-config_invenio.yml
@@ -0,0 +1,3 @@
+host: https://researchdata.tuwien.ac.at
+credentials:
+  token: <insert token from invenio>
\ No newline at end of file
diff --git a/dbrepo_ismir/artefact.py b/dbrepo_ismir/artefact.py
deleted file mode 100644
index 3a77f308bb3b569c611ff088d9c57b599ed74302..0000000000000000000000000000000000000000
--- a/dbrepo_ismir/artefact.py
+++ /dev/null
@@ -1,401 +0,0 @@
-import copy
-from datetime import datetime
-from abc import ABC, abstractmethod
-from pathlib import Path
-from dataclasses import dataclass, field
-
-import pandas as pd
-import git
-
-from dbrepo_ismir.invenio import InvenioManager
-from definitions import BASE_PATH
-from dbrepo_ismir.dbrepo import DBRepoConnector
-
-METADATA_TABLE_NAME = "artefact_metadata"
-DEPENDENCY_TABLE_NAME = "artefact_dependencies"
-
-# TODO: Upload Datetime objects as Timestamps instead of str
-
-
-@dataclass
-class ArtefactMeta:
-    id: str | None
-    uri: str
-    name: str
-    description: str
-    type: str
-    commit: str
-    branch: str
-    repo_uri: str
-    executed_file: str
-    creation_time: datetime
-    platform: str
-
-    @classmethod
-    def new(cls, name: str, description: str, executed_file: Path, type: str, uri: str, platform: str):
-        repo = git.Repo(BASE_PATH)
-
-        git_branch = repo.head.reference
-        branch = git_branch.name
-        commit = git_branch.repo.commit().hexsha
-
-        # TODO: Better way to point to repo instead of ssh / https link
-        #  --> more general approach independent of authentication
-        repo_uri = git_branch.repo.remote().url
-
-        creation_time = datetime.now()
-
-        executed_file_rel = executed_file.resolve().relative_to(BASE_PATH)
-
-        return cls(
-            id=None,
-            name=name,
-            description=description,
-            uri=uri,
-            commit=commit,
-            repo_uri=repo_uri,
-            creation_time=creation_time,
-            branch=branch,
-            executed_file=executed_file_rel.as_posix(),
-            type=type,
-            platform=platform
-        )
-
-    @classmethod
-    def from_series(cls, df: pd.DataFrame):
-        return cls(
-            id=df["id"],
-            name=df["name"],
-            description=df["description"],
-            uri=df["uri"],
-            commit=df["commit"],
-            repo_uri=df["repo_uri"],
-            executed_file=df["executed_file"],
-            creation_time=datetime.strptime(df["creation_time"], "%Y-%m-%d %H:%M:%S.%f"),
-            branch=df["branch"],
-            type=df["type"],
-            platform=df["platform"]
-        )
-
-    def to_frame(self):
-        return pd.DataFrame(
-            {
-                "id": pd.Series(self.id, dtype=str),
-                "name": pd.Series(self.name, dtype=str),
-                "description": pd.Series(self.description, dtype=str),
-                "uri": pd.Series(self.uri, dtype=str),
-                "commit": pd.Series(self.commit, dtype=str),
-                "repo_uri": pd.Series(self.repo_uri, dtype=str),
-                "executed_file": pd.Series(self.executed_file, dtype=str),
-                "creation_time": pd.Series(self.creation_time, dtype=str),
-                "branch": pd.Series(self.branch, dtype=str),
-                "type": pd.Series(self.type, dtype=str),
-                "platform": pd.Series(self.platform, dtype=str)
-            }
-        )
-
-
-@dataclass
-class Artefact(ABC):
-    location: Path = field(init=True)
-    dbrepo_connector: DBRepoConnector = field(init=True)
-    name: str = field(init=True, default=None)
-    description: str = field(init=True, default="")
-    id: str | None = field(init=True, default=None)
-    type: str = field(init=True, default=None)
-    metadata_table_id: int | None = field(init=False, default=None)
-    dependency_table_id: int | None = field(init=False, default=None)
-    metadata: ArtefactMeta | None = field(init=False, default=None)
-
-    @classmethod
-    @abstractmethod
-    def new(cls, *args, **kwargs):
-        """ Create a new Artefact that exists at creation time only locally at 'location'. """
-        raise NotImplementedError
-
-    @classmethod
-    @abstractmethod
-    def existing(cls, *args, **kwargs):
-        """ """
-        raise NotImplementedError
-
-    def __post_init__(self):
-        # if record not yet created delay metadata loading etc. until upload
-        if self.id is None:
-            assert self.name
-            assert self.description
-            return
-
-        # Download metadata if it exists
-        self.metadata_table_id = self.dbrepo_connector.get_table(METADATA_TABLE_NAME)["id"]
-        self.dependency_table_id = self.dbrepo_connector.get_table(DEPENDENCY_TABLE_NAME)["id"]
-        self.download_metadata()
-
-    @abstractmethod
-    def download(self) -> ArtefactMeta:
-        """ Download this Artefact and return the attached Metadata"""
-        raise NotImplementedError
-
-    @abstractmethod
-    def upload(self, executed_file: Path):
-        """ Upload this Artefact """
-        raise NotImplementedError
-
-    def exists_locally(self):
-        """ Checks if a local File on 'location' exists. If so, True is returned, otherwise False """
-        return self.location.exists() and self.location.is_file()
-
-    def copy_to_location(self, new_location: Path):
-        """ Copy local files to new location and return new deep copy of self with new location """
-        # TODO: throw exception if no local files when copying?
-        new = copy.deepcopy(self)   # strip all references to self
-        new.location = new_location
-        new_location.parent.mkdir(parents=True, exist_ok=True)
-        new_location.write_bytes(self.location.read_bytes())    # works as long file < RAM
-        return new
-
-    def download_metadata(self) -> ArtefactMeta:
-        if self.metadata_table_id is None:
-            self.metadata_table_id = self.dbrepo_connector.get_table(METADATA_TABLE_NAME)["id"]
-        if self.dependency_table_id is None:
-            self.dependency_table_id = self.dbrepo_connector.get_table(DEPENDENCY_TABLE_NAME)["id"]
-
-        df = self.dbrepo_connector.download_table_as_df(str(self.metadata_table_id))
-
-        row = df[df['id'] == self.id].iloc[0]
-
-        self.metadata = ArtefactMeta.from_series(row)
-        return self.metadata
-
-    def upload_metadata(self, metadata: ArtefactMeta):
-        metadata_table = self.create_metadata_table_if_not_exists(metadata)
-        self.metadata_table_id = metadata_table["id"]
-        dependency_table = self.create_dependency_table_if_not_exists()
-        self.dependency_table_id = dependency_table["id"]
-
-        self.dbrepo_connector.upload_data(
-            metadata.to_frame().drop("id", axis=1),
-            str(self.metadata_table_id)
-        )
-
-        df = self.dbrepo_connector.download_table_as_df(str(self.metadata_table_id))
-
-        # FIXME: create robust version of id retrieval, if possible
-        row = df.iloc[df['id'].idxmax()]    # get newest row, as it should contain data
-        meta = ArtefactMeta.from_series(row)
-        assert meta.creation_time == metadata.creation_time
-
-        self.id = meta.id
-        self.metadata = meta
-
-    def create_metadata_table_if_not_exists(self, metadata: ArtefactMeta):
-        df = metadata.to_frame().drop('id', axis=1)
-
-        return self.dbrepo_connector.create_table_if_not_exists(
-            df,
-            METADATA_TABLE_NAME,
-            "Artefact metadata for all Artefacts of database"
-        )
-
-    def create_dependency_table_if_not_exists(self):
-        # TODO: this table should be optional; is foreign_key supported in dbrepo?
-
-        df = pd.DataFrame({
-            'artefact_id': pd.Series(dtype='int'),
-            'depends_on': pd.Series(dtype='int')
-        })
-
-        return self.dbrepo_connector.create_table_if_not_exists(
-            df,
-            DEPENDENCY_TABLE_NAME,
-            "Artefact dependencies on other artefacts"
-        )
-
-
-@dataclass
-class DbRepoArtefact(Artefact):
-    table_name: str = field(init=True, default=None)
-    table_description: str = field(init=True, default="")
-    table_id: int = field(init=False, default=None)
-
-    def __post_init__(self):
-        super().__post_init__()
-
-        if self.metadata is not None:
-            self.table_id = int(self.metadata.uri.split('/')[-1])
-        else:
-            assert self.table_name is not None
-
-
-    @classmethod
-    def new(cls, name: str, description: str, location: Path, dbrepo_connector: DBRepoConnector,
-            table_name: str, table_description: str, type: str):
-        return cls(
-            name=name,
-            description=description,
-            table_name=table_name,
-            table_description=table_description,
-            location=location,
-            dbrepo_connector=dbrepo_connector,
-            type=type
-        )
-
-    @classmethod
-    def existing(cls, id: str, location: Path, dbrepo_connector: DBRepoConnector):
-        return cls(
-            id=id,
-            location=location,
-            dbrepo_connector=dbrepo_connector
-        )
-
-    def download(self):
-        if not self.metadata:
-            self.download_metadata()
-        df = self.dbrepo_connector.download_table_as_df(str(self.table_id))
-        df.to_csv(self.location)
-
-    def upload(self, executed_file: Path):
-        df = pd.read_csv(self.location)
-
-        # add id column to df:
-        df["artefact_id"] = -1  # temporary, needed for easy table schema retrieval
-
-        # TODO: reference Artefact id via foreign keys in data tables and dependency table
-
-        # create table if not exists
-        # update uri etc
-        # create table if it not already exists
-        table = self.dbrepo_connector.create_table_if_not_exists(
-            df,
-            self.table_name,
-            self.table_description
-        )
-        self.table_id = int(table["id"])
-
-        metadata = ArtefactMeta.new(
-            self.name,
-            self.description,
-            executed_file=executed_file,
-            uri=f"{self.dbrepo_connector.host}/api/container/{self.dbrepo_connector.container_id}/database/"
-                f"{self.dbrepo_connector.database_id}/table/{self.table_id}",
-            type=self.type,
-            platform="dbrepo"
-        )
-
-        self.upload_metadata(metadata)
-        df["artefact_id"] = self.metadata.id    # update the -1 form above with the correct value as it is now known
-        self.upload_data(df)
-
-    def upload_data(self, df: pd.DataFrame):
-        assert self.id is not None
-        assert self.table_id is not None
-
-        df["id"] = self.id  # add artefact id to df
-
-        self.dbrepo_connector.upload_data(
-            df,
-            str(self.table_id)
-        )
-
-
-@dataclass
-class InvenioArtefact(Artefact):
-    invenio_manager: InvenioManager = field(init=True, default=None)
-    record_metadata: dict = field(init=True, default=None)
-    publish_record: bool = field(init=True, default=False)
-
-    @classmethod
-    def new(cls, invenio_manager: InvenioManager, record_metadata: dict,
-            dbrepo_connector: DBRepoConnector, location: Path,
-            name: str, description: str, type: str):
-        return cls(
-            invenio_manager=invenio_manager,
-            record_metadata=record_metadata,
-            dbrepo_connector=dbrepo_connector,
-            location=location,
-            name=name,
-            description=description,
-            type=type
-        )
-
-    @classmethod
-    def existing(cls, id: str, location: Path, dbrepo_connector: DBRepoConnector, invenio_manager: InvenioManager):
-        return cls(
-            id=id,
-            location=location,
-            dbrepo_connector=dbrepo_connector,
-            invenio_manager=invenio_manager
-        )
-
-
-    def __post_init__(self):
-        super().__post_init__()
-
-        assert self.invenio_manager is not None
-
-        if not self.id:
-            assert self.record_metadata is not None
-
-    def upload(self, executed_file: Path):
-        dir_path: Path
-        regex: str
-
-        if self.location.is_dir():
-            dir_path = self.location
-            regex = ".*"
-        else:
-            dir_path = self.location.parent
-            regex = f".*/{self.location.name}"
-
-        create_response = self.invenio_manager.create_record(self.record_metadata).json()
-        record_id = create_response["id"]
-        self.invenio_manager.upload_record(dir_path, regex)
-
-        if self.publish_record:
-            publish_response = self.invenio_manager.publish_record()
-            uri = publish_response["links"]["self_doi"]
-        else:
-            uri = create_response["links"]["record"]    # Invalid until published
-
-        metadata = ArtefactMeta.new(
-            name=self.name,
-            description=self.description,
-            executed_file=executed_file,
-            uri=uri,
-            type=self.type,
-            platform="invenio"
-        )
-
-        self.upload_metadata(metadata)
-
-    def download(self) -> ArtefactMeta:
-        pass
-
-
-class RepositumArtefact(Artefact):
-    # TODO: add implementation of RepositumArtefact
-
-    @classmethod
-    def new(cls):
-        pass
-
-    def upload(self, executed_file: Path):
-        pass
-
-    def upload_data(self):
-        pass
-
-    def download(self) -> ArtefactMeta:
-        pass
-
-
-@dataclass
-class NbConfig:
-    nb_location: Path
-    artefacts: list[Artefact]
-    dependencies: list[Artefact]
-    nb_output_location: Path = field(init=True, default=None)
-
-    def __post_init__(self):
-        if not self.nb_output_location:
-            self.nb_output_location = self.nb_location
diff --git a/dbrepo_ismir/authenticate.py b/dbrepo_ismir/authenticate.py
deleted file mode 100644
index 280efbbadd96bd0a1c49cbb2454c857e5ecad9e5..0000000000000000000000000000000000000000
--- a/dbrepo_ismir/authenticate.py
+++ /dev/null
@@ -1,56 +0,0 @@
-from abc import ABC, abstractmethod
-from dataclasses import dataclass
-
-
-@dataclass
-class Credential(ABC):
-    uri: str
-
-    @abstractmethod
-    def retrieve_token(self) -> str:
-        raise NotImplementedError
-
-
-
-@dataclass
-class TokenCredential(Credential):
-    token: str
-
-    def retrieve_token(self):
-        return self.token
-
-
-@dataclass
-class PasswordCredential(Credential, ABC):
-    username: str
-    password: str
-
-
-class DbRepoPasswordCredential(PasswordCredential):
-
-    def retrieve_token(self) -> str:
-        dbrepo = DBRepoConnector()
-
-
-@dataclass
-class AuthenticationConfig:
-    credentials: list[Credential]
-
-
-class Authenticator:
-    credentials: dict[str, TokenCredential]             # List of credentials
-
-    @staticmethod
-    def strip_uri(uri: str):
-        return uri
-
-
-    @classmethod
-    def set_up(cls, config: AuthenticationConfig):
-        cls.credentials = {
-            credential.uri: credential for credential in config.credentials
-        }
-
-    @classmethod
-    def get_token(cls, uri: str):
-        return cls.credentials[uri].token
diff --git a/dbrepo_ismir/reproducer.py b/dbrepo_ismir/reproducer.py
deleted file mode 100644
index 1dda9b220b2529b5106058f089e60597222b0d57..0000000000000000000000000000000000000000
--- a/dbrepo_ismir/reproducer.py
+++ /dev/null
@@ -1,90 +0,0 @@
-import inspect
-import os
-from dataclasses import dataclass
-from pathlib import Path
-import IPython
-
-import jupyter_client
-import nbconvert.postprocessors
-import papermill
-from jupyter_client import KernelManager
-
-from dbrepo_ismir.artefact import Artefact, NbConfig, ArtefactMeta, DbRepoArtefact, InvenioArtefact
-import nbformat
-import nbclient
-from nbconvert.preprocessors import ExecutePreprocessor
-
-
-@dataclass
-class ReproducerConfig:
-    pass
-
-
-class Reproducer:
-    executeProcessor: ExecutePreprocessor = ExecutePreprocessor(timeout=600, kernel_name='python3')
-
-    def __init__(self, config: ReproducerConfig):
-        pass
-
-    def _preprocess(self, nb_config: NbConfig, require_download: bool = False, only_local: bool = False):
-        """ Set up the dependencies to allow for later execution """
-        if not only_local:
-            # load deps and save them to defined location
-            [artefact.download() for artefact in nb_config.dependencies
-             if (not artefact.exists_locally()) or require_download]
-
-    def execute(self, nb_config: NbConfig, require_download: bool = False, only_local: bool = False, **kwargs):
-        self._preprocess(nb_config, require_download, only_local)
-
-        papermill.execute_notebook(
-            nb_config.nb_location.resolve(),
-            nb_config.nb_location.resolve(),
-            parameters=dict(
-                INPUT_PATHS={artefact.type: artefact.location.__str__() for artefact in nb_config.dependencies},
-                OUTPUT_PATHS={artefact.type: artefact.location.__str__() for artefact in nb_config.artefacts}
-            )
-        )
-
-        self._post_process(nb_config, only_local)
-
-    def _post_process(self, nb_config: NbConfig, only_local: bool = False):
-        if not only_local:
-            # load generated artefact and upload it
-            for artefact in nb_config.artefacts:
-                # use inspect to get path of caller
-                artefact.upload(nb_config.nb_location)
-
-    def reproduce_artefact(self, artefact: Artefact):
-        pass
-
-
-    # class ExperimentReproducer:
-    #     def __init__(self):
-    #         pass
-    #         # self.config = self.configure()
-    #
-    #     def artefact(self, creation_func, *args, input_artefacts: [str] = None, **kwargs):
-    #         """ Saves the created artefact which is returned by the creation_func as a DRO """
-    #
-    #         if input_artefacts is not None:
-    #             # TODO: collect input artefacts
-    #             collected_artefacts = []
-    #             for artefact in input_artefacts:
-    #                 collected_artefacts.append(self.collect_artefact(artefact))
-    #
-    #         result = creation_func(args, input_artefacts, kwargs)
-    #
-    #         return result
-    #
-    #     def db_repo_artefact(self, function: Callable[..., pd.DataFrame], *args, **kwargs):
-    #         """ Saves the created dataframe to DBRepo while citing the inputs. """
-    #         df = function(args, kwargs)
-    #
-    #         # TODO: upload code to DBRepo
-    #
-    #
-    #
-    #
-    #     def recreate_artefact(self, uri: str):
-    #         """ Checkout correct commit, download required artefacts and execute correct artefact code. """
-    #         pass
\ No newline at end of file
diff --git a/dbrepo_ismir/__init__.py b/fairnb/__init__.py
similarity index 100%
rename from dbrepo_ismir/__init__.py
rename to fairnb/__init__.py
diff --git a/fairnb/api/__init__.py b/fairnb/api/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/dbrepo_ismir/dbrepo.py b/fairnb/api/dbrepo.py
similarity index 52%
rename from dbrepo_ismir/dbrepo.py
rename to fairnb/api/dbrepo.py
index 64ae3bc62c26bc13a6a6ef0f31a805f45c26b63d..cdf3a9fba40083ad6eb1f42aa05498061eda4287 100644
--- a/dbrepo_ismir/dbrepo.py
+++ b/fairnb/api/dbrepo.py
@@ -1,19 +1,35 @@
 import pathlib
 import logging
-from typing import Any
+from tusclient import client
+from datetime import datetime
+from functools import wraps
+from typing import Any, Callable
 import requests
 import pandas as pd
 import csv
 from io import StringIO
+from keycloak import KeycloakOpenID
 
 LOG = logging.getLogger(__name__)
+TIMEOUT = 600
+CHUNK_SIZE = 1024 * 1024 * 100
 
+def re_auth(func: Callable) -> Callable:
+    @wraps(func)
+    def inner(self, *args, **kwargs):
+        assert self.get_token_age()
+        age_seconds = (datetime.now() - self.get_token_age()).seconds
 
-# TODO: add method to automatically delete table content
+        if 60 * 10 < age_seconds < 60 * 25:
+            LOG.warning(f"Re-authenticating due to almost expired token")
+            self.refresh_token_keycloak()
+        if age_seconds >= 60*25:
+            LOG.warning(f"Re-login due to expired token")
+            self.authenticate_keycloak()
+        return func(self, *args, **kwargs)
+    return inner
 
 
-
-# and replace it with given df
 # noinspection PyTypeChecker
 class DBRepoConnector:
     """ A class to make interaction with DBRepo via python code easier """
@@ -21,23 +37,42 @@ class DBRepoConnector:
     def __init__(self,
                  username: str,
                  password: str,
+                 client_secret_key: str,
                  host: str,
                  container_id: str,
                  database_id: str):
         self.__token = None
+        self.__token_age: datetime = None
+        self.__refresh_token: str = None
         self.headers = None
         self.host = host
         self.__username = username
         self.__password = password
+        self.__client_secret_key = client_secret_key
         self.container_id = container_id
         self.database_id = database_id
-        self.authenticate()
+        self.__keycloak_openid = KeycloakOpenID(
+            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
 
     @classmethod
     def from_config(cls, config: dict, credentials: dict):
         return cls(
             credentials["username"],
             credentials["password"],
+            credentials["client_secret_key"],
             config["host"],
             config["container-id"],
             config["database-id"]
@@ -49,18 +84,47 @@ class DBRepoConnector:
 
         username = self.__username if username is None else username
         password = self.__password if password is None else password
+        # /realms/dbrepo/protocol/openid-connect/token
 
         response = requests.post(
             f"{self.host}/api/auth",
             json={"username": username, "password": password},
-            timeout=60
+            timeout=TIMEOUT,
         )
 
         LOG.debug(response)
+
+        assert response.ok, "Authentication failed"
+
         self.__token = response.json().get("token")
+        self.__token_age = datetime.now()
         self.headers = {"Authorization": f"Bearer {self.__token}"}
         return response
 
+    def authenticate_keycloak(self, username: str = None, password: str = None):
+
+        username = self.__username if username is None else username
+        password = self.__password if password is None else password
+
+        token = self.__keycloak_openid.token(username, password)
+
+        self.__token = token["access_token"]
+        self.__refresh_token = token["refresh_token"]
+        self.__token_age = datetime.now()
+        self.headers = {"Authorization": f"Bearer {self.__token}"}
+        return token
+
+    def refresh_token_keycloak(self, token: str = None):
+
+        token = self.__token if token is None else token
+
+        token = self.__keycloak_openid.refresh_token(self.__refresh_token)
+        self.__token = token["access_token"]
+        self.__refresh_token = token["refresh_token"]
+        self.headers = {"Authorization": f"Bearer {self.__token}"}
+        self.__token_age = datetime.now()
+        return token
+
     @staticmethod
     def _create_table_data(
             dataframe: pd.DataFrame,
@@ -69,13 +133,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},
             }
         )
 
@@ -85,32 +149,34 @@ 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": {
+                "checks": [],
+                "foreign_keys": [],
+                "uniques": []
+            }
         }
 
-        # add date_format
-
         LOG.debug(table)
-
         return table
 
+    @re_auth
     def get_tables(self) -> list[dict[str, Any]]:
         """ Returns the metadata for all tables in the database """
 
         response = requests.get(
-            f"{self.host}/api/container/{self.container_id}/database/"
-            f"{self.database_id}/table",
-            timeout=60
+            f"{self.host}/api/database/" 
+            f"{self.database_id}",
+            timeout=TIMEOUT,
         )
         LOG.debug(response)
 
@@ -118,12 +184,12 @@ class DBRepoConnector:
             raise Exception("tables retrieval failed")
 
         try:
-            tables = response.json()
+            content = response.json()
         except requests.exceptions.JSONDecodeError as e:
             LOG.warning("get_tables response is not json serializable")
             raise e
 
-        return tables
+        return content["tables"]
 
     def get_table(self, table_name: str) -> dict[str, Any] | None:
         """ Returns table if it exists, returns None otherwise """
@@ -136,12 +202,14 @@ class DBRepoConnector:
 
         return None
 
+    @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
         )
@@ -155,6 +223,7 @@ class DBRepoConnector:
 
         return table
 
+    @re_auth
     def create_table_if_not_exists(self,
                                    dataframe: pd.DataFrame,
                                    table_name: str,
@@ -165,39 +234,50 @@ class DBRepoConnector:
 
         return table
 
+    @re_auth
     def upload_data(self, dataframe: pd.DataFrame, table_id: str):
         """ Uploads a Dataframe to specified table """
 
-        # convert dataframe to a string buffer to make it uploadable
-        dataframe.to_csv(string_io := StringIO(), index=False, quoting=csv.QUOTE_ALL)
+        dataframe.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=60
+        uploader = self.tusclient.uploader(
+            file_stream=string_io,
+            chunk_size=CHUNK_SIZE,
         )
-        LOG.debug(response_upload)
-
-        upload_location = response_upload.json().get("path")
-        LOG.debug(f"Upload location: {upload_location}")
 
-        # 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},
+        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_move)
+        LOG.debug(response_upload_import)
+
+        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):
         # TODO: implement delete_all_data method and test it
         response = requests.delete(
-            f"{self.host}/api/container/{self.container_id}/database/"
+            f"{self.host}/api/database/"    # cut after api: container/{self.container_id}/
             f"{self.database_id}/table/{table_id}/data",
             headers=self.headers,
-            timeout=60
+            timeout=TIMEOUT
         )
 
         return response
@@ -205,28 +285,30 @@ 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=60
+            timeout=TIMEOUT
         )
 
         LOG.debug(response)
 
         return response
 
+    @re_auth
     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=60
+            timeout=TIMEOUT
         )
 
         LOG.debug(response)
 
         return response.text
 
+    @re_auth
     def download_table_as_df(self, table_id: str):
         """ Downloads a table and converts it into a pd.DataFrame """
 
@@ -235,6 +317,7 @@ class DBRepoConnector:
 
         return df
 
+    @re_auth
     def export_table(self, table_id: str, export_path: pathlib.Path):
         """ Exports a whole table and writes the tables' content to export_path """
         assert not export_path.is_dir(), "Export Path must be a file"
diff --git a/dbrepo_ismir/invenio.py b/fairnb/api/invenio.py
similarity index 64%
rename from dbrepo_ismir/invenio.py
rename to fairnb/api/invenio.py
index 9c01669be54138d64adaa5ce301c0666dc3823a6..663f408cc74e8cec0b07b53711b75f1653292674 100644
--- a/dbrepo_ismir/invenio.py
+++ b/fairnb/api/invenio.py
@@ -9,7 +9,6 @@ log = logging.getLogger(__name__)
 
 
 class InvenioConnector:
-
     def __init__(self, token: str, host: str | None = None):
         self.host = host or "https://test.researchdata.tuwien.ac.at"
         self.token = token
@@ -20,7 +19,7 @@ class InvenioConnector:
             f"{self.host}/api/records",
             data=json.dumps(data),
             headers=self.headers,
-            timeout=60
+            timeout=60,
         )
 
         log.debug(f"create draft record response: {response}\n{response.text}")
@@ -28,38 +27,34 @@ class InvenioConnector:
         return response
 
     def create_file_draft(self, record_id: str, upload_name: str):
-        """ Create a file draft for a later upload of file data"""
+        """Create a file draft for a later upload of file data"""
 
         response = rq.post(
             f"{self.host}/api/records/{record_id}/draft/files",
-            json=[
-                {"key": upload_name}
-            ],
+            json=[{"key": upload_name}],
             headers=self.headers,
-            timeout=60
+            timeout=60,
         )
 
         return response
 
-    def upload_data(self, record_id: str,
-                    filepath: pathlib.Path, upload_name: str):
-        """ Upload data for an already created draft file
-        """
-        with open(filepath, mode='rb') as f:
+    def upload_data(self, record_id: str, filepath: pathlib.Path, upload_name: str):
+        """Upload data for an already created draft file"""
+        with open(filepath, mode="rb") as f:
             response = rq.put(
                 f"{self.host}/api/records/{record_id}/draft/files/{upload_name}/content",
                 data=f.read(),
-                headers=self.headers
+                headers=self.headers,
             )
 
         return response
 
     def commit_file(self, record_id: str, upload_name: str):
-        """ Commits a file where all data was uploaded successfully"""
+        """Commits a file where all data was uploaded successfully"""
 
         response = rq.post(
             f"{self.host}/api/records/{record_id}/draft/files/{upload_name}/commit",
-            headers=self.headers
+            headers=self.headers,
         )
 
         return response
@@ -80,13 +75,17 @@ class InvenioConnector:
         log.info(f"Finished upload  of {upload_name}")
         log.debug(responses)
 
-    def upload_files(self, record_id: str, filepaths: list[pathlib.Path], filenames: list[str]):
+    def upload_files(
+        self, record_id: str, filepaths: list[pathlib.Path], filenames: list[str]
+    ):
         assert len(filepaths) == len(filenames)
 
         log.info(f"Uploading {len(filepaths)} to {self.host}")
 
-        args = [(record_id, filepath, "_".join(filepath.parts[-2:]))
-                for filepath in filepaths]
+        args = [
+            (record_id, filepath, filename)
+            for filepath, filename in zip(filepaths, filenames)
+        ]
 
         with ThreadPoolExecutor(8) as executor:
             executor.map(lambda p: self.upload_file(*p), args)
@@ -94,50 +93,52 @@ class InvenioConnector:
     def publish_draft(self, record_id: str):
         response = rq.post(
             f"{self.host}/api/records/{record_id}/draft/actions/publish",
-            headers=self.headers
+            headers=self.headers,
         ).json()
 
         return response
 
-    def download_file(self, record_id: str, filename: str, out_path: pathlib.Path, expand: bool = True):
+    def download_file(
+        self, record_id: str, filename: str, out_path: pathlib.Path, expand: bool = True
+    ):
         response = rq.get(
             f"{self.host}/api/records/{record_id}/files/{filename}/content",
-            headers=self.headers
+            headers=self.headers,
         )
 
-        file_path = out_path / \
-            filename.replace("_", "/") if expand else out_path
+        file_path = out_path / filename.replace("_", "/") if expand else out_path
         file_path.parent.mkdir(exist_ok=True, parents=True)
 
         with open(file_path, "wb") as file:
             file.write(response.content)
 
-    def download_files(self, record_id: str, out_dir: pathlib.Path, expand: bool = True):
+    def download_files(
+        self, record_id: str, out_dir: pathlib.Path, expand: bool = True
+    ):
         # get filenames for downloading
         response = rq.get(
-            f"{self.host}/api/records/{record_id}/files",
-            headers=self.headers
+            f"{self.host}/api/records/{record_id}/files", headers=self.headers
         )
 
         # download content of files
-        filenames = sorted([entry.get('key')
-                           for entry in response.json().get('entries')])
-        args = [(record_id, filename, out_dir, expand)
-                for filename in filenames]
+        filenames = sorted(
+            [entry.get("key") for entry in response.json().get("entries")]
+        )
+        args = [(record_id, filename, out_dir, expand) for filename in filenames]
 
         with ThreadPoolExecutor(10) as executor:
             executor.map(lambda p: self.download_file(*p), args)
 
 
 class InvenioManager:
-    """ A high level interface to up- and download files from invenio. 
+    """A high level interface to up- and download files from invenio.
     Utilizes state management:
         1. record not assigned
         2. record assigned
-        3. record published """
+        3. record published"""
 
-    def __init__(self, token: str, host: str, record_id: str | None = None):
-        self.connector = InvenioConnector(token, host)
+    def __init__(self, invenio_connector: InvenioConnector, record_id: str | None = None):
+        self.connector = invenio_connector
         self.record_id = record_id
         self.doi = None
 
@@ -145,7 +146,9 @@ class InvenioManager:
         assert not self.record_id, "Record must not already be assigned!"
 
     def _validate_record_assigned(self):
-        assert self.record_id, "Record must be assigned or created by calling create_record"
+        assert (
+            self.record_id
+        ), "Record must be assigned or created by calling create_record"
 
     def _validate_not_published(self):
         assert not self.doi, "Record must not have been published"
@@ -159,18 +162,34 @@ class InvenioManager:
 
         return response
 
-    def upload_record(self, directory: pathlib.Path, regex_pattern: str = '.*', globbing_pattern: str = '**/*.*'):
+    def upload_record(
+        self,
+        directory: pathlib.Path,
+        regex_pattern: str = ".*",
+        globbing_pattern: str = "**/*.*",
+        only_filename: bool = False,
+    ):
         self._validate_record_assigned()
         self._validate_not_published()
 
-        filepaths = [path.absolute() for path in sorted(directory.glob(globbing_pattern))
-                     if re.match(regex_pattern, path.as_posix())]
+        filepaths = [
+            path.absolute()
+            for path in sorted(directory.glob(globbing_pattern))
+            if re.match(regex_pattern, path.as_posix())
+        ]
 
         log.info(f"Picked up {len(filepaths)} files")
         log.debug(f"Picked up files: {filepaths}")
 
-        filenames = [path.relative_to(directory).as_posix().replace(
-            '/', '_') for path in filepaths]
+        if only_filename:
+            filenames = [
+                path.name for path in filepaths
+            ]
+        else:
+            filenames = [
+                path.relative_to(directory).as_posix().replace("/", "_")
+                for path in filepaths
+            ]
 
         self.connector.upload_files(str(self.record_id), filepaths, filenames)
 
diff --git a/fairnb/entity/__init__.py b/fairnb/entity/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/fairnb/entity/dbrepo_entity.py b/fairnb/entity/dbrepo_entity.py
new file mode 100644
index 0000000000000000000000000000000000000000..b54851f4cadd4b74424854af312de9eb99cef521
--- /dev/null
+++ b/fairnb/entity/dbrepo_entity.py
@@ -0,0 +1,95 @@
+import pandas as pd
+from dataclasses import dataclass, field
+from pathlib import Path
+from fairnb.entity.entity import Entity
+from fairnb.api.dbrepo import DBRepoConnector
+from fairnb.entity.entity_provenance import EntityProvenance
+
+
+@dataclass
+class DbRepoEntity(Entity):
+    table_name: str = field(init=True, default=None)
+    table_description: str = field(init=True, default="")
+    table_id: int = field(init=False, default=None)
+
+    def __post_init__(self):
+        super().__post_init__()
+
+        if self.metadata is not None:   # equivalent to: self.id is not None
+            self.table_id = int(self.metadata.uri.split("/")[-1])
+        else:
+            assert self.table_name is not None  # has to exist fot the ability to get table_id
+
+    @classmethod
+    def new(
+            cls,
+            name: str,
+            description: str,
+            location: Path,
+            dbrepo_connector: DBRepoConnector,
+            table_name: str,
+            table_description: str,
+            type: str,
+    ):
+        return cls(
+            name=name,
+            description=description,
+            table_name=table_name,
+            table_description=table_description,
+            location=location,
+            dbrepo_connector=dbrepo_connector,
+            type=type,
+        )
+
+    @classmethod
+    def existing(cls, id: str, location: Path, dbrepo_connector: DBRepoConnector):
+        return cls(id=id, location=location, dbrepo_connector=dbrepo_connector)
+
+    def download(self):
+        if not self.metadata:
+            self.download_provenance()
+        df = self.dbrepo_connector.download_table_as_df(str(self.table_id))
+
+        df = df[df['entity_id'] == self.id]  # save only entity, not whole table
+        df.to_csv(self.location)
+
+    def upload(self, executed_file: Path, dependencies: list[Entity] = None):
+        df = pd.read_csv(self.location)
+
+        # add id column to df:
+        df["entity_id"] = -1  # temporary, needed for easy table schema retrieval
+
+        # create table if not exists
+        # update uri etc
+        # create table if it not already exists
+        table = self.dbrepo_connector.create_table_if_not_exists(
+            df, self.table_name, self.table_description
+        )
+        self.table_id = int(table["id"])
+
+        metadata = EntityProvenance.new(
+            self.name,
+            self.description,
+            executed_file=executed_file,
+            uri=f"{self.dbrepo_connector.host}/api/database/"
+                f"{self.dbrepo_connector.database_id}/table/{self.table_id}",
+            type=self.type,
+            platform="dbrepo",
+        )
+
+        self.upload_provenance(metadata)
+        df[
+            "entity_id"
+        ] = (
+            self.metadata.id
+        )  # update the -1 from above with the correct value as it is now known
+        self.upload_data(df)
+
+        self.upload_dependencies(dependencies)
+
+    def upload_data(self, df: pd.DataFrame):
+        assert self.id is not None
+        assert self.table_id is not None
+
+        df["id"] = self.id  # add entity id to df
+        self.dbrepo_connector.upload_data(df, str(self.table_id))
diff --git a/fairnb/entity/entity.py b/fairnb/entity/entity.py
new file mode 100644
index 0000000000000000000000000000000000000000..34675c632bc914bcc39a583a74aeb124ba145138
--- /dev/null
+++ b/fairnb/entity/entity.py
@@ -0,0 +1,177 @@
+import copy
+import logging
+from abc import ABC, abstractmethod
+from dataclasses import dataclass, field
+from pathlib import Path
+
+import pandas as pd
+
+from fairnb.api.dbrepo import DBRepoConnector
+from fairnb.entity.entity_provenance import EntityProvenance
+
+
+PROVENANCE_TABLE_NAME = "entity_provenance"
+DEPENDENCY_TABLE_NAME = "entity_dependencies"
+
+LOG = logging.getLogger(__name__)
+# TODO: Upload Datetime objects as Timestamps instead of str
+
+@dataclass
+class Entity(ABC):
+    """ A O-Prov Entity class used to represent an Entity created by a notebook.
+    Subtypes of this class implement the specific upload and download logic for the
+    platform the entity was persisted on.
+    """
+    location: Path = field(init=True)
+    dbrepo_connector: DBRepoConnector = field(init=True)
+    name: str = field(init=True, default=None)
+    description: str = field(init=True, default="")
+    id: str | None = field(init=True, default=None)
+    type: str = field(init=True, default=None)
+    metadata_table_id: int | None = field(init=False, default=None)
+    dependency_table_id: int | None = field(init=False, default=None)
+    metadata: EntityProvenance | None = field(init=False, default=None)
+
+    @classmethod
+    @abstractmethod
+    def new(cls, *args, **kwargs):
+        """Create a new entity which exists at creation time only locally at 'self.location'."""
+        raise NotImplementedError
+
+    @classmethod
+    @abstractmethod
+    def existing(cls, *args, **kwargs):
+        """Use an existing entity which is already uploaded to the database. """
+        raise NotImplementedError
+
+    def __post_init__(self):
+        assert self.location
+
+        # if record not yet created delay metadata loading etc. until upload
+        if self.id is None:
+            assert self.name
+            assert self.description
+            assert self.type
+            return
+
+        # Download metadata if it exists
+        self.metadata_table_id = self.dbrepo_connector.get_table(PROVENANCE_TABLE_NAME)[
+            "id"
+        ]
+        self.dependency_table_id = self.dbrepo_connector.get_table(
+            DEPENDENCY_TABLE_NAME
+        )["id"]
+        self.download_provenance()
+
+    @abstractmethod
+    def download(self) -> EntityProvenance:
+        """Download this Entity and return the attached EntityProvenance"""
+        raise NotImplementedError
+
+    @abstractmethod
+    def upload(self, executed_file: Path, dependencies=None):
+        """Upload this Entity"""
+        raise NotImplementedError
+
+    def exists_locally(self):
+        """Checks if local file or directory exists. If so, True is returned, otherwise False"""
+        return self.location.exists()
+
+    def copy_to_location(self, new_location: Path, overwrite: bool = True):
+        """Copy local files to new location and return new deep copy of self with new location"""
+
+        if new_location.exists() and not overwrite:
+            raise FileExistsError(f"File {new_location} already exists")
+
+        new = copy.deepcopy(self)  # strip all references to self
+        new.location = new_location
+        new_location.parent.mkdir(parents=True, exist_ok=True)
+        new_location.write_bytes(self.location.read_bytes())  # works as long file < RAM
+        return new
+
+    def download_provenance(self) -> EntityProvenance:
+        """ Download provenance information by using self.id and assign it to self.metadata"""
+        assert self.id
+
+        if self.metadata_table_id is None:
+            self.metadata_table_id = self.dbrepo_connector.get_table(
+                PROVENANCE_TABLE_NAME
+            )["id"]
+        if self.dependency_table_id is None:
+            self.dependency_table_id = self.dbrepo_connector.get_table(
+                DEPENDENCY_TABLE_NAME
+            )["id"]
+
+        df = self.dbrepo_connector.download_table_as_df(str(self.metadata_table_id))
+
+        row = df[df["id"] == self.id].iloc[0]
+
+        self.metadata = EntityProvenance.from_series(row)
+        self.type = self.metadata.type
+        return self.metadata
+
+    def upload_provenance(self, provenance: EntityProvenance):
+        metadata_table = self.create_provenance_table_if_not_exists(provenance)
+        self.metadata_table_id = metadata_table["id"]
+        dependency_table = self.create_dependency_table_if_not_exists()
+        self.dependency_table_id = dependency_table["id"]
+
+        self.dbrepo_connector.upload_data(
+            provenance.to_frame().drop("id", axis=1), str(self.metadata_table_id)
+        )
+
+        df = self.dbrepo_connector.download_table_as_df(str(self.metadata_table_id))
+
+        # FIXME: create robust version of id retrieval, if possible
+        row = df.iloc[df["id"].idxmax()]  # get the newest row, as it should contain the correct data
+        meta = EntityProvenance.from_series(row)
+        assert meta.creation_time == provenance.creation_time and meta.name == provenance.name
+
+        self.id = meta.id
+        self.metadata = meta
+
+    def upload_dependencies(self, dependencies):
+        """ Upload the dependency information for this Entity.
+        It lists all entities, which have an id, this entity depends on.
+        """
+
+        if dependencies is not None:
+            df = pd.DataFrame(
+                {
+                    "entity_id": pd.Series(dtype="int"),
+                    "depends_on": pd.Series(dtype="int"),
+                }
+            )
+
+            # TODO: how to handle missing id in dependency?
+
+            for dependency in dependencies:
+                if dependency.id is not None:
+                    df = pd.concat([
+                        df,
+                        pd.DataFrame([{"entity_id": self.id,
+                                       "depends_on": dependency.id}])
+                    ])
+                else:
+                    LOG.warning("Dependency has no id, skipping dependency upload")
+
+            self.dbrepo_connector.upload_data(df, str(self.dependency_table_id))
+
+    def create_provenance_table_if_not_exists(self, provenance: EntityProvenance):
+        df = provenance.to_frame().drop("id", axis=1)
+
+        return self.dbrepo_connector.create_table_if_not_exists(
+            df, PROVENANCE_TABLE_NAME, "A table containing Provence information on all persisted Entities."
+        )
+
+    def create_dependency_table_if_not_exists(self):
+        df = pd.DataFrame(
+            {
+                "entity_id": pd.Series(dtype="int"),
+                "depends_on": pd.Series(dtype="int"),
+            }
+        )
+
+        return self.dbrepo_connector.create_table_if_not_exists(
+            df, DEPENDENCY_TABLE_NAME, "Entity dependencies on other entities"
+        )
diff --git a/fairnb/entity/entity_provenance.py b/fairnb/entity/entity_provenance.py
new file mode 100644
index 0000000000000000000000000000000000000000..bcd551da7b0263c030ab9aad7583d63341aeb563
--- /dev/null
+++ b/fairnb/entity/entity_provenance.py
@@ -0,0 +1,102 @@
+from dataclasses import dataclass
+from datetime import datetime
+from pathlib import Path
+import re
+
+import git
+import pandas as pd
+
+from definitions import BASE_PATH
+
+
+@dataclass
+class EntityProvenance:
+    """ Data class providing Provenance Information about an Entity
+    """
+
+    id: str | None  # id of entity, always unique
+    uri: str  # unique resource identifier used to locate entity (can also be used to point to table containing entity)
+    name: str  # name of specific entity describing the data it contains
+    description: str  # more detailed description of the enitity
+    type: str  # type of entity, if notebook is run with different data type stays the same
+    commit: str  # the exact commit id of the repository at the time of execution
+    branch: str  # the branch of the repository, makes manual search of commit easier
+    repo_uri: str  # the uri of the repository, used to locate the repository
+    executed_file: str  # path to notebook which was executed to create the entity
+    creation_time: datetime  # timestamp of creation time of entity
+    platform: str  # platform on which the entity is uploaded (e.g. dbrepo, invenio, ...)
+
+    @classmethod
+    def new(
+            cls,
+            name: str,
+            description: str,
+            executed_file: Path,
+            type: str,
+            uri: str,
+            platform: str,
+    ):
+        repo = git.Repo(BASE_PATH)
+
+        git_branch = repo.head.reference
+        branch = git_branch.name
+        commit = git_branch.repo.commit().hexsha
+
+        # TODO: Better way to point to repo instead of ssh / https link
+        #  --> more general approach independent of authentication
+        repo_uri = git_branch.repo.remote().url
+        if repo_uri.startswith("ssh://"):
+            repo_uri = re.sub(":\d+/", "/", f"https://{repo_uri.split('@', 1)[1]}")
+
+        creation_time = datetime.now()
+
+        executed_file_rel = executed_file.resolve().relative_to(BASE_PATH)
+
+        return cls(
+            id=None,
+            name=name,
+            description=description,
+            uri=uri,
+            commit=commit,
+            repo_uri=repo_uri,
+            creation_time=creation_time,
+            branch=branch,
+            executed_file=executed_file_rel.as_posix(),
+            type=type,
+            platform=platform,
+        )
+
+    @classmethod
+    def from_series(cls, df: pd.DataFrame):
+        return cls(
+            id=df["id"],
+            name=df["name"],
+            description=df["description"],
+            uri=df["uri"],
+            commit=df["commit"],
+            repo_uri=df["repo_uri"],
+            executed_file=df["executed_file"],
+            creation_time=datetime.strptime(
+                df["creation_time"], "%Y-%m-%d %H:%M:%S.%f"
+            ),  # TODO: replace with '%F %T'
+            branch=df["branch"],
+            type=df["type"],
+            platform=df["platform"],
+        )
+
+    def to_frame(self):
+        return pd.DataFrame(
+            {
+                "id": pd.Series(self.id, dtype=str),
+                "name": pd.Series(self.name, dtype=str),
+                "description": pd.Series(self.description, dtype=str),
+                "uri": pd.Series(self.uri, dtype=str),
+                "commit": pd.Series(self.commit, dtype=str),
+                "repo_uri": pd.Series(self.repo_uri, dtype=str),
+                "executed_file": pd.Series(self.executed_file, dtype=str),
+                "creation_time": pd.Series(self.creation_time, dtype=str),
+                "branch": pd.Series(self.branch, dtype=str),
+                "type": pd.Series(self.type, dtype=str),
+                "platform": pd.Series(self.platform, dtype=str),
+            }
+        )
diff --git a/fairnb/entity/invenio_entity.py b/fairnb/entity/invenio_entity.py
new file mode 100644
index 0000000000000000000000000000000000000000..f794105aa49c6ee1cf014d25134de2164d3cf6e1
--- /dev/null
+++ b/fairnb/entity/invenio_entity.py
@@ -0,0 +1,104 @@
+from dataclasses import dataclass, field
+from pathlib import Path
+
+from fairnb.api.dbrepo import DBRepoConnector
+from fairnb.api.invenio import InvenioManager, InvenioConnector
+from fairnb.entity.entity import Entity
+from fairnb.entity.entity_provenance import EntityProvenance
+
+
+@dataclass
+class InvenioEntity(Entity):
+    invenio_manager: InvenioManager = field(init=True, default=None)
+    record_metadata: dict = field(init=True, default=None)
+    publish_record: bool = field(init=True, default=False)
+
+    @classmethod
+    def new(
+            cls,
+            record_metadata: dict,
+            location: Path,
+            name: str,
+            description: str,
+            type: str,
+            dbrepo_connector: DBRepoConnector,
+            invenio_connector: InvenioConnector,
+            publish_record: bool = False,
+    ):
+        return cls(
+            invenio_manager=InvenioManager(invenio_connector),
+            record_metadata=record_metadata,
+            dbrepo_connector=dbrepo_connector,
+            location=location,
+            name=name,
+            description=description,
+            type=type,
+            publish_record=publish_record,
+        )
+
+    @classmethod
+    def existing(
+            cls,
+            id: str,
+            location: Path,
+            dbrepo_connector: DBRepoConnector,
+            invenio_connector: InvenioConnector,
+    ):
+        return cls(
+            id=id,
+            location=location,
+            dbrepo_connector=dbrepo_connector,
+            invenio_manager=InvenioManager(invenio_connector)
+        )
+
+    def __post_init__(self):
+        super().__post_init__()
+
+        if not self.id:
+            assert self.record_metadata is not None
+            return
+
+        self.invenio_manager.record_id = self.metadata.uri.split('/')[-1]
+
+    def upload(self, executed_file: Path, dependencies: list[Entity] = None):
+        dir_path: Path
+        regex: str
+
+        if self.location.is_dir():
+            dir_path = self.location
+            regex = ".*"
+        else:
+            dir_path = self.location.parent
+            regex = f".*/{self.location.name}"
+
+        create_response = self.invenio_manager.create_record(
+            self.record_metadata
+        ).json()
+        record_id = create_response["id"]
+        self.invenio_manager.upload_record(dir_path,
+                                           regex,
+                                           only_filename=False if self.location.is_dir() else True)
+
+        if self.publish_record:
+            publish_response = self.invenio_manager.publish_record()
+            uri = publish_response["links"]["self_doi"]
+        else:
+            uri = create_response["links"]["record"]  # Invalid until published
+
+        metadata = EntityProvenance.new(
+            name=self.name,
+            description=self.description,
+            executed_file=executed_file,
+            uri=uri,
+            type=self.type,
+            platform="invenio",
+        )
+
+        self.upload_provenance(metadata)
+        self.upload_dependencies(dependencies)
+
+    def download(self) -> EntityProvenance:
+        if not self.metadata:
+            self.download_provenance()
+
+        return self.invenio_manager.download_record(self.location)
diff --git a/fairnb/executor.py b/fairnb/executor.py
new file mode 100644
index 0000000000000000000000000000000000000000..9c859b00aadfa99fd35145ca0ac08a14f26d0359
--- /dev/null
+++ b/fairnb/executor.py
@@ -0,0 +1,84 @@
+import papermill
+from nbconvert.preprocessors import ExecutePreprocessor
+
+from fairnb.entity.entity import Entity
+from fairnb.nb_config import NbConfig
+
+
+class Executor:
+    @staticmethod
+    def download_dependencies(nb_config: NbConfig, require_download: bool = False):
+        """ Set up the dependencies to allow for later execution """
+
+        # download dependencies if not already present
+        [entity.download() for entity in nb_config.dependencies
+         if (not entity.exists_locally()) or require_download]
+
+    @classmethod
+    def execute(cls, nb_config: NbConfig, require_download: bool = False, only_local: bool = False, **kwargs):
+        """ Execute the notebook specified in nb_config by providing nb_config.dependencies
+        and upload the generated Entities if only_local is False.
+        """
+
+        # TODO: allow parsing of additional paremeters (wanted?). use kwargs for that.
+
+        if not only_local:
+            cls.download_dependencies(nb_config, require_download)
+
+        cls.execute_notebook(nb_config)
+
+        if not only_local:
+            cls.upload_entities(nb_config)
+
+    @staticmethod
+    def execute_notebook(nb_config: NbConfig):
+        # papermill executes the notebook and inserts INPUT_PATHS and OUTPUT_PATHS into the notebook by either
+        # replacing the cell tagged with 'parameters' or by inserting a new cell at the top of the notebook
+        # with that tag.
+        papermill.execute_notebook(
+            nb_config.nb_location.resolve(),
+            nb_config.nb_location.resolve(),
+            parameters=dict(
+                INPUT_PATHS={entity.type: entity.location.__str__() for entity in nb_config.dependencies},
+                OUTPUT_PATHS={entity.type: entity.location.__str__() for entity in nb_config.entities}
+            )
+        )
+
+    @staticmethod
+    def upload_entities(nb_config: NbConfig):
+        # load generated entity and upload it
+        for entity in nb_config.entities:
+            # use inspect to get path of caller
+            entity.upload(nb_config.nb_location, nb_config.dependencies)
+
+    def reproduce_entity(self, entity: Entity):
+        pass
+
+    # TODO: additional functionality of executor class
+    # class ExperimentReproducer:
+    #     def __init__(self):
+    #         pass
+    #         # self.config = self.configure()
+    #
+    #     def entity(self, creation_func, *args, input_entity: [str] = None, **kwargs):
+    #         """ Saves the created entity which is returned by the creation_func as a DRO """
+    #
+    #         if input_entity is not None:
+    #             # TODO: collect input entities
+    #             collected_entities = []
+    #             for entity in input_entities:
+    #                 collected_entities.append(self.collect_entity(entity))
+    #
+    #         result = creation_func(args, input_entities, kwargs)
+    #
+    #         return result
+    #
+    #     def db_repo_entity(self, function: Callable[..., pd.DataFrame], *args, **kwargs):
+    #         """ Saves the created dataframe to DBRepo while citing the inputs. """
+    #         df = function(args, kwargs)
+    #
+    #         # TODO: upload code to DBRepo
+    #
+    #     def recreate_entity(self, uri: str):
+    #         """ Checkout correct commit, download required artefacts and execute correct artefact code. """
+    #         pass
diff --git a/dbrepo_ismir/ml.py b/fairnb/ml.py
similarity index 100%
rename from dbrepo_ismir/ml.py
rename to fairnb/ml.py
diff --git a/fairnb/nb_config.py b/fairnb/nb_config.py
new file mode 100644
index 0000000000000000000000000000000000000000..e7f99518113e7ac4921848ed97b684e7ed530ce0
--- /dev/null
+++ b/fairnb/nb_config.py
@@ -0,0 +1,16 @@
+from dataclasses import dataclass, field
+from pathlib import Path
+
+from fairnb.entity.entity import Entity
+
+
+@dataclass
+class NbConfig:
+    nb_location: Path
+    entities: list[Entity]
+    dependencies: list[Entity]
+    nb_output_location: Path = field(init=True, default=None)
+
+    def __post_init__(self):
+        if not self.nb_output_location:
+            self.nb_output_location = self.nb_location
diff --git a/dbrepo_ismir/util.py b/fairnb/util.py
similarity index 68%
rename from dbrepo_ismir/util.py
rename to fairnb/util.py
index cfde5914a4685cf373dc6e29b197a296c515c35e..41d67b8e784fa16a61aa35691a3c12302c2abda2 100644
--- a/dbrepo_ismir/util.py
+++ b/fairnb/util.py
@@ -4,8 +4,8 @@ import pathlib
 import pandas as pd
 import tarfile
 
-from dbrepo_ismir.dbrepo import DBRepoConnector
-from dbrepo_ismir.invenio import InvenioManager, InvenioConnector
+from fairnb.api.dbrepo import DBRepoConnector
+from fairnb.api.invenio import InvenioManager, InvenioConnector
 from definitions import CONFIG_PATH
 import yaml
 
@@ -27,39 +27,34 @@ class Util:
             self.configs: dict[str, (dict, dict)] = {}
 
     def get_config(self, path: pathlib.Path = None) -> (dict, dict):
-        path = CONFIG_PATH if path is None else path
+        path = CONFIG_PATH / "config.yaml" if path is None else path
 
         # use cached config if possible
         if path.as_posix() not in self.configs:
-            with open(path / "config.yml", "r") as file:
+            with open(path, "r") as file:
                 config: dict = yaml.safe_load(file)
 
-            with open(path / "credentials.yml", "r") as file:
-                credential: dict = yaml.safe_load(file)
-
-            self.configs[path.as_posix()] = config, credential
+            self.configs[path.as_posix()] = config
 
         return self.configs[path.as_posix()]
 
     def get_dbrepo_connector(self, path: pathlib.Path = None):
-        config, credentials = self.get_config(path=path)
+        config = self.get_config(path=path)
         return DBRepoConnector.from_config(
-            config["dbrepo"],
-            credentials["dbrepo"]
+            config, config["credentials"]
         )
 
     def get_invenio_connector(self, path: pathlib.Path = None):
-        config, credentials = self.get_config(path=path)
+        config = self.get_config(path=path)
         return InvenioConnector(
-            credentials["invenio"]["token"],
-            config["invenio"]["host"]
+            token=config["credentials"]["token"],
+            host=config["host"]
         )
 
     def get_invenio_manager(self, path: pathlib.Path = None):
-        config, credentials = self.get_config(path=path)
+        config = self.get_config(path=path)
         return InvenioManager(
-            credentials["invenio"]["token"],
-            config["invenio"]["host"]
+            self.get_invenio_connector(path=path)
         )
 
     def load_input_table(self, path: pathlib.Path) -> pd.DataFrame:
diff --git a/notebooks/.ipynb_checkpoints/1_audio_files-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/1_audio_files-checkpoint.ipynb
index 55ff5d3fe1a0928752d2bdd4525965ffec7b298e..24456088a68c3ede3dd0a13b0660d218120040b4 100644
--- a/notebooks/.ipynb_checkpoints/1_audio_files-checkpoint.ipynb
+++ b/notebooks/.ipynb_checkpoints/1_audio_files-checkpoint.ipynb
@@ -1,9 +1,38 @@
 {
  "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "4389a8092677254e",
+   "metadata": {
+    "collapsed": false,
+    "jupyter": {
+     "outputs_hidden": false
+    }
+   },
+   "source": [
+    "# Audio Files\n",
+    "\n",
+    "Bundle the provided audio files (400, in MP3) in a tar, encrypt it using gzip and store it in the output folder."
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
+   "execution_count": 2,
+   "id": "87ab37c6",
+   "metadata": {
+    "collapsed": false,
+    "jupyter": {
+     "outputs_hidden": false
+    },
+    "papermill": {
+     "duration": 0.015854,
+     "end_time": "2023-09-01T11:23:36.114552",
+     "exception": false,
+     "start_time": "2023-09-01T11:23:36.098698",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "from definitions import BASE_PATH\n",
@@ -15,23 +44,47 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 3,
+   "id": "1b4e6b01",
    "metadata": {
+    "papermill": {
+     "duration": 0.01235,
+     "end_time": "2023-09-01T11:23:36.096700",
+     "exception": false,
+     "start_time": "2023-09-01T11:23:36.084350",
+     "status": "completed"
+    },
     "tags": [
      "parameters"
     ]
    },
    "outputs": [],
    "source": [
+    "# Parameters\n",
+    "INPUT_PATHS = {}\n",
     "OUTPUT_PATHS = {\n",
-    "    \"audio_tar\": (BASE_PATH / \"tmp\" / \"1_audio_files\" / \"output\" / \"emotifymusic.tar.gz\").__str__()\n",
+    "    \"audio_tar\": str(BASE_PATH / \"tmp/1_audio_files/output/emotifymusic.tar.gz\")\n",
     "}"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {},
+   "execution_count": 4,
+   "id": "1e487573",
+   "metadata": {
+    "collapsed": false,
+    "jupyter": {
+     "outputs_hidden": false
+    },
+    "papermill": {
+     "duration": 2.541999,
+     "end_time": "2023-09-01T11:23:38.664303",
+     "exception": false,
+     "start_time": "2023-09-01T11:23:36.122304",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "# load provided files\n",
@@ -41,13 +94,27 @@
     "dir_path.mkdir(parents=True, exist_ok=True)\n",
     "# unzip to dir_path\n",
     "with zipfile.ZipFile(zip_path, \"r\") as zfile:\n",
-    "    zfile.extractall(path=dir_path)\n"
+    "    zfile.extractall(path=dir_path)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {},
+   "execution_count": 5,
+   "id": "c3193f35",
+   "metadata": {
+    "collapsed": false,
+    "jupyter": {
+     "outputs_hidden": false
+    },
+    "papermill": {
+     "duration": 1.066369,
+     "end_time": "2023-09-01T11:23:39.735691",
+     "exception": false,
+     "start_time": "2023-09-01T11:23:38.669322",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "file_paths = list(dir_path.rglob('**/*.*'))\n",
@@ -55,22 +122,28 @@
     "flattened_dir_path.mkdir(parents=True, exist_ok=True)\n",
     "\n",
     "for path in file_paths:\n",
-    "    (flattened_dir_path / path.relative_to(dir_path).as_posix().replace('/', '_')).write_bytes(path.read_bytes())\n"
+    "    (flattened_dir_path / path.relative_to(dir_path).as_posix().replace('/', '_')).write_bytes(path.read_bytes())"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "\n"
-     ]
-    }
-   ],
+   "execution_count": 6,
+   "id": "3272ea2b",
+   "metadata": {
+    "collapsed": false,
+    "jupyter": {
+     "outputs_hidden": false
+    },
+    "papermill": {
+     "duration": 15.267255,
+     "end_time": "2023-09-01T11:23:55.005410",
+     "exception": false,
+     "start_time": "2023-09-01T11:23:39.738155",
+     "status": "completed"
+    },
+    "tags": []
+   },
+   "outputs": [],
    "source": [
     "tar_path = Path(OUTPUT_PATHS[\"audio_tar\"])\n",
     "tar_path.parent.mkdir(parents=True, exist_ok=True)\n",
@@ -81,7 +154,6 @@
   }
  ],
  "metadata": {
-  "celltoolbar": "Tags",
   "kernelspec": {
    "display_name": "Python 3 (ipykernel)",
    "language": "python",
@@ -97,9 +169,26 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.9"
+   "version": "3.10.13"
+  },
+  "papermill": {
+   "default_parameters": {},
+   "duration": 20.157944,
+   "end_time": "2023-09-01T11:23:55.227765",
+   "environment_variables": {},
+   "exception": null,
+   "input_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/1_audio_files.ipynb",
+   "output_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/1_audio_files.ipynb",
+   "parameters": {
+    "INPUT_PATHS": {},
+    "OUTPUT_PATHS": {
+     "audio_tar": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/1_audio_files/output/emotifymusic.tar.gz"
+    }
+   },
+   "start_time": "2023-09-01T11:23:35.069821",
+   "version": "2.4.0"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 1
+ "nbformat_minor": 5
 }
diff --git a/notebooks/.ipynb_checkpoints/3_aggregate_features-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/3_aggregate_features-checkpoint.ipynb
index 84a3f978993d3566cf13413af61126ca335e5238..2a1646457063b748a64d7fa7711c8f2ae9686943 100644
--- a/notebooks/.ipynb_checkpoints/3_aggregate_features-checkpoint.ipynb
+++ b/notebooks/.ipynb_checkpoints/3_aggregate_features-checkpoint.ipynb
@@ -2,7 +2,17 @@
  "cells": [
   {
    "cell_type": "markdown",
-   "metadata": {},
+   "id": "f48a4573",
+   "metadata": {
+    "papermill": {
+     "duration": 0.002709,
+     "end_time": "2023-09-01T11:35:09.037422",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:09.034713",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "source": [
     "# Aggregate MFCC Features\n",
     "\n",
@@ -12,19 +22,57 @@
   {
    "cell_type": "code",
    "execution_count": 1,
+   "id": "389576b8",
    "metadata": {
-    "collapsed": true
+    "ExecuteTime": {
+     "end_time": "2023-08-14T15:32:41.535589478Z",
+     "start_time": "2023-08-14T15:32:40.986222405Z"
+    },
+    "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"
+    },
+    "jupyter": {
+     "outputs_hidden": true
+    },
+    "papermill": {
+     "duration": 0.268336,
+     "end_time": "2023-09-01T11:35:09.308546",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:09.040210",
+     "status": "completed"
+    },
+    "tags": []
    },
    "outputs": [],
    "source": [
+    "from pathlib import Path\n",
+    "\n",
     "import pandas as pd\n",
     "from definitions import BASE_PATH"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 2,
+   "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"
+    },
+    "papermill": {
+     "duration": 0.010186,
+     "end_time": "2023-09-01T11:35:09.321555",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:09.311369",
+     "status": "completed"
+    },
     "tags": [
      "parameters"
     ]
@@ -45,20 +93,83 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
+   "execution_count": 3,
+   "id": "12fd5cf6",
+   "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"
+    },
+    "papermill": {
+     "duration": 0.007292,
+     "end_time": "2023-09-01T11:35:09.330862",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:09.323570",
+     "status": "completed"
+    },
+    "tags": [
+     "injected-parameters"
+    ]
+   },
+   "outputs": [],
+   "source": [
+    "# Parameters\n",
+    "INPUT_PATHS = {\n",
+    "    \"raw_features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/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",
+    "}\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "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"
+    },
+    "papermill": {
+     "duration": 4.766846,
+     "end_time": "2023-09-01T11:35:14.099543",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:09.332697",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "# inputs\n",
-    "assert INPUT_PATH.exists() and INPUT_PATH.is_dir()\n",
-    "\n",
-    "raw_features = pd.read_csv(INPUT_PATH / \"raw_features.csv\", index_col=False)"
+    "raw_features = pd.read_csv(INPUT_PATHS[\"raw_features\"], index_col=False)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {},
+   "execution_count": 5,
+   "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"
+    },
+    "papermill": {
+     "duration": 4.018079,
+     "end_time": "2023-09-01T11:35:18.120249",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:14.102170",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [
     {
      "data": {
@@ -136,10 +247,10 @@
        "      <td>-562.85785</td>\n",
        "      <td>-96.164795</td>\n",
        "      <td>-219.259016</td>\n",
-       "      <td>53.561838</td>\n",
+       "      <td>53.561839</td>\n",
        "      <td>-0.772320</td>\n",
        "      <td>0.029056</td>\n",
-       "      <td>259.63270</td>\n",
+       "      <td>259.63272</td>\n",
        "      <td>215.094182</td>\n",
        "      <td>...</td>\n",
        "      <td>-27.458416</td>\n",
@@ -147,8 +258,8 @@
        "      <td>0.484271</td>\n",
        "      <td>8.660648</td>\n",
        "      <td>-0.479016</td>\n",
-       "      <td>-28.989983</td>\n",
-       "      <td>27.533710</td>\n",
+       "      <td>-28.989979</td>\n",
+       "      <td>27.533707</td>\n",
        "      <td>0.952658</td>\n",
        "      <td>10.477735</td>\n",
        "      <td>-0.185771</td>\n",
@@ -172,7 +283,7 @@
        "      <td>8.185075</td>\n",
        "      <td>0.208425</td>\n",
        "      <td>-38.095375</td>\n",
-       "      <td>31.397880</td>\n",
+       "      <td>31.397882</td>\n",
        "      <td>-1.494916</td>\n",
        "      <td>10.917299</td>\n",
        "      <td>0.020985</td>\n",
@@ -195,8 +306,8 @@
        "      <td>-3.781627</td>\n",
        "      <td>9.191043</td>\n",
        "      <td>0.260886</td>\n",
-       "      <td>-22.667440</td>\n",
-       "      <td>50.992897</td>\n",
+       "      <td>-22.667439</td>\n",
+       "      <td>50.992905</td>\n",
        "      <td>1.600777</td>\n",
        "      <td>10.125545</td>\n",
        "      <td>0.595763</td>\n",
@@ -212,14 +323,14 @@
        "      <td>-0.366586</td>\n",
        "      <td>0.000000</td>\n",
        "      <td>194.26416</td>\n",
-       "      <td>148.226647</td>\n",
+       "      <td>148.226648</td>\n",
        "      <td>...</td>\n",
-       "      <td>-44.843810</td>\n",
+       "      <td>-44.843815</td>\n",
        "      <td>28.490644</td>\n",
        "      <td>-6.242015</td>\n",
        "      <td>10.546545</td>\n",
        "      <td>0.341848</td>\n",
-       "      <td>-25.040888</td>\n",
+       "      <td>-25.040886</td>\n",
        "      <td>46.878204</td>\n",
        "      <td>1.844494</td>\n",
        "      <td>11.160392</td>\n",
@@ -270,7 +381,7 @@
        "      <td>-24.712723</td>\n",
        "      <td>23.410387</td>\n",
        "      <td>-4.502398</td>\n",
-       "      <td>6.687984</td>\n",
+       "      <td>6.687983</td>\n",
        "      <td>0.238807</td>\n",
        "    </tr>\n",
        "    <tr>\n",
@@ -278,21 +389,21 @@
        "      <td>rock_96.mp3</td>\n",
        "      <td>rock</td>\n",
        "      <td>-541.23600</td>\n",
-       "      <td>27.163334</td>\n",
+       "      <td>27.163332</td>\n",
        "      <td>-119.113996</td>\n",
        "      <td>58.420684</td>\n",
        "      <td>-0.957699</td>\n",
-       "      <td>-7.415961</td>\n",
+       "      <td>-7.415959</td>\n",
        "      <td>210.49246</td>\n",
        "      <td>125.453699</td>\n",
        "      <td>...</td>\n",
        "      <td>-37.584858</td>\n",
-       "      <td>28.087936</td>\n",
+       "      <td>28.087940</td>\n",
        "      <td>-9.704238</td>\n",
        "      <td>8.447620</td>\n",
        "      <td>0.112760</td>\n",
        "      <td>-38.147890</td>\n",
-       "      <td>21.814402</td>\n",
+       "      <td>21.814400</td>\n",
        "      <td>-8.249507</td>\n",
        "      <td>7.807756</td>\n",
        "      <td>0.071968</td>\n",
@@ -316,7 +427,7 @@
        "      <td>7.727378</td>\n",
        "      <td>0.207489</td>\n",
        "      <td>-29.497524</td>\n",
-       "      <td>25.410654</td>\n",
+       "      <td>25.410656</td>\n",
        "      <td>-3.356614</td>\n",
        "      <td>8.170526</td>\n",
        "      <td>0.160330</td>\n",
@@ -331,16 +442,16 @@
        "      <td>52.444200</td>\n",
        "      <td>-1.705641</td>\n",
        "      <td>0.000000</td>\n",
-       "      <td>187.04274</td>\n",
+       "      <td>187.04272</td>\n",
        "      <td>96.440874</td>\n",
        "      <td>...</td>\n",
-       "      <td>-26.967848</td>\n",
-       "      <td>8.714737</td>\n",
+       "      <td>-26.967852</td>\n",
+       "      <td>8.714736</td>\n",
        "      <td>-9.511491</td>\n",
        "      <td>5.551820</td>\n",
        "      <td>-0.025604</td>\n",
-       "      <td>-23.020084</td>\n",
-       "      <td>13.948638</td>\n",
+       "      <td>-23.020082</td>\n",
+       "      <td>13.948639</td>\n",
        "      <td>-2.664985</td>\n",
        "      <td>5.051498</td>\n",
        "      <td>-0.258407</td>\n",
@@ -354,17 +465,17 @@
        "      <td>-49.380943</td>\n",
        "      <td>54.045627</td>\n",
        "      <td>-0.863093</td>\n",
-       "      <td>-32.930653</td>\n",
+       "      <td>-32.930650</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.894963</td>\n",
+       "      <td>5.894962</td>\n",
        "      <td>0.390705</td>\n",
        "      <td>-20.983192</td>\n",
-       "      <td>29.312023</td>\n",
+       "      <td>29.312021</td>\n",
        "      <td>-0.321836</td>\n",
        "      <td>6.571660</td>\n",
        "      <td>0.384794</td>\n",
@@ -383,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.163334 -119.113996   \n",
+       "396        rock_96.mp3       rock -541.23600   27.163332 -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.561838 -0.772320   0.029056  259.63270  215.094182  ... -27.458416   \n",
+       "1    53.561839 -0.772320   0.029056  259.63272  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.226647  ... -44.843810   \n",
+       "4    52.191182 -0.366586   0.000000  194.26416  148.226648  ... -44.843815   \n",
        "..         ...       ...        ...        ...         ...  ...        ...   \n",
        "395  76.869437 -0.201055 -89.948746  201.18045  111.724191  ... -27.043941   \n",
-       "396  58.420684 -0.957699  -7.415961  210.49246  125.453699  ... -37.584858   \n",
+       "396  58.420684 -0.957699  -7.415959  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.04274   96.440874  ... -26.967848   \n",
-       "399  54.045627 -0.863093 -32.930653  191.73538   93.971242  ... -21.929403   \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",
        "\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.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",
+       "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",
        "..         ...       ...        ...       ...        ...        ...       ...   \n",
        "395  22.451445 -7.234634   8.471853  0.753855 -24.712723  23.410387 -4.502398   \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",
+       "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",
        "\n",
        "        39_std   39_skew  \n",
        "0    15.285639  0.171462  \n",
@@ -421,7 +532,7 @@
        "3    10.125545  0.595763  \n",
        "4    11.160392  0.503120  \n",
        "..         ...       ...  \n",
-       "395   6.687984  0.238807  \n",
+       "395   6.687983  0.238807  \n",
        "396   7.807756  0.071968  \n",
        "397   8.170526  0.160330  \n",
        "398   5.051498 -0.258407  \n",
@@ -430,7 +541,7 @@
        "[400 rows x 202 columns]"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 5,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -456,15 +567,32 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {},
+   "execution_count": 6,
+   "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"
+    },
+    "papermill": {
+     "duration": 0.100061,
+     "end_time": "2023-09-01T11:35:18.222876",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:18.122815",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "# outputs\n",
-    "OUTPUT_PATH.mkdir(parents=True, exist_ok=True)\n",
+    "aggregated_features_path = Path(OUTPUT_PATHS[\"aggregated_features\"]).resolve()\n",
+    "aggregated_features_path.parent.mkdir(parents=True, exist_ok=True)\n",
     "\n",
     "output = mfcc_merged\n",
-    "output.to_csv(OUTPUT_PATH / \"features.csv\", index=False)"
+    "output.to_csv(aggregated_features_path, index=False)"
    ]
   }
  ],
@@ -485,9 +613,28 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.9"
+   "version": "3.10.13"
+  },
+  "papermill": {
+   "default_parameters": {},
+   "duration": 10.352537,
+   "end_time": "2023-09-01T11:35:18.542818",
+   "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",
+   "parameters": {
+    "INPUT_PATHS": {
+     "raw_features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/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"
+    }
+   },
+   "start_time": "2023-09-01T11:35:08.190281",
+   "version": "2.4.0"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 1
+ "nbformat_minor": 5
 }
diff --git a/notebooks/.ipynb_checkpoints/4_split-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/4_split-checkpoint.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..e4d2c5b8d040a4d02b422248156afd19de044258
--- /dev/null
+++ b/notebooks/.ipynb_checkpoints/4_split-checkpoint.ipynb
@@ -0,0 +1,393 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "e92b4fe9",
+   "metadata": {
+    "papermill": {
+     "duration": 0.004009,
+     "end_time": "2023-09-01T11:35:21.835314",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:21.831305",
+     "status": "completed"
+    },
+    "tags": []
+   },
+   "source": [
+    "# Split the Features into Train and Test Set"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "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"
+    },
+    "papermill": {
+     "duration": 0.308442,
+     "end_time": "2023-09-01T11:35:22.147872",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:21.839430",
+     "status": "completed"
+    },
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "import pandas as pd\n",
+    "from pathlib import Path\n",
+    "from definitions import BASE_PATH"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "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
+    },
+    "papermill": {
+     "duration": 0.010206,
+     "end_time": "2023-09-01T11:35:22.161506",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:22.151300",
+     "status": "completed"
+    },
+    "tags": [
+     "parameters"
+    ]
+   },
+   "outputs": [],
+   "source": [
+    "# 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",
+    "}"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "id": "205bb941",
+   "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"
+    },
+    "papermill": {
+     "duration": 0.023269,
+     "end_time": "2023-09-01T11:35:21.827306",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:21.804037",
+     "status": "completed"
+    },
+    "tags": [
+     "injected-parameters"
+    ]
+   },
+   "outputs": [],
+   "source": [
+    "# Parameters\n",
+    "INPUT_PATHS = {\n",
+    "    \"aggregated_features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/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",
+    "}\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "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"
+    },
+    "papermill": {
+     "duration": 0.03203,
+     "end_time": "2023-09-01T11:35:22.218934",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:22.186904",
+     "status": "completed"
+    },
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "# INPUT\n",
+    "\n",
+    "for path in INPUT_PATHS.values():\n",
+    "    assert Path(path).exists()\n",
+    "\n",
+    "features = pd.read_csv(INPUT_PATHS[\"features\"])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "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"
+    },
+    "papermill": {
+     "duration": 0.014722,
+     "end_time": "2023-09-01T11:35:22.236276",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:22.221554",
+     "status": "completed"
+    },
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "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)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "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"
+    },
+    "papermill": {
+     "duration": 0.022698,
+     "end_time": "2023-09-01T11:35:22.264468",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:22.241770",
+     "status": "completed"
+    },
+    "tags": []
+   },
+   "outputs": [
+    {
+     "data": {
+      "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>False</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>397</th>\n",
+       "      <td>rock_97.mp3</td>\n",
+       "      <td>True</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>True</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>400 rows × 2 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "              filename  train\n",
+       "0      classical_1.mp3   True\n",
+       "1     classical_10.mp3   True\n",
+       "2    classical_100.mp3   True\n",
+       "3     classical_11.mp3   True\n",
+       "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",
+       "398        rock_98.mp3   True\n",
+       "399        rock_99.mp3   True\n",
+       "\n",
+       "[400 rows x 2 columns]"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "split_concat"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "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"
+    },
+    "papermill": {
+     "duration": 0.01433,
+     "end_time": "2023-09-01T11:35:22.283192",
+     "exception": false,
+     "start_time": "2023-09-01T11:35:22.268862",
+     "status": "completed"
+    },
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "# 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)"
+   ]
+  }
+ ],
+ "metadata": {
+  "celltoolbar": "Tags",
+  "kernelspec": {
+   "display_name": "Python 3 (ipykernel)",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.10.13"
+  },
+  "papermill": {
+   "default_parameters": {},
+   "duration": 1.989508,
+   "end_time": "2023-09-01T11:35:22.603293",
+   "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",
+   "parameters": {
+    "INPUT_PATHS": {
+     "aggregated_features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/input/features.csv"
+    },
+    "OUTPUT_PATHS": {
+     "split": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/output/split.csv"
+    }
+   },
+   "start_time": "2023-09-01T11:35:20.613785",
+   "version": "2.4.0"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/notebooks/.ipynb_checkpoints/5_ml_model-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/5_ml_model-checkpoint.ipynb
index 4153d2821277e123acc407ba2fc99879fc9aa18d..533a6917b6c112b831e8b49ca5bb682fdbea7d44 100644
--- a/notebooks/.ipynb_checkpoints/5_ml_model-checkpoint.ipynb
+++ b/notebooks/.ipynb_checkpoints/5_ml_model-checkpoint.ipynb
@@ -27,9 +27,9 @@
     "from sklearn.svm import SVC\n",
     "\n",
     "from definitions import BASE_PATH\n",
-    "from dbrepo_ismir.util import Util\n",
+    "from fairnb.util import Util\n",
     "\n",
-    "from dbrepo_ismir.dbrepo import DBRepoConnector"
+    "from fairnb.dbrepo import DBRepoConnector"
    ]
   },
   {
diff --git a/notebooks/6_report.ipynb b/notebooks/.ipynb_checkpoints/6_report-checkpoint.ipynb
similarity index 100%
rename from notebooks/6_report.ipynb
rename to notebooks/.ipynb_checkpoints/6_report-checkpoint.ipynb
diff --git a/notebooks/.ipynb_checkpoints/standalone-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/standalone-checkpoint.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..8052009cb2607b44e77034d4eea255218768766f
--- /dev/null
+++ b/notebooks/.ipynb_checkpoints/standalone-checkpoint.ipynb
@@ -0,0 +1,1051 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "source": [
+    "# Standalone Notebook\n",
+    "\n",
+    "Notebook containing the same functionality as main.ipynb, but it includes all steps in one notebook and does not spin up separate Jupyter Kernels and uploads the entities directly."
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "outputs": [],
+   "source": [
+    "import pickle\n",
+    "from concurrent.futures import ThreadPoolExecutor\n",
+    "from contextlib import contextmanager, redirect_stderr, redirect_stdout\n",
+    "\n",
+    "import librosa\n",
+    "import numpy as np\n",
+    "import pandas as pd\n",
+    "import yaml\n",
+    "from matplotlib import pyplot as plt\n",
+    "from pandas import DataFrame, Index\n",
+    "from sklearn.decomposition import PCA\n",
+    "from sklearn.metrics import accuracy_score\n",
+    "from sklearn.model_selection import train_test_split, GridSearchCV\n",
+    "from sklearn.preprocessing import StandardScaler\n",
+    "from sklearn.svm import SVC\n",
+    "\n",
+    "from fairnb.entity.dbrepo_entity import DbRepoEntity\n",
+    "from fairnb.entity.invenio_entity import InvenioEntity\n",
+    "from fairnb.executor import Executor\n",
+    "from fairnb.nb_config import NbConfig\n",
+    "from fairnb.util import Util\n",
+    "from definitions import BASE_PATH, RESOURCE_PATH\n",
+    "import tarfile\n",
+    "import zipfile\n",
+    "import os\n",
+    "from pathlib import Path\n",
+    "from definitions import CONFIG_PATH"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:23:50.320823230Z",
+     "start_time": "2023-09-06T16:23:48.109782272Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "outputs": [],
+   "source": [
+    "# experiment executor setup\n",
+    "executor = Executor()\n",
+    "util = Util.get_instance()              # util caches loaded credentials -> via Singleton\n",
+    "connector = util.get_dbrepo_connector(CONFIG_PATH / \"dbrepo_config.yml\")\n",
+    "# connector = None\n",
+    "invenio_connector = util.get_invenio_connector(CONFIG_PATH / \"invenio_config.yml\")\n",
+    "\n",
+    "NOTEBOOK_PATH = BASE_PATH / \"notebooks\"\n",
+    "LOCAL_PATH = BASE_PATH / \"tmp\" / \"standalone\"\n",
+    "NB_LOCATION = NOTEBOOK_PATH / \"standalone.ipynb\"\n",
+    "\n",
+    "ONLY_LOCAL = True"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:23:50.458322232Z",
+     "start_time": "2023-09-06T16:23:50.353619129Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 1. Audio Files\n",
+    "\n",
+    "Bundle the provided audio files (400, in MP3) in a tar, encrypt it using gzip and store it in the output folder."
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "outputs": [],
+   "source": [
+    "tar_path = LOCAL_PATH / \"emotifymusic.tar.gz\"\n",
+    "\n",
+    "# load provided files\n",
+    "zip_path = BASE_PATH / \"resource\" / \"1_audio_files\" / \"emotifymusic.zip\"\n",
+    "dir_path = LOCAL_PATH / \"music\" / \"original\"\n",
+    "\n",
+    "dir_path.mkdir(parents=True, exist_ok=True)\n",
+    "# unzip to dir_path\n",
+    "with zipfile.ZipFile(zip_path, \"r\") as zfile:\n",
+    "    zfile.extractall(path=dir_path)\n",
+    "\n",
+    "file_paths = list(dir_path.rglob('**/*.*'))\n",
+    "flattened_dir_path = LOCAL_PATH / \"music\" / \"flattened\"\n",
+    "flattened_dir_path.mkdir(parents=True, exist_ok=True)\n",
+    "\n",
+    "for path in file_paths:\n",
+    "    (flattened_dir_path / path.relative_to(dir_path).as_posix().replace('/', '_')).write_bytes(path.read_bytes())\n",
+    "\n",
+    "tar_path.parent.mkdir(parents=True, exist_ok=True)\n",
+    "\n",
+    "with tarfile.open(tar_path, \"w:gz\") as file:\n",
+    "    file.add(flattened_dir_path, arcname=os.path.sep)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:24:08.646424970Z",
+     "start_time": "2023-09-06T16:23:50.456742546Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "outputs": [],
+   "source": [
+    "if not ONLY_LOCAL:\n",
+    "    metadata = yaml.safe_load(open(RESOURCE_PATH / \"1_audio_files\" / \"record_metadata.yml\", \"r\"))\n",
+    "\n",
+    "    nb_config_audio_files = NbConfig(\n",
+    "        nb_location=NB_LOCATION,\n",
+    "        entities=[\n",
+    "            audio_files_entity := InvenioEntity.new(\n",
+    "                name = \"audio_tar\",\n",
+    "                description = \"Raw music files\",\n",
+    "                location = tar_path,\n",
+    "                dbrepo_connector=connector,\n",
+    "                invenio_connector=invenio_connector,\n",
+    "                record_metadata=metadata,\n",
+    "                type=\"audio_tar\"\n",
+    "            )\n",
+    "        ],\n",
+    "        dependencies=[]\n",
+    "    )\n",
+    "\n",
+    "    executor.upload_entities(nb_config_audio_files)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:24:08.657491220Z",
+     "start_time": "2023-09-06T16:24:08.653629315Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 2. Feature Extraction of Base audio Files from Invenio\n",
+    "\n",
+    "Load the audio files from the tar, and extract the MFCC features from them and store them in a dataframe."
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "outputs": [],
+   "source": [
+    "DEFAULT_SAMPLING_RATE = 22050\n",
+    "\n",
+    "with tarfile.open(tar_path, \"r:gz\") as archive:\n",
+    "    archive.extractall(path=(path_out := tar_path.with_suffix(\"\").with_suffix(\"\")))\n",
+    "\n",
+    "files = list(path_out.rglob(\"**/*.*\"))\n",
+    "\n",
+    "\n",
+    "@contextmanager\n",
+    "def suppress_stdout_stderr():\n",
+    "    \"\"\"A context manager that redirects stdout and stderr to devnull\"\"\"\n",
+    "    with open(os.devnull, 'w') as fnull:\n",
+    "        with redirect_stderr(fnull) as err, redirect_stdout(fnull) as out:\n",
+    "            yield err, out\n",
+    "\n",
+    "\n",
+    "def generate_mfcc_feature(filepath: Path, sr: int = DEFAULT_SAMPLING_RATE, number_mfccs: int = 40):\n",
+    "    x, _ = load_mp3(filepath, sr=sr)\n",
+    "    assert sr == _\n",
+    "    mfcc = librosa.feature.mfcc(x, sr=sr, n_mfcc=number_mfccs)\n",
+    "\n",
+    "    # transpose to use mfcc bands as columns instead of rows\n",
+    "    return pd.DataFrame(mfcc).transpose()\n",
+    "\n",
+    "\n",
+    "def load_mp3(filepath: Path, sr: int = DEFAULT_SAMPLING_RATE):\n",
+    "    x, sr = librosa.load(filepath, sr=sr)  # extract wave (x) with sample rate (sr)\n",
+    "    return x, sr\n",
+    "\n",
+    "\n",
+    "with suppress_stdout_stderr(), ThreadPoolExecutor(6) as executor:\n",
+    "    dataframes = list(executor.map(\n",
+    "        lambda args: generate_mfcc_feature(args), files)\n",
+    "    )\n",
+    "for file, dataframe in zip(files, dataframes):\n",
+    "    dataframe[\"sample\"] = dataframe.index.to_numpy(copy=True)\n",
+    "    dataframe[\"filename\"] = file.name\n",
+    "    dataframe[\"label\"] = file.name.split('_')[0]  # extract genre from file name\n",
+    "\n",
+    "dataframe_concat = pd.concat(dataframes)\n",
+    "columns_old = list(dataframe_concat.columns)\n",
+    "columns = columns_old[-3:] + columns_old[:-3]\n",
+    "dataframe_concat = dataframe_concat[columns]\n",
+    "\n",
+    "raw_features = dataframe_concat"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:32:07.450652088Z",
+     "start_time": "2023-09-06T16:24:08.668477833Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "[<matplotlib.lines.Line2D at 0x7efe441870a0>]"
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "text/plain": "<Figure size 640x480 with 1 Axes>",
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGdCAYAAAA8F1jjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACsrklEQVR4nO2deZwUxfn/Pz17wQK7y7nLfYiCyOGNeCAqikc8EpMYNV4x+tOgJmqMIYdnDMZcJoZoEhPRfL1ivKJRIiKHKKggCCgip8u13Oxy7jX9+2OYmeruquqqPqZ7huedF3F2prqqurq66qnneeopwzRNEwRBEARBEDEkEXUFCIIgCIIgRJCgQhAEQRBEbCFBhSAIgiCI2EKCCkEQBEEQsYUEFYIgCIIgYgsJKgRBEARBxBYSVAiCIAiCiC0kqBAEQRAEEVuKo66AX5LJJDZs2IAOHTrAMIyoq0MQBEEQhAKmaWLXrl3o0aMHEgmx3iTvBZUNGzagd+/eUVeDIAiCIAgPrF27Fr169RL+nveCSocOHQCkbrSioiLi2hAEQRAEoUJDQwN69+6dmcdF5L2gkjb3VFRUkKBCEARBEHmGm9sGOdMSBEEQBBFbSFAhCIIgCCK2kKBCEARBEERsIUGFIAiCIIjYQoIKQRAEQRCxhQQVgiAIgiBiCwkqBEEQBEHEllAFlYkTJ+K4445Dhw4d0K1bN1x00UVYtmyZJc2YMWNgGIbl3w033BBmtQiCIAiCyBNCFVRmzpyJ8ePHY+7cuZg6dSqam5tx1llnYc+ePZZ01113HTZu3Jj599BDD4VZLYIgCIIg8oRQI9NOmTLF8vfkyZPRrVs3zJ8/H6NHj858X15ejpqamjCrQhAEQRBEHpJTH5X6+noAQKdOnSzfP/300+jSpQuGDh2KCRMmYO/evcI8Ghsb0dDQYPlHEARBEERhkrOzfpLJJH7wgx/gpJNOwtChQzPfX3bZZejbty969OiBRYsW4c4778SyZcvw0ksvcfOZOHEi7r333lxVmyAIgiCICDFM0zRzUdCNN96IN998E7Nnz5Ye5/zOO+/gjDPOwIoVK3DIIYc4fm9sbERjY2Pm7/Tpi/X19XQoIUEQBBF7Vm3ZjbeXbsKVo/qhTUlR1NWJjIaGBlRWVrrO3znRqNx00014/fXXMWvWLKmQAgAjR44EAKGgUlZWhrKyslDqSRAEQRBhc/pvZwIAtu1pwoRzDo+4NvEnVEHFNE3cfPPNePnllzFjxgz079/f9ZqFCxcCALp37x5m1QiCIAgiUuav2RF1FfKCUAWV8ePH45lnnsGrr76KDh06oK6uDgBQWVmJtm3bYuXKlXjmmWdw7rnnonPnzli0aBFuvfVWjB49GsOHDw+zagRBEAQRKcnceF7kPaEKKo8++iiAVFA3lieeeAJXX301SktL8fbbb+Phhx/Gnj170Lt3b1x88cX42c9+Fma1CIIgCCJySExRI3TTj4zevXtj5syZYVaBIAiCIGIJKVTUoLN+CIIgCCICSE5RgwQVgiAIgogCUqkoQYIKQRAEQUQAiSlqkKBCEARBEBFAu37UIEGFIAiCICKA5BQ1SFAhCIIgiAggQUUNElQIgggd0zRx2/ML8dOXF0ddFYIIlLr6/Xjn802u4Th4kJyiBgkqBEGEzvqd+/DSgvV4+oNa7G9ujbo6BBEYJz44Dd+ZPA//XbxR+9ocnQmc95CgQhBE6LQmaUAmCpN01569fGu0FSlgSFAhCCJ0aOFIFDq8Pr6/uRVrt+/VuoZwQoIKQRAEQfiEt9X4vD++i1Memo4FtfxTkml7shokqBAEkVNobCYKkVZOx165ZQ8A4PVFfP8VehXUIEGFIIicQqtIohCRdWtRnydnWjVIUCEIInRMwWeCKBRkArjoJ3oX1CBBhSCInEKrSKIQ8aJRIUlFDRJUCILIKTQ2E4WITKMiNP2EVZkCgwQVgiByipmMugYEETxyjYroexJVVCBBhSCInGLSOpIoQOQ+KiJn2rBqU1iQoEIQRE6hwZkoRKQaFYEWkYR2NUhQIQgip9DQTBQinnxU6GVQggSVAmR/cyvGP/0xXpi3NuqqEAQAq+qb7PJEISI7zkr0G70KapCgUoD839wv8d/FG3HHvxdFXRWCAGCLo0KDM1GAyLbd05Z8f5CgUoDs2NsUdRUIwgI7TpNdnihEvJh+SLuoBgkqBQj1fSJumFZJhSAKDi+mH0INElQKEHopiLhBIfQLn71NLZGW/4/Zq3HeH9/Ftt2NkZTvRaNCqEGCSgFC9lAibiTJmbageX/FVgy563/45RtLI6vDfa9/hk83NOCJ99ZEUr6sW4t+oldBDRJUChCaCIi4YbH8UPcsOB44IKD8ddaqiGsCJIxoyvUS8I1QgwSVAoTeCSJo6vc2Y8n6es/Xs4M4dc/CI2FEIx2s3roHG+v3Wb5rV1YcSV2kph8K+OYLElQKEOr6RNCc+pvp+MojszF31TZP11s1KtRDC40otBg79zbhtN/MwKiJ79jqkrvKbG7Yn/ns6fRkQgkSVAoQeimIoNm5txkAMG3pJt95UfcsPIwINCq12/fmvEwW0zRx/C+nMX+L01LAN3+QoFKAUOcnwsLrjjKL6Yf6Z8ERlV9ImmQEWx1bbGXSAjE8SFApQEi1ToSF165FAd8Km6IcSyq79jfj5mcXZP62Cw25oLnV6njiRVCJyLUn7yBBpQCZX7sj6ioQBYrXVSNpVAobA7mdcf84bTm+3JY1/bRGIKis3W514pVXgQ4l9EOogsrEiRNx3HHHoUOHDujWrRsuuugiLFu2zJJm//79GD9+PDp37oz27dvj4osvxqZN/u3gBzNL1jdEXQWiQPGqrWOvIhV54ZFrzcCmBmtQtxbRtpoQGffwLMvfpMkOj1AFlZkzZ2L8+PGYO3cupk6diubmZpx11lnYs2dPJs2tt96K1157DS+88AJmzpyJDRs24Gtf+1qY1SIIwiNeh2KTticXNLk2/dj7UARyigMvSh16F9QIdcP5lClTLH9PnjwZ3bp1w/z58zF69GjU19fj73//O5555hmcfvrpAIAnnngChx9+OObOnYsTTjghzOoRBKGJV20IBXzLH0zTxIrNuzGga3tlASTXcVTs2osoNCp2SFMYHjn1UamvTwWM6tSpEwBg/vz5aG5uxtixYzNpBg8ejD59+mDOnDncPBobG9HQ0GD5RxBEbvA6FltXmzSgx5lHZ67Emb+fhZ++vFj5mlybfuw9iPVRaWU66X8+2YCpn+XGlUCmURG9NyTbqJEzQSWZTOIHP/gBTjrpJAwdOhQAUFdXh9LSUlRVVVnSVldXo66ujpvPxIkTUVlZmfnXu3fvsKtOEMQBvPossitgOjQz3jw8dTkA4LmP1ipfk/PItLY+1MwKKgc+b93diFueXYDrnpoXuLMtzx+FfFTCI2eCyvjx47FkyRI899xzvvKZMGEC6uvrM//WrlV/mQ4WBnRpF3UViALF62CcJNNPQRN1HJXWVnZXWerznsbsac72rcR+aW7lCSri9JJTgIKoTsGTk0MRbrrpJrz++uuYNWsWevXqlfm+pqYGTU1N2Llzp0WrsmnTJtTU1HDzKisrQ1lZWdhVzmty7dhGHDx4jqPCDMgUR6XwyLmPiq0PtXI0dsVF2XV40BqVJo7gQz4q4RGqRsU0Tdx00014+eWX8c4776B///6W34855hiUlJRg2rRsGOJly5ahtrYWo0aNCrNqBQ29LkRYeBUyyJm2sMl1CH17H+LF6SlmFmwtHA2IH3hCiRdBxXEfSROPv7sK87/c7rVqBUmoGpXx48fjmWeewauvvooOHTpk/E4qKyvRtm1bVFZW4tprr8Vtt92GTp06oaKiAjfffDNGjRpFO358QJI9Yac1aQaiaQsiMi31z8Ij10pcexfi9S+2vzfnYFdQEN16yqd1+MV/lwIA1jx4nv8MC4RQNSqPPvoo6uvrMWbMGHTv3j3z7/nnn8+k+f3vf4+vfOUruPjiizF69GjU1NTgpZdeCrNahQ/NAwTDG4s3Yujd/wvkQEE66+cgwIPQEbXpxxKnh9PBgtao8PqwrARV367VW/e4JzoICVWjovJw2rRpg0mTJmHSpElhVuWgglasBMv3nv4YAHDtk/N8r9I8m358lUrkFA8PK5Hjw1icph/mN076oJ1peYUEMe4Wk38hFzrrhyAIZbybfkijUsjk3EfF8TfrTJv6zPazXBxaKHPYFf1i/76kiKZkHtQqBQjNA0RYeJ2OSDgpbHIfmdb6N+uCwpMXWgLWqPA0i0H08ZIi0qjwIEGlACHTDxEaHsdR2p6cR3jyUQm+GnJsPio8jQrzHS/uia/SAzL92N0jikmjwoVapQAhOYUIC8OjpMKueKl/Fh5Ra1Qsf3MdXQMWVHjfBaJRyU7JSQrhnIEElQKEJgKCRxCOel7nI5d5hIgTXpxpcx1C3warzeBpNnIxJnrSqNj+Zl9Rek+ykKBCEAcJiQh3FCRdto8S+Y0fOWX11j245z+fYmP9PuVr7D2IVT5kPofYzXh92MuhhLI86D3JkpMQ+kRuoQ5O8CjyOJuwWzuDcKYt5N7ZmjSxu7EFlW1Loq6Kd3Lso/LNv8zBll2NmP/lDrx288lK19jHOLc4PUEPiXzTj//ItG5lHKyQRqUAoQ5O8PBq+pn1xZbMZ8+mn4NEeP7GY+9jxL1vYe32vVFXJaf4iXq8ZVcjAGDx+nrlaxzbkzmRadkTlXPhwC0z/aiWTtv4+ZCgUoBQByd4eDX9BBGDwuKjUsD98+PanQCA/3yyIdqK5Jioz/rhRab95mNzhOmDLh/wtkC0C/BWX64CflE0IUHlIGHn3ias2rI76moQEeJ10cs6Snre9eO2LaPACPq03rgTdUBVXu9av3Mf9/dgyuP4qAT8zAtZoNeFBJUChDdoHHnfVJz+25l0lsRBjFf1fBChHaI+PbmpJYnNu/bnrLyDT1CJeNcP0978XT/hO6kEUkTI3eae/3yKe1/7NNxCQoAElQJEpob9aA0dH37w4m0yCUKtb3F29J2bPuf98V0c/8A0rNicG60iCSr++c8nGzD6oen4bEODa1q2tXlNn4un0SrzURH81rC/Bbv2N2f+DjNY55ZdjZj8/ho88d4aS5n5AAkqxEHD9j1N+Oqf38P/zf0y6qrkFewkJBuMVYlCo7L8gIDy5uKNOSkviHbKJ8JQqNzy7ALUbt+Lm5792DWt2/b3XOz62d/c6imvp+bwx6Og69zYkq1frn2K/EKCCnHQ8Mg7y7Ggdid+9sqSnJS3sX4fmloCPrU1AthtzV41BXGZt3NVjYNZoxK0MNjY7HyHHPOsq2kxfP+Rnh3besqLFXDCdKZlo0Pnl5hCgkrB41hdHFzjJ2q37c2sJPY1eVvxeGHJ+nqMmvgOLvjT7JyVGRasa4vXCTguAd9yVXQ+CypeJjG2jzw+e3VgdRFhr6M14Fs0kWnLios8XSeKAWOawGufbMCf3lnut2oAgBZGUtFpjt2NLYEf6qgLCSoFCLvaiMtKNgreX7kVo389PbNNMZfqzpcXrAcAfF63K2dluiPvDPX7+HZrtt3YwU6r5JgEfMvVgZ35LKh4qXkiAK2bCJ5ga3+XrSH0OXkEWiPR6cneSpk0fSXXd8oEcPOzC/Cbt77Ax7U7POXNwj4Xnbo+NmMlht/7Fv48Y4XvOniFBJUCxCKoRFeNyHlh3joAwCfrUoGkcrmFMt8mqpc+XocR976FR6Y5V29sfwpie/LBIDwfbCeYszF6gr53ldxyHpk2YGHopmc+PpAHX5jYvrvJR+4pWiwB8NRZuHYn9ja1RhptmQSVAoSdTA6WiKA87FMqu+rz6vimSr5NVD9+cTEA4LdTv3D8xt7LwG7tAegLYnEJZJWrkoMIkpdPsIuAwAUVheysJhNOjJNcCE+SItyK39SwX5ouiNpbNSrq1+3clxKSelZ588EJAhJUChDSqKSwq4fZPxcciCAaFrmeqH4/9QtMmu5DNStRlNitPbXb9uLI+97Cb/63TDl7Mya2n1wJ7q2t+fvmefNRYTQqOXBncPrSusVRCa7sHXua8Ks3P3eW4SPPkgPBisIMi+jV9NNyoC8XJ6ITF0hQKUDYl9jpS5u/A6gudpcUdjAN2wwUdJRKGVt3N+IP05bj1/9b5tlhWNYc9hgov5u6DLv2t+BPGoJRrhRMs77YgkXrdvrOp6kl6cv5Os92f/qGXRQEr71wz48Vjvg+KsHVacJLi7lHJMgmf7fy04IKQjSRtnjUqKSv83Oek19IUClwvA4ai9btxPMf1ea16Uhm+vF67o0qufRRYc1YXp+3bGK15+ml7SzH12tfrca6HXtx5T8+xAV/ek+YRrV5TnzwHRx+15Sc7hSLC96cabOfg3emdX5n76+umogAq7RgLd+x1Z9GxXDmwfwRxGhl2hYcqqSfZ7qOUUCCSgESRJTIC/70Hu58cTFmLNvinjimyJoh7MVBVM60snuWTdKyPpO0OgBY4qqoYnUS1L5cifU79rmmURXktu5Onei7bJO3XVt5LN/7JjfOtLJdPxzTD/P5w9XbcfOzC7C5wduRCqJ3xc9tpzUq87/MCkGWd8Z71hmsu0HVc2w+sDWZNCpEsAS4PfkLjwN1HLDvUGEHsLC3KucyMmkQRUlNP4xa3YS3AcuqUQmnbVQ0Pbol55tTdBD4fTNyscPGmUbuf8F+9c2/zMFrn2zAHf9e5Kk+ovbx01fSw9GrC7MmpTC7nheNCvmoEKHhd1KIevNCY0ur55WPXKNSOKYfljAGN/vWT09Cnk/bu2mamLdmu/SMEhX5SbfsfDZ9BoVpmrj1+YX4PWdHWDZN9nPwQrozP4fpx+R/zubg/HLmF8Fqi2W3HYduxNbBTagyTTMzhqV9VIrJ9EMEidSZlvlbZYtu1M635zz8Lo7/5TSs2Kyv2bEPZuzLGbYWM5etFsSGGpnwYR/UvJym7NdH5YX56/D1x+bga39+X5JKRaOiV3rUgnoc+Lh2B15esB5/4MTYScM2UxRaqFxGpg1DGxt0XBZuGRqZX/fUfJz8q3ewr6k1E5W2mEw/RJCoeOAvWrcTg38+xfXI76hXAqu27gEAvLm4zsPVYtNP1MfSB4koSJQOstZotZh+rD4qqvFo/GomXjkQ6Xe55PTjhIoNXrMaXndvRS3gB8nuRj2H4ii2J+c6Mi0P6a4fxQp8ZXh3bn5Ba/bccnt76SZsrN+P2Su20q4fIhwsGhVBmt+8lVLjPvHeGmlecVF9e6mFTD0ctpySy1c6kB01kgpvrM86qZqmtbyVW8SCA4tlV0ZIfUoljLu+j4q3usTktQmEVhXJg7nhsHb97GlsyXwn05byI9Oalv/6QTR2BHHX7UqLA82Pxc08xiPJmIBKvKhSA4IElQJE5awf1Rc2nwdc2cFloZedQ42N6TJIZ36T5CGrrf0MIFaL0r6s2J6cSy62J7NNLnrWuhPVwehMa6dZM3hdGLt+Xl24Hkfc/T88+f4a9/SCXT+maeJbf53ruz5CQcXHbZuZ//rz5VIvT3X8NzMB30ijQoSHz84eFxu9l5fWOaDkZhAAcqtR0bE9i9jfIl41231g9jKCSrHiKisXkWkTNpPnkvX12M2swlP10MuTBBU1DUmQPip2c9v2PU34/nMLAQB3/ydlqpbt6OOWbwLrd+7DB6u3+6qbjCDMfdbXJGjNFN889tandTjnD+9yd3gmzexBpOSjQgSK5awfW2fX7fpxsbV7qYfMkbiQ8Du4maaJJomgYi/rmD4dLdeqXpf57KGOvFXscx/W4rtPzstoeNg00z/fjK88MhsXTbIGf8uV6aeQ0D0Owk+bPTTlcxz7wNvYsNM9Jg6LdUcL53eYgWk5RQdzyl6FOau2SfPMmKYsX2pWTAP2vb3+n/OxdGMDvvf0x450LUkz056qi5IwIEGlAFEx/agSl4Ha05ZW299tSooyn8NeKUflq+vltnRU+yZMtC3NtqNqeWGotH/80mK8vXQTnvmgFoB1AnljScr5eoXN+VY3JofXfhKT18YT9r6r4qOis/VVxp9nrMT2PU2u51bZ6/ghoynhlW6a8BSoUKVsWbksS9bXB1K+V6x+Ys7feVv/WxhPejL9EKEhGjSUJ5iYqCG81MJe9RG9K4W/BU1uX2l/E6ubhsP+u5cywhR49zalzDtTPs3uDOtYzj+SXlebE5f+n0vst6wiyLLtqutMy5v43WQK++/PfbQ2WxfB9uSg4pWJqubWVerq3eNBhWkhdasf77GxmlYy/RCh4bezx2ac9lQR8TWF5Hvgd3DTagrT2+4BL9eoUlKUgGma+CMT58NPmHOLdiAHW23jju6pu0O6V2jlz3tSIvOKCqIQ+n7yVMNN4Hf/TaR5zIXQwvuumdGoUMA3IjR4fhpNLUnUbt+rdH1cJvQgJuAc+HNmyOWun6SiECCaZNyjVDKfbfmoaijsJzAHSXFRwrEaFN2rroYkl0chxBXWR0W8myr7eUgPPUGFh5/XR7Q9OSh/O9G77a6xUJGS2Y/B9j02v+ZkEks3NtjeB2d5TYw2rWBD6M+aNQvnn38+evToAcMw8Morr1h+v/rqq2EYhuXf2WefHWaVDjp4nf2yv81VFlTiMkx78lHxMGnnI0kPgoP1eu/pvT2XYNu+pMjI7EzIlOEjP6st36OPSh53L4ePCrOqVpls2VW4WnnqUknaT0KmHREeShjAM9lYvw+rDwSh5JYhQdp0ihqOoLjjhU9wzh/exaMzV0rLY00/EVp+whVU9uzZgxEjRmDSpEnCNGeffTY2btyY+ffss8+GWaWDD07nm8ec0OlGXDQqXtA9DyTQskPM+83FG/G9p+ej4YDzW9KnqshVo8J+Nk2bRkWxjKT+NSyyiamkKOHwixDGD9IsN4+7f2C0WEw//DTs16o7yNLwTT8eLjoAd9ePGYyf1HjOzphsGW6aSRVfH/7nQMYTJsOPa3cCAP70zgrezxnSQmdJkZFTLbEdtWhNHjnnnHNwzjnnSNOUlZWhpqYmzGoc1Ph+N3M8UP/ro7UYWN0eRzNbYFPV0K+IQ1BhPsdlN5MXbjwwWB5W3QE/GHuYfx8VjXnFPuArb0+25REkxQnDsYVWJHypCN7sPZHpx276EZnUsp//NW8dfnXxcF8Tm+zazbv2Y+mGBst3XdqXYevuxgN14dUxGNPPonXinTuuGhWF/IUmS4VrXfPmfMf6cvHKTgsqUe74AWLgozJjxgx069YNgwYNwo033oht2+T7zRsbG9HQ0GD5R4hR1YjsbWrBxDeWYr5N25LLYfr9FVvxoxcXcQ+eC2K+CPPsDAc5eK/3HYgfwoax93Jbuj4q3nb9BGxvZ/IrLjLQ2moXVETX6ZWTzwJtUHgJif/zV5dgX5PaGUG68szxD0zLnAGWJi2kAGJH0SC6oOyMMLf8Ze1o2v6byi/8zmeP5vzi/HW49fmFme+a0oJKxGejRSqonH322Xjqqacwbdo0/OpXv8LMmTNxzjnnoLVV3MEnTpyIysrKzL/evXvnsMb5R+oFdfdheOSdFfjLrFW4+FGrkOD1UDYvrBTYfgGvApPMju0pQ42Sw3+xK9qktuDe9Wr2YElvPireG0P1SmsR/huffX4Jw6lRYcvQNTuxafY3tSofvFiotDBCoFCjYmvZ/5tbixH3vaUUuE3nXVGZvEU+KoG88lKTk7wE2e/Zs4jY77RqJs17x54mbn72aM63v/AJXj5wACiAzAIgcTBrVL71rW/hggsuwLBhw3DRRRfh9ddfx0cffYQZM2YIr5kwYQLq6+sz/9auXStMe7Di3KXhfs3yTfzD5XJ6Po7kN78vbcrr3/q3jAW1O3DHC59YVmo65HIB0tiSnUhlz0v0k5t5w75l0u0AOG4eHq5RzQ9wrlbZny97fC73ezu79jdj8bp6S5ofvbgIR98/VVtgFwmMa7fvdZydFAVsn3GDDfim8+yaWpI48cF3dKqVwc/7I/RR8TmYrd2+l+t/c+aQ6gOFyK9X0agIf/dR9Ylvfo6j7p+Ktz5znkBvkT84ZaQXAFGfNR+56YdlwIAB6NKlC1asEEclLCsrQ0VFheUfIcY+QeuSS2da2eDk175s2pZUbrl99c/v44X56/DTlxdzf1+3Yy++/9wCLFq307Xse/7zKW59fmFoqtwu7csyn72UoXOJCdOTdsQUfPaKfcy37/ph++3cVez5LuLSr31yHs7/02xM/WyT5fu9Ta3YrzGxi4pZt2MvTnloOkbc+5ZeXgHz5uKNGPSzKXjuw1rta4XjgeShehHM/GgkRR4qfjntNzO43//03MMd5U79bBN+/soSSzqVowisiynNCgr466xVAICn5nzp+M3io8K5Nv28o3SkBWImqKxbtw7btm1D9+7do65KXsO+lC2tZmgTZNBIBycPt2A5SsD2m6oAtnIL3xx132uf4dWFG3DBn97j/s7eyeT31+DlBeuxZpvalnBV0s/18pF9me/cr/ne0/Pxwxc+yXynK4x62Z7sV6XtdIyWa1S8+Kikw7D/ZdZKx29BmPLmrdnhO48gSDtj//glvhAuu1cvI8lv31omT6DRtEqmO85DTgbgoyISNNJ9ky33uqfm4Z9zrYKBm0bn/ZVb8donG7Lpc+KjInemTb9XEVt+whVUdu/ejYULF2LhwoUAgNWrV2PhwoWora3F7t27cccdd2Du3LlYs2YNpk2bhgsvvBADBw7EuHHjwqzWQcXk99fkjUZFhpdaWLSatoBPXkwWLJt2yU1CvAVIi2Z8CTfSVWtTov4ar9uxD28srsO/56/LqLFdF3o2IcNL8Da/sV4cVWKyMDg+KsKFv0LRuttro2b5pl2Yvmyzrzw+WrM945TteD7sZCZoGlmzLqvbhVufX4hXF65H/d5mTFlSZ2lj7vZkX6Yfjo+KaYY2lqUFO7fcZRoV0wQu+9sHlu/Y+oal0JAt5oCsoBK1RiXU7cnz5s3Daaedlvn7tttuAwBcddVVePTRR7Fo0SI8+eST2LlzJ3r06IGzzjoL999/P8rKykRZEpq8t2Krr9VsLuWUoN8Fu0c7ey9+B60SD0uMoJsynZ/O821kJ4gDt+DHdq8s8HkuQQ2Hj4qgRBUhibtrRPMOeKnDGuvP/P0sAMDrN5+MoT0rXdOXFBmW83vWbN2Dbzw2J/X5wfMc6a1uDIJ2lXSEDw5oql5esB5De1ZgyfoG/L/RAzDhgMmEh5+mCiqGjipZjYo8ne6YE4YZyE7CMkaKNSpR+6iEKqiMGTNG2oH/97//hVn8QUlLa9LSqYsShq8VbNBhnGXInWl9+qjAPpGpXsfHy6QT9GCTzs/q/yEvhOfU6mousv1t3UWjdlMqDrimaaKxJWk55VolP97ffjQqvHvKh23Kn21sUBJUihMJNDM7Kz+v2yVNbxf4/bBkfSqcxCsL12cEFZ13SeX5iZxpwzaBu70LLa0mkkkTz3B8g3jX5mKRaI2j4vw97WgftUYlVj4qhD/+8PZyDLvnLSxnjrY3DMNXh8/prh+Zi4rPepimfYXiL0MvPgv8wcj0bBJK56ezo8biX3Lgep2gZs7dU6oXcj9auPqJj3DcL97GNoWdVhbTD6cefgJncTUqMTGBSlGsov1wObs2SuqjImpXzeZhy+CV5++sH35lRGPZll2NmPjmUqyRhEeQoaNR+e/ijfiZzclWRC76nJszbdb0E3pVpJCgUkD8/u0vMkHA0hT5fMJxGZ+9+ahYVwsW04+qbCBUqejXh9eWP35xMY594G1scfF5Uc3PrZ2sJ+Gm/use8I3VoHjbnmy9hi+wzfxiC3Y1tmD6si2u+Tm0PA4Ni3s9VPOW5eeXfU2tuP1fn+B/nzq3juqiqt0qsQ0K9h1TjnwtJlPtannCzwqeH0fFhOjtuPX5hfjLzFW46M98x3g30nVN5z5lCf9ZtiRNrNjMDwPBQ9bW+5tbA4lxZdGWcfI7KJxpiehJ+NSo5HIlKV/J+cvbq+lHhJf3lncPz89bi517m/HPOWtQv7dZKwpoOqXVR0V+PU/I0HnGdoFP5zoZ+5uzk2Xn9qUK+clNPX6eL7c9NDPk5cGbfP/27iq8+PE6/L9/ztcrgFumWjp7OPQWW1Rf2dETYYZ4t9TBx7V8jZi4feZ9mfKh2bnXW3ybTF0P5H/D//GfZWvSRHkp36zJq5tV4Mp+3rm3CYN/PgUXP+aM4K0Lq1HhOftmfVTI9EOEiGFYfVR0B5Sc7voJOI6Kw5nWQx5B3r0JEw37m3Hb8wsxw7ZL45N19Rhx31u4aJLGqu7As2Hvy03O4e2+cbtGJgSo+6iI87PXS2VIZLPgLb69xPuQJQnrPdi8a7/2NYvX1eOLTU6/EtUa2lfHdtOf41wXhV1esubpUCZ3hQzarJA0TazYbG0f04RD26zC9j1N+PbjH+DVheuFaTKmH5cnkJQIKjxEbTrjgMZxwYGDBf3gpikh0w+RE5Zv2oWv/HF25m/d/ha2nMKeBxJ0ZFrH9mQNzYNr3i4N+a9567jfPzx1OV5asB5XP/GR5fuZX6QGn8XrxYee2eFpVNymKy+mH2vuck2GynVcXx3NPO3bZO33YD/7R5SOn7nSVw7mrdku/Z1/SrDeG7m7sQXn/2k2zvr9LLw439rHvApTdo2K7AA6L2XwrmDfH25pvnxUskHO2Dr85q0vuOnZZ/DNx+ZYhMffvrUMs1dsxfefWygsL7M92aVpmpMmSov5U667RiUcZGcXsXVwSxc2JKgUOHubWh0HeOkQpk36n3O/xOF3TckMuEF7lrP52e9D9bZEAo0nZ1oTqGtwP/tEO19bGbLyeTFQ7BOVa/5eJitXrQ2rFXLPnxV2DDjNmypRQHVQEWy/EBxDIUPX9r97f0vm8+1M0D7AvY3Xbt8L0zQdfbfV5qNin5RU+pdMm+BlUeA3Mq09Fo5pmpj1Bd/3ib3dD9dsx0NTsgHqduxtci0vq1GR0+jjzCi2Pwc5TLrV2cuBlGFAgspBhqiTi75/8eN1aGlNYufeJkz9bFPm2O8gSIeYtg+4QWEZIE39VTsArNm2F2c/PAsf1+4IpE5B2np524vdBx72+lRqlcHYrQ7u6ZyaHBEqY6ObT4r48DyFvCV12tvUwvk1hZvQwXvHdIVz6cF2kuuemrMGpzw0HXf/51PHb3ahzi6oPPJO9kiToDQqLEEvUJKmmTn1l62D6PnYv97TmH3GKk736etbkyZ2St4lXdMT29Ss8BQkboJIC5l+iHzh2Q9r8a2/zsV1T83Dw2+n1Kc/fXkxbn52QaDOtkHHUXmSOdvChGmb3UzMXr4Vlz8+F19uk2ucPq/bhcv+Ntfynec4KoGuhpw+KipbJLPXp9i+R11QMWET+Hz4qLDbsk1LWhWNiu1v2zUijYqaEMQzTZl48v01GHLX/xwmlzS8rZ77m1sDfUekE4uknF+9+TmA1Hkv9r5rz1O2U1CoUZFUi/c83V6D0iLvL0rSNLnRhUUCkf179qRglb7IXn/kfVOF6fY1tWopI9mya7cHe/xGGjdBhUw/RCR4WdF/uW1vJijUpOkr0dyaxNMf1OK1TzYE+gLJDyX0R5KjUfn23z/Aeyu24RaJ/TkNuysF8L7CCPKF52tUXAYejo+K22BlcoQM0d/CPGwO3Tv2NOH4X07Dbf9ayCnDPVO37ch2c4ZO3rwUpomMNkKkAbQ/2vp9zRhx71uZ0OhBxAvxegIvO/nai2y2+6hIzn/xInO5CYe8Jqgqd9/5JSwvCTTZzZmmWDiyP4MijsApQ/UZ7tXUqOTCR8WtjLRZmDQqROyx7wpg/wzLhhnEACnNj/m8pUF/54VM4FsicIg1YQa6yU80ocpotUo1StfYS9UxNfHqZZomXvx4HbbvacJLH693ZMSrj33V60xj06gI/G6UTD+cRCptZBdC3/l8ExpbkpizapvwGt2Fg9t5MSJYB1l7Wzp8VBKsoGIrw8uSwe15cprAHpROF3sQRRMmd5HweV0Ddu23mvOKJPfPQ7WmzZpnSOXCPYQ0KkQsCSL0e1hh9WWhuv2WaT/rJ8zFylcemc39PugysxoVddOPZdePYpsG4Shp2j7bdz/obLG2pzdtwhMgGYA1887Wyf3ChG00bVti3ZbLe/d0nWmlGhVJHYskL75d+LFM1La04lOpZZoe/Y6fTJqorvB25lvSdPYHkdn1249/4PjOKqjomX5ktCbFLcHPgp+aLe+dzzf5Mi26vWtxOeuHBJWAmf/lDizd2BB1NQLFceAb82eQjnDs6lL17BYRvEPqrBFW/UkNngQ+6E1MpmniwTc/F8ZwyIbQz34ndbZ0bNHO1ku9Tk4zjup1LPboqCy6W4hTu5msP4s0D94PJXTHfm5KWyZmhiiKqG4/skeRtUcNFtZN0vEcPipS04/+e+N2Ca9mJoDyUm9H0fEj0/LL2brb6Z+lbfpRrFezpopEpam/M3ke/rt4o1a+LGWC7dJpMn2DTD+Fw7bdjbj40fdxzh/ejboqQrz0N9kBcEH2X6tGRWyqUcGx8uStsDzm7ZWkaWoJdrNXbMVjM1eKYzh4EDSsGpUD/3UZEQPXRJlOQUVV2GKysHy234NI86AkA3HS2AWN1qSJD1dvt8QBstevLXO44v4Wa7p0fXUFfdmiQTYPFjOCyvqd1i3yjl0/XjQq4qI97foxTW9CUfpa3neq5ouiIvGCyc6oAZ2Vhc3WZFLY//hBC9Xynb18q/C3x99dJfxNhbSpmEw/BUQd4+uQF4eYMci6of2FYf8OqwObJlDPhLTWbU77ytnhTOujboA3TZJp6q2g3c7/yQoa1jJksD4q6T6q2xbeBBerNquEmQyaW5PaW8ftZwfZLxFqVAJ6Lf86axW++Zc5uGbyh5nv7H2CXa02NidtAQgPXKNZrl1QUXW4lL2ndn8OmZnIy5vjxSk0aZqefTREUahV372EZcEkT/vT8w5X9jOSxSvi5aHabrJkv/jvUum1dqHVTsaZVqkm4UGCSoBYTRcRViRg7KtJi0YlpB6cNE3c9OzHnq/n+dXo7iyR4eW2ecG2ZKj2Ibeor5Y8ORoVnbnHmb83UwA7cbYmrWY5JY2KQ3hWM1F4NfnZ83/mw9TW97mrstFo7U+WfTdEreZXo8L+KctJFm3WLtRZ6i1ZpLDIHhnfOVqcPnOdx2cl2l7OK5LXLNrjhOIjlDlC89pDqH1RKy4QMgI1mX4KB9aZzutumDVb92DXfm+HY4WFYxIILuabBcNm43/XotL0Z98NU3DcWJ9alexvbsVyzhksbB10XnjVU411NBzsYJn1UVFvHNOumVIVptg6wpkH+zfvWdmbzZHELph6mFCzaTgTne0rt63GdqE0ZfaD5W/7NSrYJzvVRYNMULGPVeyOG6dmkt+AfrbSiiZpr1nyLhOZfoo5vlI6/TthGMrPUCqocL6z98MgTkvWJe0TRaafAkLmDKrC8k27MOY3MzBq4jtBVsuCl66eNK027ij29/s1/djNA379Ltj39ncHzhA57hdv48zfzxJekzRNbWda+e8H/st+55In71BCt/u3O2z69e+x+x/YtV0qA7J9p5NTYyHSqCjUj/OdvT9yo8zCKmhb8hT8rbvrxx4Zms03KI1KkaF+H2nSWXRoo+8Ay3dedu7cUUXkTMvdBs1pl2c+qM30QbexLpFQ13C0tCa1+qX9u+N/OU0rOGMQUAj9AkTmDKrCrAMahN2N4jDdfvHy8otWg0CwKkE2K4cvrK6gwrk+0F0/zOf0QL/L5bklFU0/jS2tuO1fC/HaJ3Jv/swdcPxOROktdvIAxiAvGhXA7mMi/k0lPxOmsmCr4nTLnzit8FaY7Fepraj25+IU9nXjqOy1Oe9a30VxXtLtya32YIbitEKNyoF2lAlE1jKyn+v3OTXIfuZHrqBrmqiuaOP4WlTf/31al75MigFDb3uyhqbP/t3W3Y14eu6XSmUFBTnTFiAJ20ClS9QOSyLsEywvHHoQ2FXnLLqChWOF7VPwkZal4fTGmgdXbeEfYvfPOV/ipY/XY/YKsTd/Oj9AT6PC3fXjco29TOcErIcJ03KGiglbnor1sNTJ/nwVrpv/5XYMv+d/+D+Fwd9+n7x3lf3OHiQxqIWp/awh3qJhPycCqmx7siyOimyXEa8eckdcdewLC/1rbd8BuPjoXo60PI0KAOw8IDy5alQM9XH787pd+NWUz7m/qcbuKSpymprs17a0JvHtxz/AL17/TLFmYlopMm0h4s+ZVlcN7AUvmgTnYBWOOlDmjKxbpHN7s9qAq4rFn0arTtnrTv/tTG66TYqRcnmmG08+Ki7XWAUhe7uqYT+PyL5rBxr3wMvPKZjyM3lv5dbMoXM3/N/H2NPUip8dOByTl7ewTjzTj03Qtmt9/GpcAZ5GxVql/5v7JQb/fApeX7TBkk52fo8sjopdiHEz/ahqVNxIacm8Xsv5zuSPryJNQZuShDAvFsPQm8TtUXDT8E584AoqCoXNXrEVs1dsxeOzV/t+HpkwKiSoFA6WgciLRiXq3iDANr+GolFpbGm1BDbz6wfjNCdIzAEehDcvT0rVmdZ+9goLLwqtjobDsj05Lejo3r+H52/3a2Evc24dl2c6Z+U2R36qcXf2NyfxnckfAbCekiuqK1tHFv5jFGsieIK3aZrS8Po8GpvFAd8AZISum55ZgJcXrEPjgfgtOpFpWa0fLxQ9j3Q9lE0/Lm+QXXOng87YIWqWNsVF/B9sFCcSgZ6IzsK7DZX2ZfueX0GFTD8FiEz1q0JONCoe3v2U6cf6dya/IBwdADz89nK89dkmbhmpcjRxTAzi/PwKW6rXqzrT6poNdZxbGxmzgLJGxSpFWH/z8vztKhCbEMmrDztOzv9yu+uuH1m1Plid2lJs107ILrXfJ29R0a4sO7l1bm8N/55MOt+h/3yyAfO/3CGuqALsKcF2886tz3+Ch99eDsBl14/9UEKJ6UfUNYM+E8aukdIhaXI20XO+k1FWojY1FiXUd/3IEG2p5pbnIhix/cCvKY5C6Bc46Rd3X1Mrzn9kNh4S2CYt+OhUYQaYkwWZCsr2/tYB57UMnBWoDjxBx69vxWcbskcjyGJkiFCNo6J68BwvYJvstlpaTcvkbNr+q4JdG6J6sV3WsQu77JZ8d3W7wQn45lOwZa/laVRsqnnevM8+2yLDkD4XE8BURjBXrpvtb/ZUb1690++VfNeP7VBCpnPbw76L3pvATT+m92cocobWeeWLDqiV3O4mOFOXk+9MnuepPPb57dM8sdlORqNGGpXCgX2n0+/+ywvWY/H6evx5xspQy1ZWwQdcVlACkn0l5vdQQu6KSkPzwOPnr7K+DOwWTrXcWpNq77v9NFs3VJ/HvuZWy8CVSetSf78Cnp31O/dhGRNvxjSB+1jHP4Uy2CTz1uxwCBL+6um+uuUJnLLAeykfFabPJJ0HM3qBDc0vu2NpZFq76Yf1UbGZfkQydNZEIKmEBrqCBUtjS5K70NEZQ1RvozhhBKJFUr1XnqBivzYoh2Yg+7xzoe2X4e3UJ0JAtsekX1z7akWGn87gx6ejsaXVdQIVOQIGpcdZvtm6A8ZxP5oFOQ9T86YJkNZJM6uU6UfFxiz+jWeF0dkxw55N47XLqB6EZ70m+/kvM63nj5gAFtTu1Mwzm+r5eWsxdki14Fd9uCty23dukUR5PlKWtDBRpugHYS3DmpFlhw/XfJBCJ+Abe29O7Z7gHdA0/RgG8K+P1uL3b3/B/T11ArL3p/jhmu2Wv3VzUp3rAzP9KNZQtEuJxX6Ktx/I9FOAWDUq+g/Yj1OW8ovIefl/9O9FrnnnYnsyi67g1dyaxLw12zMBsexX28fbeV9mBzJlQYPJxDI4qWqzFO/J7QTkNM2tJnbubdLa9dPEkYLcaiXTRAXx/E3TtGy7Vdr141gxOwVTz/VRKI97kJ7ts/1YAHucILeTa1VoZHxUZLcsNf20itvO/ptIo/LG4pSJide/eBgAfvTiImys5+9w82P64ecn8nmRj7luQkjKmdY/qv01YRio3b5X+Puyul246ZkFAdQoBTnTFiBsZ/Oi4YhKo/Lqwg3S352rQ966Plh0FSo/f2UJvv7YHNz3WsqEYG+P7z+3wJLnv+at064T6yBtlVNUBRC1F17mo8Ly7Ie1OPK+qVi/I3uwmFtdeEKNTtdJ7VZh/lbWf0iEL9iFXzPz3z+9sxz/XWQNfGcY8oMydeqlij0//hkxjKaJY3qwpw1CUGEj1cqeo45Ghf3LrhF26yvrdsgPueOVIfo9Nwe78stQ9b1LxTXxP4mrlldcZDhisbCXfuOx9wONXpvRqND25MKBHcw8BXzz0RnC9VExhVuvc6VRcRu0nvtoLQDgn+ngXbbkn9ft8j15iRaLOrt+VJ6xbGs775e3PquTJxDkkI3D4iLcyH4L4PmLdnh9XLsDv3nrC4x/5mPOWT9yk4QvjQrnYsf2ZJ6gYstD9nfSBCrLS7xXMpOvtQwRMr8F2SLH62nNbrgJ7Lq7dIJG9T6LE0FtTlYrr22J01uDrWqDIE6LV7KmH9KoFAzs4sPLbhg/krmyoOLx7berrXmfg8S5QtZDJ/2WXY1K6YSmH0WSppopUFfIZeOupD/99q1luPBPsy0+KYBAo6JRlmlLr3ytVNqx/Xngb/a5TF+2JfPZgKGgsVCtmGt1DuRn/ZY7cJvcjwDScXysQmJ1B2dId9e62TJm+4qs28gi0zoindrMi7LyveL2/tg1d34xTbkg57wg9R+3CTq47clq6YLaZaRL1BoVcqbVpLGlFcWJBN/7Guyg4UGj4qNeuTgokFdWWOsevz4HKg6RulhNP/pPy1TUqKhuT+aRfjaPvLMCAPDix1YTF8/fRM/0o6fpUsrT5W87hsEzR/quRrZ8Tl5qGhVW02jXEjkPxbQ7Pab6h4umwdY61gB+YmQaFZlWxhHwLaBxxm1nSupQwuAequ4hh6rjaZERjOlHtWq5HOdZohZUSKOiwf7mVhx131Sc8wf+CblcHxWNJ+zHYUk1wJyns1lMW8h4zqocAP67aCP+Nsu6o8MrfjUqYbzQosMYVZ9bUmEispeji/1Sx2m7tslU7aRi9nq+sOOah2L+6Xq5YW8je//3M8nxr7VrVHjXWVNbxoOk870JQgtk9YvhSeep/+jsBGGzUQ34pou76ScEjYpGetX7lGmqMmkUhged88KiIGrTD2lUNFi8vh57m1rxxSb+YXKyF1wFP1Kr3Ts/TOznrKQZ/8zHAIBRh3TG0J6V/srwOfHwUns51kB0vZcYGEnlOCoSjYqbs6xL3mwz/uK/S7Fw7U58/RjnYW0i9tujuQbQ7cRh2dXzcIZ691MfJ06NijyeBd8B3Z/GlZev4iYb5YnGIeg6HG2DGWfc3gP7sQp+WbVlD3p2bMurCTd9erwJQpOQsAUo5JanmFduHIydBLnl2QskqGjgJhlbTD/J1Gp2xuebuWnXbt+L9mXF6NiuNPOdL0FFMV6Ll25uQmyW4g1c2wLwOk/tkMlOELr1VnGI1IVdtbcvy746qtEf7adQC8vhVFTFLJBOZ/3b9jvz+Z0DffPxd920YNmrpn2+Gd06lDG/+Nfk6WoWDE4a2RZbHnZNkxv2/Fx9LDjXyzQuvGtUsJyGLctAY2yxbgpQC/imi6tGJWDTz/Pz1mJAl3bK6YM0Jabu1UVQUSyPr+tLaUYXr6/XrpsqUWtUQpWTZs2ahfPPPx89evSAYRh45ZVXLL+bpom77roL3bt3R9u2bTF27FgsX748zCr5RP6wrE6mJiZNX4FpHEFlU8N+nPLQdBx1/1Rb7t47Q5gaFdnkx3vBarft8V2mqplEBN/PwK9GJfuZDdbFxgBxq5NXjUrG8dXlFnQ0KmlKZEfrctis6HysimNST+9Gkl5j/dUev8NNgKoTxO8QFazSd9gUpk2DYvdRSSb559HolGG/xqu2w7R9ZqthH1fsmiuvuDqFBqxRAYBVW3njkkib51768F5qWmOVd96v6efPM1bgwknvKeXhhYL2UdmzZw9GjBiBSZMmcX9/6KGH8Mc//hGPPfYYPvjgA7Rr1w7jxo3D/v1qx9znGtd3i+lFraaJlz5ez023RCD5+ukMqqYmz3O1oG68/H7+6qceC8liD5ClO2rxnWl9CiqCSeGoPh2Vr1c6lJBTT+Wau6zSeZNZqYugIms2txg8onqw2E1ybo/p3eVbccGfrIOywxfHJY/9Ei0Yd9Vq16hw07D9w4rs9G5ZuW5YnGklGej4v1kEFduzufbJeYFoOtzeg217mryPVQGQLlrWbL/86jClvFTaXvVeRQLzXwLyDRQRhMOwH0IVVM455xz84he/wFe/+lXHb6Zp4uGHH8bPfvYzXHjhhRg+fDieeuopbNiwwaF5iQtWh1L5ZJJMind4iByw3PKXoavKDorwdv34K4eX3rfpR5BBieKWwVYfph9VbZD9vu9nz9BJJXBQ4iPwmLKgotH26aSia2av2Or4zuk0LEfmfM59t3W1HTbBJHWir1Wo8LKzzen7Iijfhuo049j1I9Hu8Th/RA+lcj5ZJzdT/Hv+Ot8H6vlB5X1jTaAylJxplXISpwtbqDtoQ+ivXr0adXV1GDt2bOa7yspKjBw5EnPmzBFe19jYiIaGBsu/XGGJRuqyYpfFzBBJ2KL8N+zch5lfbJEOlsoaFaVUzmuEPiqCDL/ctgdvLt7oefVlN5PoZuPH9CNyurWe2KtXn9T1OTD9eFi1+9GoBEEQu190433IXLp4j1+lSlYfFGd97IKLswz9G2f7qqx/qy6ITVs9eKYeXjnpM2h6VOnHhokj6bg3763Yxv39hAGd0K1C7V7VNCqqGnH3sSkMDtpDCevqUtE0q6uth4lVV1dnfuMxceJE3HvvvaHWTQTb4ZKmCfspD6q7fkQPXZT/iQ++AwB48jvH49TDunKvtQ/UOqgMYsLtyYL0p/56BgDgsW8fg7OH1mjXyRmZlp/u3/PXoWFfs+v1qe/UyhattpNm6lC/1TZbtwnFFbei342fScztHnn1rGsIz9R6/+ufoaU1qeVvkvVRUe/TTS32CVV+re7ArpZeLMg6ItXCWUMljYrtKlVnWp15RuajAqTeD/vEkTGVRL721kPUZqZpcjV3aa45qb9yGUo+Kop5cetrAnvtu/ECJmrTT97t+pkwYQJuu+22zN8NDQ3o3bt3Tsq2rPA5v1tMP5JJKWEz8aTTWU8odl730ertQkFF3UfFmc4efElHJe02QS+o3RGMoCJ4lX/4wif8enG/U53s+elakya+8Zf3sWR9A3pUZldT9tWyMN+kqTSM8yaHjEbFdfeAy+8K5Tuv8SYE79rfjL/PXg0AGDWgszj/ADQqH9fu0MpDevAj534dPioK25Ot44Fd4xrMClg1H9WJxl5vVdNP9vRkpWJig8yUsmqLeFOAjs+P2m49tbyiOlgg6scamemnpiY1eW3atMny/aZNmzK/8SgrK0NFRYXlX66wazzseFHDsuOANUy983rZ7gzV7cn8a03s2JvVSvCqbhXSmFXcgf8+NWcNN2+vkrhffxKu6cenw3EyaWLJ+pSpcQOza8S+o0NEq6k2wH220bs5060euXRQZLukrH/KJgtV3l1uXf26Xarbv7R3/ThMPxzh34OA5vRRYTUq/k0/duzbk+1lZr/zV05UyEwpssWfzm2q+aj4G5vCJmqNSmSCSv/+/VFTU4Np06ZlvmtoaMAHH3yAUaNGRVUtKW4+E+xXrZLVMztZsQO4W/6yIGN+V2gfrt4u/M2EzEclVe5dgp0+6XsyTRNzVm7D5l1qZgYVrY5ce+Dd9CNqS+kqXNn0o1YHUdlh+KjY+fGLi9QqFRD2tvMbmI+Xpx1pUD2Xd1vlOp7Tq/V3VfFWDutCIqu3zCTj2OLM5MMzKcsn8OgmtFfHnxRYXqbpYr7XmDlli5OvDO+eKU+FsM5WcyNqATRUQWX37t1YuHAhFi5cCCDlQLtw4ULU1tbCMAz84Ac/wC9+8Qv85z//weLFi3HllVeiR48euOiii8KslmfYDteaNLFw7U407M9qItiJLGmawtmdjSFgXbAwJiHOIFZSJO4tqh1YzQ5uv0YsNLjll77VWcu34tK/zcXIX06TX3AA/yH0nd+pmmf+ME0vlo9dXS5N53GgUb/On2kIyJ5ErV+2FVXnY7/Pmoe7Zklm+nFPz92ebNM0ygQTbhlenGlNeZ5pdCYat1PgHc8rqmU+Q5f2ZRjRu0r7OlHNk6Yp14prCGQibURJkYGfnHt4qh7K43c0bR21SS9UH5V58+bhtNNOy/yd9i256qqrMHnyZPzoRz/Cnj17cP3112Pnzp04+eSTMWXKFLRpE0/PcfZh/e/TOtz2r0/Qu1NbvPuj01NfMn1IZolh80lpVIocaUT9cdYXWzC8VyWqykuV0oeNW7HpF/rdL1Kn36qvHNJbecWaBLnvDD9PN15fvBF/makXk8A+KYmwb1HVLYP9rzCdT41LkLBOyfO+3CFJ6a4908XdR0W5OgCAPY3uzoo6GpWk6TwkT1bnqZ9twpPvr0F/W3RVVWFQfXuyNZ81nOCNsoVLVCtvrxO4SHtnmvIt7Dr3KUprIHvysh/TTy5e6aidpEMVVMaMGeNiNzVw33334b777guzGoHBdrjXF20EAKzdvi/zHXunshNwWQmbFWh4zrps+z3zQS1Wbd1jFY7S+Si+qCovhP2ZfbBqO9q3yXYV05JWnldaKNMdwJz5OguSzzW8laD7va/czD/HSVZeSqPinrdK0C9h2RnTjzyDpAlc9re5wt+9nEHldSDcqzC5A842UYlM656n/Grd85Rqt++1/M0/PVlc/rTPN2Foj0rmd/n1dq57ah4AZwwZdqKV9UGvAsTTH9Q6vnMeVJj9OypfBq99RfhOQ35gp859yrQRaQFAdVzYKIuoHCIFbfopNNjOyXtu7Av7l1krtX1UWLITU/a7dAhoVjjile0Xe05NrUlXHxUhHnu4Q1XO1ahIJhuPGhVZ4DxdDQ6v/KAHVDtfbNqF91fyYz8A6qds+6WxpRWjfz1dKa29RoFoVNx+1+w7MrOrqHy2jCfeW+MwDTvvW//GWRcSmQyqsyJ2q4XMVMdOyqoB0YLA8/gnuCxpyg981DGFCH1UDMaHTzGv37/9heO7XJiDdHY5hVJ+pKXnGW4Pi91WuqB2p5LUzU4cloBvB/6r/AKqJgtErc6u4uRkNSp6Hd0+GPLOTJKVzY1FonDvUkFFUKLWwXweH4CZTJclx62/eHFU9VLl2m173RMJ8udpE7VxuVRXYCtW8J60vBec/P+7eCPzO+d6rRqlsDzPAEwVqS4qr4nU9MOMYl58RuxUlZcopUvX4ZRDu2jlL7rTX76xFNv2iM+00hH8RPNGcSKbi5++nhMHW9Ko5A/ss+L1PXaSO2tItfDZspOJSAWdTqK+U0UtnQq8d0Y00LlNjOlXUbef8/JdtUVslrHD16i4X+cpcJ7GM/KuUVG70q2dVQXfm59dgG8//kFOVmuOeztQ5l81zi/p0t66etfVCrhdq+tMaHLymbFsS/Z3jszqpandnGnTz0/0/q7f6dTOulXDLuSFGdtDFsjs2L4dM5/T7fDrr48IpNxd+1vw1Jwvhb8H4VxaZBiZF9aXmdN/VVwhjUoBwU5y/buKjxSXOd1lf0j9R3VieZijEpRk6wF2R5J6hl5f6Cv/8aFDaKi3RaDVHdhVJl1pvA/B5aZiXXwoVDLXuV7vMqCoymGvfbIBs1dsxaqtezxNRFt3Nymntd9TeiL8dIN6PBn7bbv78shMP87fVIRcpfc6/Ts4jtWCa2RaPtVDCUW/nfTgO1bfGkVfK1HeQe8OcUYczvLYFcc46qCzbTh1nccXUsf0I6hTSk7R81HhEXb4fCByhQoJKt5xPjrLJGfK5gz1jqXSCZNJ02VXhR46E5Or6Sdj+/FenzR285Gsnl59VGSIrp6ypA4XKRyx7qd81StdNSqaqrcShZG/pTWJx99dhc8YweJSiUOvo062dpk0faV6BdN52E9g1kzvdq29jjzVP9sfZ36xBX+eIb4P1cewfuc+HHnvW+J8XJxpdze24r+LNmod8OfWTX/71jK8vGAdPq9rSPmSMemLNH15/MBq0bKRcfV9ibygU44obVHCCESwe/uzTe6JfBK1M23ehdCPErZT8x4cK/1nt9dy8mFXXsKyzAP5uNdr2x711esT7612TeNm+nFbOQ7pXuEruqoI+0utO++rtKXU9iy43r4jRHi5H0Elo1KRp3MbUHR3/ZQUG65lPv1BLX7x36UAgDUPnqeVPxCM35TDHOGSp9T0w/lNVWPGMuuLLfyEgGOCB/iCxl9nrsQeifnDzUVl6+5GjH/mY+H1znq5T94vfbweL328HgBw+5mH4dpT+md+a1cazZSSbgf7cSDu13nrfEEJKkHskmqUaJ2Cgkw/BQRrqpANhNbBJfsH7+A/lRdpv8ZqaVOD2EHMC27aFyOjUPHf0VVflj9OW45nPnRuq2TbsiiCCEYpHxVvA6OqfOHWzmHs+vl0Q72v67/yyGzfdbALYG7trCuwOd5D3vZkjSxVAxI27G+R5mM5lFC9eCG6eTw8bbml3uWlzphQuSDpUaOyv9nbJB9EHJWEEXV0EnWiridpVDzCe3Cs6cd3uPX0fxXeo1xI1HajS+YT51Y21Gcd9IJ8FZ1+CPx0v5vK99dh0w/s2h7LNu1yLcNyvc+pIHVQpbdrvZwozK2D9gTtnibq1RbAMf24+Yg4NDAugo3GO6sGZ3syJ9WeRrmgYt1ppFUB8XUaGdm3WVe2VdulEzTpOhg5WnoHsT05pVEJqEJhQ7t+8ger9sP5O2v6MSU+KhbnNeYPy/ZkM236cR80Glu8HfF945hDuN/73fWzkzng0GvANx5+J0TrDonwHdCc5fu4OG35ccnDbQDV1agkk+4tFYfBVhZgkYfMIZSHgkJFy7TH16g4v3Q15blsidbFNPXeDNO0vlenHNoVJw3sjKtP7Oe7Llp4NP14R70cWTytfNGpRL0YIUHFI//71OnAxI4TIgFj/c59+OUbS13zT1+tIqjIPONl9OrYlvu9W5kqPjZpguzgDo2KprDBTg6bd/FNYLLa+p0HeH4JytcGlE5Xo6JS36hPVgWcfdat2s4tti75K7Sb7gRvb1ze9a6mPObVD2r3h/5uuuznooSBp797Au654IhA6qJK+t5z1RWD0qi4ySmnHtZVo1bhEfUbToJKQJimiQcYASSlUTEcaa74+wdYtK7eki7z2ZI29V+VFbBX04/oBeKVKPRtcaleeqUbREe3D9p+tiezWh/l8n3ehK9dP2mNiks6N2dpbY2Kabqu1KM+sAzg+Ki4Ctt66ZXkOy0fFV5kWmc6tz7H1lsWSVUVTz2U1QpH1Be8+qh4RSScjzuiGsN7VdrS8vNQMf10alcqT5AjSKOSR8he4o/W7LD8LYqMumqL85CvNOnzPFJlmZlr3PCqUVEJSMf/PfvZTavh1SzFY2+T1V6vO6iqCAphagf8mH5UhZwdLgKY7LBMr+VGPYgB+m3rVwPjF+7OIk4t3NqWFdCC0Ki8OH+dtqaSTc/WNwfhPZg65BaRcF5SlFBelCkoVGJhVgWirwcJKhLq6vfj2Q9rsU+yPTCNfULm2qA51wkHBTOdj/sr6HUQFfrQuGSnemKrSlk63PPaZwBSgd8WrdupbZPXnaTt+LUnB3HWj18/BN3JTCWabhwEFTtut2nXPug633LT6MQfUjUDujQtO854OXDSzr2vfeZr239UPSFd51x1RdFYkHKYt/4mWvyk4qjIK1wcB3UlohdUaNePhIsmvYe6hv34YtMu3H2+3OZqd+IyTdPRlXmDnWhQyPqouNfTy/ktgPgFcleb8z/zOLRbh1RZAQxhn6zdCQA4++FZ2Fi/H3+67Cit63070Pq8BT8yRlCh7HUns1yE0A8Dd62gXaOil557erJGU3GTcr50m8jYei088H74xY9Jla1uFJNb7kw//O+TSedvIlkjYbibfqIIo8Ajaj800qhIqGtIHak9/cCBeLIXOGHrULytqLtcYiKwZOKoKEwsXldSoq6ns7p0dbwNQSmbPur89U82uqS0ohTwTfI++l3d5MJHxQ19HxWVnUbxGEx10N3OrBRCX6N80+T4yXDSubUs++4vXu8tno1qwEIRbL15saDCJP1O9utcnirfZ34dytTW7qIu36FNsXOHmDSOirzGcXm37MeX5BoSVBRQkSbtki/vJW3ieLuJ3mUdH5Wgoyvq+ajICVMlq+v/4lXzlCbI7dFR0agZ4Gpfcyv+88kGaZqYLPosuLW0X58Wbgh9TWdalevdulwQfWq7LbK1bo67NRZgQfPqTSfh3GE1+MfVxwEIYOWveLl9LHj4kiNxfP9OuOPsQUp9BQCKi9w1KnEx/TRELKiQ6UcBla5i77hJUy1AmZ/D09J49fYXx0aRX+fFRyUMeIKfDCVnWsnT9u8f4r29MhoVn+3NOy1XxiPTlrumsWsT44COn5VKepV21z0jy56ad71by4Yh/Or281+/tQxANALrET0q8efLs4cT+q2D6mLEnuyio3rioqN6AnBquGWmH9f6xOTdItNPXsF/gZNJk6NRcZ71ozOo6GxPDtqZVs++72b6OVCWerWU0d3t5HdI9+ur6EfQiUob8/7Kba5pYqKdBqBeF10fFfvkw9WOampU7Ol51+vs+omKzw+c6+V0Is19XfxOqKpygey5OJ6JIK1huLdR7gLYyYlaXiJBRQWXh9SSNB0diuejwhtS7n3tM5z1+5nCrbcqk5tnZ1rBjbkNfnZnWlkdw3TG1BVU1PwMxIn8Cgt+dh1l+kOON2KqnLobFzs6oF6XZNL6fupqYHiRcLWeDE+7yknmNvHGQE7JnEdkN1PovC7tFX1DwkZZoyL5zWn64VOk4qMStYRwgKjf8Xj0jjwnaZpIJOzfcdJxvpx54ITV9GmkabIh9N3L9+xM61Gjwk6WyiWH0NF1A90pbTGVJPErcz0/b63na1VPT46CmIylANQ1d0kzlTYrAMpxPHu+HVexdFHAN47px81HhWNm8K/500u/5UCU556CSNcqDOlRgQ9Xb/d8fVCoDlMyAdLe/jLTj9u7E5dXK+p3nDQqCqSfkegFbuGYfnRX3/ZYLZldP6GafgTOtC7zfzKEsN1eaA7BR0Um9EVxPlC27PgSxmrL5GgkVdAx/Vh3qOj5ilmMnwd+03lGyvGHXH631+usITUateDjtZ+3LfF+cnJcTByqooGsuicP7GJLK0hsuGvMdM+wCgvyUckD3B5SK8f0Y8LZ5WUTpUjFXrvNfeugd9OPID+NQdt0cRDN7PrRrJuIp+asceStiorpRXbvUY4ZMVaohLLqS5reJj7VAVU7Mq1kO3P6J30fFXeHXjfTW2sIHSKKtYddIx0VQfio/OjsQTisun3mb1FKQ/JbmiAje/uBNCoFwKotu7nn+tjFbtkAsL+Zr1G5/p/zXcv3qlERvWxu+WltTw54ar3r1U8zn72cW+MnTZTaozgHXtPRTKiSNE1P7a06nrYm7aeVu9XH+rfF/JnWqOg4yyum69WxXF6vmKy4/RK1D0QaZdOP5Lfy0mJcfWL/zN+ie1MJ+FYgj9c3JKgosGLzblz31DzhOSo/eH4h7ENPMulPo6IzwQfto6JzoJvbsfCyOCrdOpS51FCOfpRV9zQyrUuUskLWuTq6OohgB+KgBtaVW3Zjv2bMF0DX9MN8wal3p3aluPDIHqmfTef7nc1Ls5Kc/FLfOdMVuYzQuruXVPCagx9ZIzaCiqKo61Zfy88iy4+C6SeO73sUkDOtIlM/25RxGrOTjpTKwlvty/pci02Hq9NBvQoqInWem+uHl+J4A8Cgmg7YLGhTFbRNPyH6+4RNTKsFwNqPWjn+Wl44++F3PV2nKtys2Lzb8jevbxjITkj23y3mz3RwRo168kymPCHD7bmz737H8hKNGoiJQnsXtWkhjWo93OQqBTlFUbCL8YufQ0ijooEoWFZLa9IxoPC2zsoGALvTlFv3bNif1e54j6UgcKbV9FGREeaYp3vffk0/UZKdDPn1O75/p1xWxwK7hTIOcT1UeHnBejS3ssKGE8PIviGy2/ISjI+X3xuL63DPfz61tKFblrqB61TwPppYx5OyEvXpJawzbW4541Ct9Ko+Tq6CCvO7zPTjlldchqOo60GCigY6cTv2NrUoRaZN02qzObitaobf8xZ+879UREivk6voBXGbbNjyeE6BLOlf/B7i5lYPFVRSx9Xm73arPSrb5KYiHNhnG1eNlBtX/P0D7veGQKNijyUEaGpUDvyP5VdTPsfk99fg5QXZUAU6vjOBtXxAGf3k3MOV08oEhOP6dXR8V12hZjbWFX+CcuplhTYd7YudPH2dAocEFQ1EBzNddWI/x3d7Gls5PirivB2mH4X6/Gn6CgA+QugLvtfRkrinlQkx/t5CXUFFRQiJqZySuVfRLUe5fZBdMS6ra9AOxBcHPt3QwPk26+xob3eu6Ucrjor4N9bELMuzuqLMqn0xg5ExgnoFela1xYs3jlJKK9ue/Pz1o/D5/Wdbvnvn9jFK+eq+FkGc8n4gI9c6pN9Zmb9LlCERWKKuBfmoBEDndqWOB7m3qQVtSkot38k6XbOPGVJlwq4qL8FOmzOw110/OgHfMhoVtwp6QN/0o5BnTJcwbqv2KE38rNb+4kfn4JRDu4gT5xnpe5P5qHh1phV1NdX3a1NDIzY1bFHKU7duXuAPJ4rOqZIlcyJhoE3CulW9neopx5pvRhgRckV1SPctMv24QxqVAOA9xN2NrY5VrmxHSXOL3fSjXr7KhH3BiB6O70SDg6uPClNVt10/Mt5b4X6OjLQeCgVXMQ6GKjWN8zZgKTFxRgSAd5dvjboKgZDyUUmbfqy/sX+aLtouHm6xh/73aR1+879lWqbIoHpuFG9AWLt+dLLt1qEMw3pWBlOuQh2MzH9lGhUCII1KIPDGEvvZPal0Eo2Kw36j3kVVBBXeQCB6QdwGR6va24UDCVQHjNMGdcX0ZVvcE0LNlNOzqi3aFBehrmG/UsC3uDqDZh02+fULTGXtgZg2WSCkhXl7X2MfQ2vSxOWPz9USvJ0eKlb+34H4SQO6tFPOM5Wh/4cRScC3GGxP/tlXhuD9FWIhe1B1ByzbtAuAexuxi1SRWTbzfR5oVKIWmUijEgAmnCrXvU3OiIKyTmc3/ehGuZTx8CVH8n8QvCBuE4+lONNldajZwctL1WVnFTNNY0sSpcWpbv7ZRp4fgpW4TrqiduxR2QZ/u/LYSE8wjutOKb8YzP87nWmzfy+o3amtHUwm1d7xugZn6AMRwWlUPJp+fJQZ1q4fnVwNyBdUOgcEqmxPTrjLKfHxUSHTT/4jeoj28MdSHxW76UejfDctgJvqUTe/Oauyg7Lbi/TCvHUH6uCM3Mt773UGLBXtx4rNu4VO0DziuutHFKb9/Qln4Mwh1ZHGofA6iAWlZg+LVECu1GdZyH0vWjjVK/TMSUH5qPjPg8lNKZVojDq+n79t9zoCvJ/dObK8xO+m+/bkmMgpkRO5oHLPPffAMAzLv8GDB0ddLS1Efcm5U0CcR4tje7J6+SqaBd7LIFK3uvlpsNsnZ7n4I8z7cgc+3VDv+L4laXLbo7hIfThQXcm7nZfiJc9c4/ZMojT9ePXriUuQLxlZZ1rr9377Ser0ZPc8ouiPnov0odYTjUV/ueIYz3kCervhDJfTd3SahS1WVIesRoV8VNyIXFABgCOOOAIbN27M/Js9e3bUVdLCFAw6jsiTUh8V+4pNvYt6PpRQFEdFY6T676KNrnVdu90ZKM9+tlGaYo3ZS/m2tYQ+9bS5xK1aUZp+fvPWF94ujIFfggzjwP8AuY+KJyTXP/dRradyTHm2vrh8ZB9P16nWX7Q9uWO7Uu73YcBq0Li/6+TFxlGRlAfIBfa8de4PmFg40xYXF6Omxv/x5FEh3mZoRTaxyk5ndcMtjophGFypXehMG/C70dyadAwAjYJYG0UaEZdUV5s6q9K4Dgzuznu5qUeQ5JdGRfx+emn7pMRMwwr2OguWoLou7x3o2bEtzhjcDdM+36yXl2K6sE5P1jL9QC6MlJUkUFqUQFNrEtUV6gEWhc60GdNP/DUqUdcjFoLK8uXL0aNHD7Rp0wajRo3CxIkT0acPX4JvbGxEY2M2IFJDg7uDZNioDybqu36CdKYF+C+s6P3Q1dC4FW83a8mu0dGoqLZRkP4+0ZGql/ie82DWt6Fa4/5d2mH11j2h1oUHe2icvVuw/cSLoKLay3S6Y8qp31//LS8t4h8nAPeTfvOvB1pRub9F95yFpGlmHPRV8hLlO3ZIdSZfEXFZN0W9gIvc9DNy5EhMnjwZU6ZMwaOPPorVq1fjlFNOwa5du7jpJ06ciMrKysy/3r1757jGTkzBzhfHias6GpUAtye7qR7tOLdK++PdL7Zits2XRXR/Oj4qquhFDOWnjXr1nzRTz0XUbrnQqJx5YGANCtUtqVEOkukqLlq30/K9/WwuXVRvSU8b6LEytjyCjH6sWie76Tso9Hy33IWxNiVFWjsTU7k6eeKa4/C1o3qKExwgJnJK5PWIXKNyzjnnZD4PHz4cI0eORN++ffGvf/0L1157rSP9hAkTcNttt2X+bmhoiFxYCcKD33EoYYDOtOzhaiyiiSLoQeMlxvnWDVkoba/o3I0o1ophGJEub349ZRnmfbkdj36b71yYCzkqKmEtquMBDGQf+Q5bVGdWgPDiyOx2RlaaXPuoyJx8w3wKLQEvjtLo7vqRPUstx1wmLW+cPW1Qt2xaST5RazLSRK1ojlyjYqeqqgqHHXYYVqxYwf29rKwMFRUVln9RI1r16DjT8swjqny63rmrRgXRC9LUqr5LxjOCpggjnkIQZrSgq6Wb34drtiNpAg9N+Tzz3f0XHpH5nIu5POigXPO+3MEpI9AifCPypfJrIgxl3A9Ro+LmaJpO4xU/R4jICDKOio7QYImj4tpu4gR9O5dnPn/9mF7K5QfBW7eOznwOS5BUJXKNip3du3dj5cqVuOKKK6Kuijoi049t5NA5lDBNRZtiNOx3RrllaXLRgIjsy6IXhD1U7txhNXhjcZ00/yCJ8nA9QKydStUruME0YRietp6mr2hfVowrRvXLfJ+L7ck6Aa+8UpQwkIzJ1ivDMISTk+XZeWiWp+d+ic/r+OZtr/ACT+oiW3R5EVRVJ/ewNAdRDScqPioqv58ztDvalRXjqN4d0aYkgX/PXxdMBRU4rLpD5rNfU6dfIteo/PCHP8TMmTOxZs0avP/++/jqV7+KoqIiXHrppZHWS+fFEaV0aFQkE539wMD0tR3alHBSW3GTdsWnd/K/TwsqR/epwh3j5DFtvPotiFoi6t0rovcxNgv9A/Wz1ycXmohchDn3K6heery3bbQiRAO0xeHcwxgetJASJF7fTd7PQZjFvXJYdXut9KndkcFg2Z7s0nCyXxOGge+NGYhRh3QOqGbeiHqTQeSCyrp163DppZdi0KBB+OY3v4nOnTtj7ty56Nq1a6T10o0Iyf1eI097ULI9nLOCRIjU0yy8l0U0uaXzKylKuE6AUz/bhFcXqvuguMEr73tjDgksfzdEO56CnqS9vvaiFW8uNFG5EYb8Xd+rY9tgKnIA0SKA1bzFJUigafrX+ZmQmH4iFtd1u/ghXTUFFcjfI6/vmNtVcTjnyI2oNSqRm36ee+65qKvAReexpAYI5xV2AUZnPLvl2QX48KdjlTQ79lD9diSvHvfbplZWUHF/ie58cbFrGjui2+IenpjD9zhXPipeVd2ZqyIY28JwdLYjcjxcvXW15+v9INSomO5pck0QtUj1y+B2lkUpw+mW7XZ/Wj4qFtOPi0ZF8rNOPmHS6sOHMggi16jEFZ1Vkuo4pZPn5l2pWDHpK7p1KBOm3d8s70SNLUnuvCbcntySKrW4yH27XpBccmzvyE0sIhVnXFY94q2j4ZedEx8Vzo3cftZhePBrw1DRxn1dFWQ7GIa4P7CatztfXBRcoT4wFXcSSfOA9+3JvN9VwyyovF+6j1Z0TIcw/yD7juCze+p4IvKhzBUkqAjQ2xaoaPrxXh10lQgqbhqVPU0t3HdB9Hqk1dpFB85eCgPhAMbTqOTwRRY+96A1Kh6vq92+F4CzOjlxps3BY+B1t7YlRfjW8X1QU+keDTToKoo1Ktnv7f5lURGMRoWfj4GQn79C3rpjUWsyiXeWqkfSdQtqp7c9OfvZrd2UNSrKpYvp0ym1i2hwTQeXlFYq2rr7SoZJ5KafuKIbupo7wdm+87TL48AlshWH26qhRBCf2u1QQsPI7XZRUbyXXCozRLt+4qJRSWMfNPNxezK3DE6HSxer8voEWUepRiUe1h4LYYbQB7xNlF3aixdYLGFpVBr2awiRLn44etqqYJxpg+bp747Esrpd6NKhDBdNes81/eNXHotHZ67Er78+PAe1E0MaFQE6fXLW8i38PBx5etmOmrrGz8FVIkc494BvRiiTk+g4elGshly+yLnzUQk2v1y0UW4cdnmCirzc0qLsMBas+j5ewqkK77qcZq6CeNeP/oR7WHUH/PwrQ1zLDKOlW5MmykqKlNOnnGmDKVtHEyLVqFgEHu/1mXXHaXjjllPQu1M5xg6pRnmpWruMHVKNF288EX07t/NeeACQoBIAq7bwzyFxhND34Y8k8w9wW93pbjd8bObKzO9hDCCy82q4k0MOtRm52vXjF3t1clG9Io3RIq1ilvGjswc5vtO9jYcuHo7bzzose33MnlM+wnsHVAK+ibj25P54/eaTpWnY4e2kgamtuNec1M9RBx1akibalqh3WsNjbCNuXrZ8Wf7fqQNsacPvs306l2NIj+iDo3qFTD8CdDvs+yudK5kgfFTS1SiRzBIqmhovg0zCCGfgF+8r4JvccqtR4X8f9/nP7TklDP/mCh1hTcV0OqjaaSfXPUm2U7tS7NzXlL1eqXZqxP2Zh4XQmdaldWXt5dZ32Of+4NeGY1PDfhzZu4pTvnonbk2a6KRoekrlDzz/0VqlOuqwuzFrfvrmsb3w47Otsalk2lqrZiZAs2ZgOeUG0qgI0BWsn/vQ2cHtefiR1ssEp3W+unC9+wTkcfI1YITioyK0gcfg7RH5JMRtpe5wpnV12PNf/6D9P3S3ovP6jd2sGZdt5PlMGOZPgZtcBva5lxQlcGy/Tii2L84Uy//JuYPRvqwY9114hJavIQDsbRJvTNDbnpyt7P8+3ZT53L2yLce/LPdjS8yGM1dIoyJAe3jiPHj7S+JlzEtfUiwYJb7/3EKFPEytQwnTiCYTv6S2QKprTnL5UokGo7idQWPHbbWVMAC3E5yG96rEonX14jI02kCpr3Pyk/pi8bKwmSSC3EId80ceGjxZ3W1HDABs29Mk/M1VG8P87vdQxOtHH4JrTx6QOo4hBtuTWXTHU6sJyXN18h7SqAjQXklxkuscSiiuR+q/MtOPV9xX4eG8HLqxQHLp1Jje9XPusBoM71UZSR1U0N31o1L/J685HjedNlD4e9AB37gaFZ/tHPRTyld9ynWn9Pd8rUijsnzzbul1Il89QG+LbhA7qtKHm+oMuYGaVkRjWbQueGypURTqGRJUBOi+LLyX23nWj3dKBKYfFUxTtJvGfZUTjo+K3uFpuY1Mm/rvTacdiq6MfTv+GhWX3xXqn0gYUo0E+9vJA7tI83J7vgb4ddZtZ3sfDrK/xs3cp0NnDd8MO6JHt6B2p+c8VXyo0ogc2r1FxvUWTdYvorx4/Vs1jsrBDAkqIgKQ6u2dzJuPSuqaEoURfPRhXdFWZzue6+wWzgQtc9bjblsOvgpC0oNkUcKq6o7bpKXro6Kick4Y8rZms/iujxW7rE7SdhZEImOvidljigw/763IF8gPbtcf27cTU74gDw8jgc6YG2TXEdWV17+j0Nbm23tCgooAXScs3iJg3Y591jw15ZSj7nsrExlTxfQz6bKj0IETZtwE/2VQkFNyui3XMMR+CLkiPbDZB3o3Z8Bc49ie7GNHRhq3Z82afvz2C8Pg+zzoZmvXzBzMOyNY/DyfMILZyerzh28diQuO7MGUH5xGJbLAfEKNCk84V8soFz40cYWcaQXoChUqkruuRmUHE5pbxfQjGwy8TAqiycQv4hWTuB65Ir3rJ2XmYAaJmL/awWhU5M+7KBGcoALo90m+EGutc9wD8+WKIh8NIRqnihKGcFecG6La/OPqY3H64Go0MSfAB9nkWhoVjS3UXuGafnznWvjEbJ0YH3RflrAHNJVxJ2EY3HrLAqy5lRnOrh89H5VcIjqyIBc+KmcM7qaR2pD8xUmtUH+dLc6y9qgqL3GPlgx+3/KyK8KiUQlWf5+3+BFURI/OjzO16LmePrgaAFBanMB5w7vjlEO7oF9nfrDAsB+H2+1p+bswn0uZRSavHXY3tijVKVhn3/zq3CSoCAgqQmFQeSqdhSFzyvJQpuGSp1ekp7NGLMGwBzKy5MIENuqQzt4nGLfVoEIWCUMQGZiTh2ygEzlDqtTJbyvn2wAcFmG0gx/hR6U6ky47Gv+8dqSw7l7uSWfMDTZOUDavX1w4lPnemXbrbtm2bgIgQUWI9u5khQv8zMF+BBVhXAIV008Ir4opqRO/HoFXQUh6YLNvzc5VHVSLsdfHbQ5RiS9SUqRu6pOaaEx3jWSqffU0KsKAbwH6zljyDiyn3BP0VnLAn1YxKvlR59iSsHxAWAHPjwB5MPuokKAiQNeZViW1ykJT9/htloTB3zVjmvDUy1Pqec/VEaIbmTaX/iHpgc2+eszFSt2PT5D7VnO18uW/Zz/LT/NW1KgEoFKxByIL+inF1ELpSghhl3wJgVGdlaW76+fak/sHUq5okaO9/Z40hABIUBGjOUKpOJmpaF1EL7T6MegBbscLzUdFMxBTBBoV+33zdlMFTcrfQu1m7amCaiPVbGQTYdJUe768NFKNCuc7w7DWOcjdWfk8SYTx3vqJ+htEdbxkoTvOnHhIZw+lcPIS7Nbx81wC1ajkWdcmQUWArnM7m1x0cmxzq3umIjuwsjOt5o4aGSphs70gjaPC/T580kJk2kclkbCW26OybQ5qAc8363ZZ0JoBqY+KyiGZMNDS6tTLy+5DGGOHqUvQ2rd8PesnDEHFj49KIPXxkMW5w2q0CghM4Ldo+VjTpGY+wVSHk29+SSokqAjQNv0cSN6zqq3wAMFVW+QhqAFxR/aza0N0Jyqqft1V5UVMPAQhAh8GoeknR++UaWZ3IzmcaX3awOxH1vOwawfc0sr+tqM638odslmBQF6W2/vT1JpEM2c1oD2habaDj6zziuKiMHxUfGgDAijfSx5XjOqHJ645Dn+78lj3/A35BO5VZLWagfy0obdrxwzq6rnMuEBxVAToLqS27m4EkOqUpQJBZY/kZM40oglRzZlWJKmYjgG8sm2Je108vBcjB3TGKws3SNP4PXQsDOwOoPaYIn59dYZ0r3BNY0B9otUNHR+0ZiAIHxWuRkVyGyr9JtgQ+oFllXP8aD94GIbhy+8liOfiJY+ihIHTBqlt+zcy/8dH64BD0ffaPip66e385NzB+OaxvQPPN9eQRkWA12G9qSUp1Kg0trgLKiJvfdWXVLXeKqt3LxK8yviY8mHQ8aUJ/60yYZ1gEwnDMhn7rYHqCjese1XXqKgJIG6Cikp5PFOo7mQUpjNtZFFNAyCMXT9+8gyiOn42GqiQ2p4vRkvYF/il5NpH5frRh6CqvNRzmXGBBBUBXlegm3c1CjUq620h9XmIOrKfF10UQt/tpfFSpspEY5ompi3dzC2P64eQA+nfNE2LQ3TCsGq3/K4Ii2xenvzDybxvD3a7Loi4QGz7yMpTneBbOHtHtX1UbOr6IH0zeBqffMHNVNm9sk3geUqvDeC5/PHSo/Ct43rjjVtO8Z0XDzdTt94OInbsyH4/rGelXp3y2gAZHGT6EeB1XDcMoKyYfzDgB6u3u14v2rWgOkbwBCze6cntSosV4qiolcmiMiCZAB54YymnPEPbNyhI2KYrShgoZgUVn3nbV6O84HY6Pip23AY0FbOjG62KGhUgJbC7wRNoZLt2RM60oq2gflFxfo8rbtqPXh3bYmP9/szfg6o7YNmmXcL0Bvw603q+NEN1RRs8ePFw/xkJcIsa5TUmiwEDs+44Det37sNQTUHFWr/gINNPgeBVUCkyDJT4cGRjz7xgCdqL/y9XHKMw8IRj+nlh3jqt0nKxTdSEcyK2tA+nCl07lCnnH7jPgO3voLKXakpYjVMAI8eZh1c7y9fsc/a+EWQz5+uOH0B/InrhxlGuafw508Z/ZkxpVMS/ez2J2TCAPp3LMcrD1ud8EyjCggQVAV5X9nbfBl1Wb93D/d7PZG2apmOYGNqzMiTTj3uaX035XC9P/WpoY5pOHwx2VWofaC85tjf+9f/cB/c0jgBynDR+7jMXA5rVNOa/wLalRRjey7rClAkawsi01m9818taZqDZeeb60QPwzHUjldPrPp4OZe7KdV8h9PNkppHu+tGKyRKcNjabZ0AZITeLvyDJk+6Te7wOULyD/Lq0T6282ysMBu0EaZRNP2rJUnkyT58X6MhLV/Y1gQku9ftOqbbd/C93WK5hB2a74HrvhUegf5d2ynWw75jg3pPGjdoHmqBWrLJ8WI1TWMOc/b66tM86Aop8X8Iy/cSJI3pUoHM7dQ2etlOywqLFVwh975fmjCA1KvZ8CX+QoCLA60IqYRgOtXi6o/o5D0hVAOCG0Af/ZWHzLOHsPfQidPiNExDGCvY/N53smsaEiTcWbcz8XZQwfMdOYbE704oEAq/tx1722LePwejDgo+dYHWmDX70fel7J1ru4+bTB2L2nadn/uZpOQ1Y2zLo/nPWEU7zVNAUK/YzUbJ/XO2MEeKWo5d2yscQ+jq4+qjomH4sGQWmUwkon/wQHFlIUBHgVXo2TedLmf5LZTeE8BwcT7XJ1okHW0+dAGwywji4zO9LpeLAZppAWUn2dTAMQ3kCUcHh3CjIOgi/iLAOj+vULqvdCNrnBgCO7tPR0ie7V7ZFm5KsYzrv/TFSkgpDcJKKCeDykX1xuEIMHD+oaObscX1YeNtP3QTJJg87msI+PTlqnH3Jisfdyb7uPax2y4fnwUKCigCv80XSNB2CSvrvfc3uOy9Ewozq6l584J/zenby5Nr/lUq0XxP8G5Are6p9t5blOdqaR7dK9jgqfn1UnNuTs1+4xYOQ5iv57fwRPZTS6WDvdmy+9i7P79qGQhrvFCWM0CN7qp6MLnoPvPSl3Y0t7hWz5VfoGpXUeyOup1eNShx9VPINElSEeB/x7AOsTgcTRt8MoZOyDm68l9CLgBCGHTtXL2iPKut5PlYfFX90bmdd9fLuKSj3niAP5kvzk3MHWzRMYU08luBYjs7k7kwbZJC29CsxZ+W24DLloLIIkU2hvGfh9nx272/Bkb2rFGqXQmQ+ViVOk+zFR/fifu/mo9KqJQVnM/JlDg+p4fJhFxYLCSoCvK7MTDgHHp0uITuwT7V8le8Aq0ZFJ0aADL+DWXSHEqZiS7CcNLAz87st5olmrYoShmWXkF8fFadGxXvdZPlafhMEsQoUJl/7ZMs1/cDaZvZnGAQqJ6P7QUW4TzmzivqM2ncsKtpdluKihL9daTGaGGVHMUh9VDzGUQksdEAw2eQlJKgI8Dw28XxUNEZ1UbF+OrvIHMTWk69R8VKaj0kywlfRhJlpp2P7dgQAnDaoG5645ji89+PTtTQqPN+WhGHg+P6dMn9zJxdfbcd8dlkZsnz7hD5IGMCPzxnskr/NnBmCjwpg7edO04+7/1ZZSQJ3jBsUSF3SE1pIt5pBxfcjJZCp5+ma1NTTEn5doIVQJew2DAKZeQ3QPfbDmq/nOnm/VJ5vHjwPllgIKpMmTUK/fv3Qpk0bjBw5Eh9++GHUVfIVIdWX6UdBqPCC26qLH/VTXOagav65G34dOUW7ltKMsMXdUOXxK49Fu9IiTPzaMGGadNnptjaM1IFmPaucq3TZ4/gVJ3qmyMFaNU9HWlsOW3c3WcqyZzX+tEO4+RzXrxOW3n82bjj1EG6+IsKaeGTh8PkO3/bDIw2lMAA6hCWUpVFZyKRMXOr1cD2kUjkn4KpRfdG2lB9tO6j6xIGKNiXSd1DL8MNkFFjogDxow7CIXFB5/vnncdttt+Huu+/Gxx9/jBEjRmDcuHHYvNl5Fkwu8W76MZ3BvTT6l0qsCJcK8K/nvCxsPXkaFdH43KYkgVMFDoZhvExsRNSnvuMMenVYdXtM/+EYaR5jh1Rj8T3jcO6w7tzfUwHfDvzBuQXV/vD1Y3qhQxvnRClzfg2C2Su2Zj6ndohY8//qUfwVccIwLE7Ewp1Xtu+D8lGxLwhY/xq7gJDkvBz2Whic6/wSxgF/LGqmH/GuH9677Vbl1tTJoAq1Y/qqL2daz5cGj+22O5aX4KGvD0e3ijZSkcKzCdDn4o3HecP545hyvr6uzj2RCyq/+93vcN111+Gaa67BkCFD8Nhjj6G8vBz/+Mc/Iq2XZ0HFdE5COhK1zq4dv6iafg7p6tw+qRYlVA/RtWxJvAiXX2zaLTwIkiWREA/2JrJtwBtU7XcrqqvdZ4It2+16Nxu5Ja0toeVcIg2fBa8Ch+plD31d72wWq0bF+hvvzSiyPVPDMAIXLMLWqKjUN2jTT9LM7alacdIG2O/73guH4pvH9gbgbOMrR/XF147qCSAV10cVQ/DZD2w+vhcK8XkcSkR6KGFTUxPmz5+PCRMmZL5LJBIYO3Ys5syZw72msbERjY3ZA88aGhpCqdt7zApVBxP+TD9CjYpG+XbalBShJencjsjWkx+jIpVgSI9KrNySDe0vC8zma8eJYcCE3GNN9IIGMZdkFSo+fEWEAoE9ofq13HLs+bsJKqJ8PN6qahsd3aejXr42Mw6L2unJzijAfgldo6Lio2JYj+b49deH445/L5Kml2FCfTEWIxkjB2Rv9tnrTsAJAzohaQI3n3Eo+nUuV8/FJjx7rw3/2oPqkSBijcrWrVvR2tqK6mpr9Mfq6mrU1dVxr5k4cSIqKysz/3r37h1K3WYt3+LpOtM0HQObjvQr9lHRr8tPzz0cpxzaBV8/RrQdL5upaZq4/czDrL8f+O+bizfCjnAHhk+HUK6PimlN8+r4kxxp2Db/6xXHSMvgYZpZZ1qesOXY9SPagSEoQcVHxQ/Wk56dtdCJwSGCXYOH5qNiWIUOS/lc86RTo+J1tXnLGYfaykv9V+fwSS8omX5gnfwq2pZkf+Nc75ZnPh+46BfZvbNt2bl9aUpDlzDQv0s7LYHDskPOUy3ldaupbOMvrzwTdSI3/egyYcIE1NfXZ/6tXbs2lHK8SsEm51q9yYCPqvqZjeR53egB+Oe1I9GmpEhBFQycaQ8XbojrJFQc++z/PDsw+43jVOP098x3vOMA0oieK7vC5L3EqsO6qo8Hrx5+nCXZNlExg6nmK/peVRjQfY0sB1YrONM6gyt6V4vfduZhlrOF0nx/7KGc1MGhHPCN6R9uWh63LE3T34aBQiUok41VeA4mH5ZxIRztcMqhXTC4hr9JImoiFVS6dOmCoqIibNq0yfL9pk2bUFNTw72mrKwMFRUVln9xw48zrTiOihqPX3Us+nYul2oVePAi6qYHRp4py++ZRDwMw91hzRBMRPJAYcz1gu/Z05N5t/DWp1YNn+5dOresCyrnsfnYPldWnMDtZ1m36Po1/aRO4FZrYx1kkWntkzHPj8ouk/LO2tLBerZQio6cEPVBoiqoWLZuu96jPM+kaWr74eXXGtwblt06Ad1wYGEHwL7jRbjmpH7e8+VU6Z/XjszsWDx3GH/+jYpIBZXS0lIcc8wxmDZtWua7ZDKJadOmYdSoUZIr40vqrB/rdzqTtyhMs6qG58jeVZh5x2k46whrR3O7PGk6B6K0OUFVQ2QY/hSKBgzu/bOqWtGZJ+yk5nUOzWhUOAU0t6rukBA7ysr+BlIChir269n7LylKYEgPqwAvfv7etH+qXdqPQGefjPk+Ks4dTn6EZVYjmSnDc25qqFTXsHUst/HA7R3Q2PQTykGhUWI/IJTFuy7clk9AGhUZbs+lTyexT42oSiN6V+GTu8/CpMuO9l6xEIjc9HPbbbfhb3/7G5588kksXboUN954I/bs2YNrrrkm6qpluHJUX630SqtnAWFoKtTKNZ0D/oHRjqdmFgtU3usg0qhYfFQEGhV2N5BMXBLWz5Tv+lHOR9FHhUd1hXe7M6tR4flUiCPhyv8WoW76yaarKi+RpHSW7zD9cLqcPWZMIuHdR0VE2O9eY7N7yFPDVg+3OoWxyybfnWp/cu5g9OlUjh+O4/viAeEIGL6ykdRHdvbQ9884FM9ef4Lwd1n/qWxbEqtdWkDEu34A4JJLLsGWLVtw1113oa6uDkceeSSmTJnicLCNkiN7V+GpOV8qp3duRfWvUfGraXerQ8r0Y/0uLaC0LS2yhNw2DP6uH/tg6gW3g79EGhXLZCWpgqgdUpFps2V4RXSp6KDKNId2a4/j+nWCMpIqdmrHO01XPWsVvPTHo3pXYfoyuZP6sk27mDJsggrHp6LI7kzLuc4vvC3xucaurXS7Q5UWKDBFiSvXjz4E1492Bj609p9g+o71uIlwhEbRWNm2pAi32jZG2MmHQyJZIhdUAOCmm27CTTfdFHU1hOg+U4eaPy80KjwHzdR/WzhHwsvOy/CKAZEzrXW3Cde0ouijIiNdjsrVurto7JOd/fJ/XjtSKZS6iKBiUclqwD4H1QHdnqq8tAh7m8TnzGxuyIYesGvy1LYnG4HtSMo6V0ePAVsf9+lMS/CxC72B5ONHyyzcnmyAMywDUHOSjoPwrUOeVTd3WFcvej3N3jF1bLxhnZ7sdn0rR6OSnvDt/hkGJPfk2/Tj/N5q+nH6JABA+7JinDe8O84cUo0aiQlF1A5sZFpe/rI8VXBOLO6Czk/OHYwbx/BD39uv1jmC3pKPx47ltT/aq2n/u4npAPb+ePKhXQCkIiNn0tgCviUM//4bzvQhz/qKpkbZOUh2VOqsu0X5YJN9/J16zHwOoC68/EXPT2XRkm8aFRJUFNDXqFgvaAngaOKwbYam6ax3ekXLqz8/QJxfs4nAmZZTDo9Jlx2Nv115rKdJdOnGBry8YL0wf1VBwDD417tNLLxrrjmpP0b255uD2AB8gNpuKRWE27e9amwsK0vDdbVnF0pZfvfNI3HHuEF4/vqso73Df8oA9rucDKyuuUr7LIX77qnknvLFya/JJc7cc/4Q7veBaVQCMv2INDMy049ozGCJ1ZEGCpCgEgJOpyf/eYbdsVLOtNbvigQaldQ7GLzpBwBaXJxpAQW1twdn2sse/wAfrt5+IH/n78pxVCSqWpV6WK9RH+SO6CHfph9EwLeqtlnfF94J0W6YnC2xsna1V7lTu1KMP20gejCHRNpNgQnDUBDa/GlIo8CATV3vYlrwfC7NQcKlI/twv7cKGN7zz8WuH94jvuX0gfj9JUe6XptvQm8sfFQKjaDU8iz+T0+WX580nb4dsjKF8V78OtO6+KgA7pNrj6rgozb6DTdeUmQTVJTyUh9Obj79UJQVF+HMIXwndFE+9p2aQtMYTFSWl+CZ60aitCiBYsU49WEMiLKdQaI+27ldKbbtaTqQRq2c7HZ17SpqoZS/oSdU8gR+O4W27VgHlV1wwcU/8Y4lH6ZyBgzHWNmhrBi32eInCfNlMm5TksDNp4cb1NAvpFFRQHvytaXXWd2obiMNmqRpOmNzSEZ0/q4ff46MhgFcerxzpeMICuZShmwSVRl8+GEWFE0/inUS3YN1MFIXUNuWFuH7Yw91xE9x41jbTiO30k48pIvjGh0cZjxZWiVbu+3QSvDb9jffGMFcY01w45hD8Ox13rZyyhh/2iG47pT++MO3jpSmUwr4BsMxUckQLY6G9kz1j0uPD+fokXxB/P65pwmqLL95+pEz2T73p0uPxvjT1A9cjAISVAT4sVXaJ2uelkC/PtlM7xbYV6XXu/yeClRnW50KpA4DIcVRgZFxmJQRxvZhez3sBK1Jd5iCROlCHiwr2rjHNgG8r74dQp+G6UelLvat8mqTvpXvntwfow7pLEzvtb91r2yLn543BL0lgbcAxT5p2I8XYD5zeo9ocfSri4fjn9cej3suOEI7hP6Aru210ucjgW1PtmTjZ7wSj8F2La1OMWxfygfFGgkqAuxBxnSwd/bWQEw/2c9+trECwJPfOd7xnSyOih3DMHAU71RcI/N/eQ3vtlV3SKhq31SDygXRmik/DsWcAl7+sX1VxZmWRZTWuk3a9nfCXahyBmSU37PfFnETdGSRUtk6iA6647WTSFApKy7CKYd2RVmxMwKviHTf/9l5h+Nbx/XGrWPlMTryAdETsfbXYEoIbLHBfC5KGI4zvXSKoV0/BYjf7clBrMYtB5J5EFTYOrUrdQ5SSdMZQz9trXjimuMch7VdclxvTPzaMMfR535NPzycJxf7KEOpHuFrVFSwh033SnFRIjKHULe+an+2CesMLLgo+zG1TZP5G+4+Yaptkc7Fa9ulr3O7/Og+VRhc0wFH96kSprFvw3ZD7KOS/V53/VRVXooHLx6O4/pxFil5hkg49eIkzs+f+ewjH9ECqaQoIT181Q22fvlwkjYJKgL82CrtyYPoCBaNim/HWud3SZ7p58Dfpw3qho9+OtZyfVHCwKXH98HAblZ1sK+teILv3WJvaJWhUD/urh+f25Md+Umut9bF/8BZklAXtYOWZ1SCtrEoxf9gPtvvLGEYrqd9Ow4NdSnPr4O42+UlRQm8+f1T8O8bThTnIcmnvNS5J0LF3Oz5NcqvxTgXw/KZvwgMaizz8w5b+jqTTXGRgVKH35t6OWza+IspJKgoodvN7P3F3qE81YHJ1EvkVbeh2eScnqzy0tqdP/2MYeIdJ1b87KJSqR9vYPG7PVnhQp2vtSiy7eFNH+Wu41DptcWLGbOGaTqNFPZnqdK3TaukYskzYRhCoXJEr0oAwDeOtd53WNomnW5qGIb81G+O+e6n5x6OG8ccgv5d2jnSD+jq/M5ep6AXUPmEeHdetr/6G8uCMf2IHlFRwsBY2w4/r+XkgUKFtieroL/px3rByYd2wb/mrQusDl40Km4vDvf0ZAUBy35NGLZP+4sUdowI7h14LPK560/gOlOqb3cOQKNie473XzQUyaTJ9TMK+vE5T0C23niLLUaPipNftw5lGFTdAcVFBiraFFvytJuCWP5944nYvqcJ89bsUKq734m8+UCUXTfhVa3NDUfbXDd6ADfl3ecPQd/OfEGF5dTDumHlltXoqHBYpLUmzKLJ4AdpjDui8TAoHxWRxkYXVrRnh72SRALH9euE/9x0Ei7403ue888XSFBRwt/oreVTIkjKCgDFdm9vTXhXJzkaFZG9VqTWVDV7iOvFv9i+DvelUVGoH99HRd30w3LCAP5uEpGjqNP8plSslKKENappSVECR/ar4qYVPgOPTe6mlWuWRG0WnnuVMPDm90/h5mkYgqjJMFBSlEB1RRtHmwYZ6+XEQzrj/ZXbAAD7FU5FVi0/9W6p1VN2uGUlI5T86OxBOKRbO5w2qJs0P8eWcqYaqf6af4KKCHbMC2o95Ev4Z+rQygj16TlgeK8qH5lzCokpZPpRQF+jEnwdEo7BQQ+rzw1nIuaoVOyCyrgjUqrG756SXckFea+qeYkO41Irw70QnoCmbvrxh/36INq3xOZMm0ttvV1It7ejXaOiSiKRNZVYnWmdK/zBNR1w0sDstndHH1A0Obqx5N5x+L9rR2b+3ucSyl8HA8EIrd06ZIMhtikpwuUj+1oi/arWJfM5T00/IthFoJ+wEkG1C1sD9iiTYs5OMa9F5oNCjAQVAYbgs9q1wb+9IvWkp7w436XiqFi/s5sM/njpUXh1/Em48dTsQXlhOH/az+Gwv0h2B96g4fkKXHhkj8zn3p3EAzvPl0CF9DXO5vPenleO6gsAuPOcwcqTi9hPSD6a9RRMdm7OtM1+pM50nvbTtZkirz6xH978/imWrZwOjUpAr2v7smJL39FxwHYjYfAP4+QhKvbI3lVK17sRlP9FHGEFAD8m5qBC8bPPkq2PX626pYzAcgoPMv2EgH0gDEJi1TninXu9JS/n71zTj+1lKCsuwgjbYLd1dxNTht4WShFXn9Qff5i2HDv2NgNwvkh+BTU3eBqVu75yBEb274yB3dpLBSW/k4nD7dnHrd57wRG46fSB6NahDbbvaXK/wFG6GvZ4Dixuz8pxjhQDe0qyKgnDwIVH9sRPX14CIH2Gld2cpnaXXnfX3XbmYXh5wXpcfWI/AMFM5jp5hHUCOy8fL2NRccJQCvEfBWx/9VNHqwYzGB8V9l3hjVFe/dlIo1IgxOEQM3ZA8K9RcV7fyjmUkKdetJM+yA9IqbrD8HDP9ZvEa9+2pUW46KieGNqzEm1K1INl6WIv2u9p1KyqX+0a/vduj+CS4/g7iNzeHbtGhe2bx/TtKC+UUzfDSGk20vDmGsf5RoJ8vb5nt5xxKKb/cAw6ty9TSq9Siv2dlT0PUZ8Jalhi89GJ5TF3whl44YZRGNqzMqCaBA8rAATltB/UmMhqcnnvVYEptyyQRkUBv6afIEwV7JjJk6bLJKvaVKXkqkheHBVHiGYFggpvH+U+fz+CoOqVqnFUwphcpKdLeyzxe2MOwTF9O+Lyxz/Quu7Q6g74ZO1Ofl0U+1LSIqjYfWKcLe10wOWXE7bmLlt+MGnSDOmud96TGzKhqLy0CPX7mpXyqalsg5rKNrEOMMaa7vq4HH0gwzqW6V9/WHV7NLUkUV2RXWh0aFOCD39yhlSD6QXdoxSigAQVBfw40559RA2uOrEffvHfpb7qwAoAPB8KV0HFBZOnUfEQ/yWMidVtXPvB2GBP/vQ1QSleqnrQYhjq+jAoLkpYHFZ58ITYSZcdhT+8vRzfObl/KPXi7wBSI85hxkWTyzF9O4rP6ArofthsyjlRrt2IqdUnw6f3jkNLq4m2Hu4tjc4BkjymfH80TDjHom4V/k6G5xFjuTEDCSoCgnIYu+WMQx3q0YcuHo7+XdvhG4/NcZYrrE/2M8927maOcPdRcb5QXsJJhzGxukn8HRQP1lPFn0bF8CWt7d7fYvk7qMmSfbbS9gxxbi7j+Jz06liOXzMnG3tBd4XuOOtHkC5Ih0UZSgcpBlCVB7461H8mANgW40XFdSPsOEh+aVcW7LSo8+yG9axE387l3oJ6evVR8XRVbiFBRQH9s35Y7Yfz914d26KtQLAQmgQgz5M3CejAO5TQy1kSQa3aorS4btnV6Pla1bASomba0xTcllZrgYEm80RZABGaeciauw3n8D3noYT8a/0eVREkTuFK3w9lcE0wJiG2Kl4cnuMWIC6Mp8zmqSNz/OemkzyPoTHqroFDzrQq6Jp+LJ+D8c52i6Ny3Sn8KJXZMuV1Mjk+Kl5WlH7eFVG7uI1rQb+fqjtkeKzZukcpXd9O5Uo+QLkefIITNJ2oCNOeipf0D95Eqjpx5MpH5aKjerqmsbdLlH4F1klYv41iJqeEgrVZ1NvIz/vntbtWd1Bz+o4SElQU0HamdXGkknUo0U+sKtA+OIw+rCuuOKGvvE4K+/rt35co7Ppx5hG8HdxtXDt3WPdAykzj5wTV+n3Nys7Tz1x3Quaz0OQXkBimul1S9EsQDpBlHO1GEMgmbV6ZDmdawV0HJahUtpWbJrso7A6y17FG4KuQC8GWbT8vbfSNY3sBgPS06FwSRpsFFUfFa5kqPHH1cfjJuYNxfH9xJOO4QKYfBXQnX0tYed7vPg8VtF8+rGeFVh3Fgop/jUpQi1A2G7c5sqbSOWg/d/0J+NkrS3D/hfp2eT/HpwNA707l+PcNo1BVXipNp9JWHmRFLqqPJcxB9fj+nTD5/TWB5yvrH8N6Oc0dqgHfgvJR4Z31pEu6js9dfwK27GrEgK58YVg0Wb3/49N914GHF0HlmpP6Y1jPylhvU/aLdWGQ+zJVOG1wN5w2WH58QlwgQUWAIfisdK0PjYo4T7GErnpWiE56wKMzrY/X0tLmFo2K/mr+hAGd8fZtp3qqh84EdfPpA/HIOysc3x8rOW8ljYpwKWrPbxzTy71ymmWl0mllq8T0H47B4vX1OGdoTfCZC3j95pPx2cYG7jk2qguFoqCkRAE3nTYQFzARj2Wkayw6O0pGRZti7TD5KnUBvGlQixIGRnq4j3zCbxt5Ic671PxCgooAP4puu2LZLYUKCYvw469Dql7uaXtyGO9Kjm3aKoHu0tx25mHo17kdbn/hEwB69neVphK1Z8d2cm2Nl7Jk+LH89O/SDv27uJ/m6xVe1YZKVuyq8ncXzTbW5ZYzDlWOiaH8zjPJOpaXYMfe5sCFAusOxECzLhwi0KgUMiSoKKA9+bK7frjXmsKBX8Uso7prwZJG8FmGJ2fagN5K9h5z7Xuno0kyDMOi2tfR/lhPnuaXKapKWINfGOdUhY2uEMU7cZlH5/bhCio674qX9+rV8Sfj5QXrM2c+BQXbR3LlcJzP5ErREbICMFIK+Nb8MbimQ+az9vZk9jOnlyZN8YQmPNre4H+2l6dUP8ULcu1MG4Vdl0eRpoDmdbulmqo2GElFNVKm6Lc4b9TQNQ2qbvUVhRAICp1H6OV96NO5HN8fe6i29s2OvX0Ny1hEggoPizNtjkazQn4WpFERcPPph8IwgHFH1GCXLQiXG24Trpd5LSHRqOjWSXXYy/n2ZOZzXcP+zOdch9zWXSSy1VOtqglFTZhQTtEVngt3ENPtHqrPN+hQ5Xb0HOAVfYy8VkaCrH1Jo8LHbwh9T2XmpphIII2KgLalRbhj3GAM71WFHXvFcTW6c3acuG1Nk63APXVqzYt4yXnmDi8Br4KS6tnglW7bO4NGd1L3GtNC12Sne60ovRe5T3ZN1AOk7u2omk7D2k6dKTektGFDGhV3omiVXDntRgEJKgqIIj5/67je3BgIKsHVZIzk7GuXaVTUDAisKtIJb2XkLYyz9iWufOfk/jhjcDc89PXhme/+dNlRaFOSwN+vOjbw8nTvwaJR0bjObRu7PQ1LWEOSFzNWnM1CKoja0kvUVa1yQ/ZRCQrp8y3cudEXUQgNBSynkOlHBZHpYX9zK/90VvYzp/OYptiZFgCeve4E7GpswYh738p8x7qL+HWa4r1EQalwfZl+BG9aeWkx/n71cZbvvjK8B84Z2j0U1bNujlbTjzdnWmFdhM7VysVokUxmP182sg+e+aAWQMxPWPV51o+dHpVtsKF+P846Itzt1DqTmarmIqinNPbwbnh76eZUnvYDNNnjPApidox+DMnXMnMFaVQUEI2Dza18gcO6m4OTH4BDJNFLEwnDYe6QDQ66Ppls8vGnHQIAuM9DYDRuMT4GLl1flLDs47r34EkLwTlbiVsX4Zku3s19sttj7+W+C47QKiMqdM+4swv69uf99u2n4t0fnYbDqjtAlWP7dtSrRFgEJKlYu7TMmTaY8qKgX+fUbr0TBgQfmTUK+a2QTT+kUVFAeyKyTAp80097wQmdogkoIRA0ZNcIqmR5iX541iBcc1J/pTDeKvh5V2J+qKoQtto69+DLmVbXR0VRsGG7upc4On7JxVDrZjotLy1GeSe9ofEPlx7ls1ZyVJ93UJovNheHRsVls0C+MPW2U9HYkhSOxUFBzrT+iVSj0q9fPxiGYfn34IMPRlklLrLJhyfDGILPmWskg4noN2tkWn9d0ursa/gSUn7zjRG2vL0Tl1NV9X1UsvXWOcJeFm3Y9XvlUuT52InLM9BBVxMXhhagfal8svvblf58qXK9Wmbb1N4nCsX0U1KUCE1IiWKXXT4/CzciN/3cd9992LhxY+bfzTffHHWVHIgGbzWhwvl7zwPhrDtovCT2OCpTbx0tLUO3Tmm6ap6kefHR1pNf/bwscZkk9Xf9ZNERVNR8VHLrO9Qq6us5ejSnHNoVgPjQPR66VVMN+BYkZw6p9nW96g68oJ6TskalgCdHX2g0yymHdgEAnDvMn09UIT+KyE0/HTp0QE1N7s4A8YTg5RdGl7V8dvae9IFiH991Jq554iNcNrIPvvf0x8L0gHVASBgGBlRnfVyC7J+XHd8Hf5i2XDl9kIN+vpp+2P6hI2yp+aiIfghnVPLyDIKsya8uHo7hvStx4ZE93RMfQD+Oir3P+r+DsIVsVQf6oGoh28nmtlmA0GuXSZcfjemfb8bYw/0Js4VM5BqVBx98EJ07d8ZRRx2FX//612hp0QuulgtkgxDvF1XHxZKiBP7vuyNx7rDurnVgs/HiTJsrpzc/Kk8dbUSY6IZOZzVrWqYfhbYKanuy8mQs6OslkuB/QT61yvISfG/MwIzWUYX0AN+ro9o1YbwLIk1UUCjv+gmoHjKNCks+O9OGiU6zVLQpwYVH9kQ7n2aoQjb9RKpRueWWW3D00UejU6dOeP/99zFhwgRs3LgRv/vd74TXNDY2orGxMfN3Q0ND6PUUvacq5/UE1XdkeapMQm47kQLDj0YlJoLKd07qr5We3dKrurK2R6YVa9L41+s706ohErTCPknYD306l+Ojn45FRVu14SyMAb1Dm3CHUlXTT1CvECvwUAh9faIwicX4FfVN4Lf24x//2OEga//3+eefAwBuu+02jBkzBsOHD8cNN9yA3/72t3jkkUcsgoidiRMnorKyMvOvd+/eQd+CA9HgbcLkrmDCOOfBLdqt6/Uh2pV7dwrmCPmYyCloW6oXkdSzj4rCclSUws/2ZBmi6usc1BgFXTuUKUeSDWMOCTuKrZfgi4Hh6BM5WvTkMbk+9gMAyksi9+QIjcAFldtvvx1Lly6V/hswYAD32pEjR6KlpQVr1qwR5j9hwgTU19dn/q1duzboW3Ag63RXndjP8Z0fjYrKCtrLKkYlCqpXRvb3foz8I8y2zrDV52HRoyrr+KkjbCn5qIhMP9r9Su2C9gLNgCxmTb7NVV7en47luT3GwY6qnBKGj4pj14+lLvn29HNP2NqV331zBAZ2a48HLx4WajlRErgI1rVrV3Tt2tXTtQsXLkQikUC3bt2EacrKylBWFkzMD1VEp4+aZiqM/oheVfjNW8vwzuebHWl0u6jKXO3NRyWeq6D+XdplPsfF9KPLET0qM5+D9lEJanuyKl89qidmLNuMUQOswqfsgMp8e2qeBJV2pdixt9lXuVec0Bf/nPulp2uVgxuGIOzLnGkjCLWTF+Tynfja0b3wtaN75bDE3BNZN5szZw4efvhhfPLJJ1i1ahWefvpp3Hrrrfj2t7+Njh07RlUtLucM5Tu7pvwMDAzpUYEywUmrgW0v9en3Yg0YF+w0l/BZtzSiNswnVAUV0/S36ycsYbOkKIE/X34MrhjVz/J9cQEZwL1YUf58+dEYXNMBd4wb5Lnc+y8aiqe+c7yna3MdQp/1S3FuT7buQCTkUAv5J7LRp6ysDM899xxOPfVUHHHEEXjggQdw66234q9//WtUVRLiJ1S7/u4M0fdijYjayjw8jYpfwefnXxmCY/t2xNUn9QumQhGis02VfSai68Smn9wOfzIfFS81iXR+81D24JoKTPnBaIzzef6P1/tWHYPCsJ7KsqRJmMgFkXnfHH300Zg7d25UxXtmQNd2WLVlDwDroCAagIJacQS5PTnMwaV9aTE6tSvF9j1NSulNE7j25P649mS9nTZxRS/gW/azSFAJw4dS11kY8CasD64Rn5WjuoslDPy8k1FVW12jEtD2ZMlBm2xNKOAbnxJGA1kImuKooRbU5OvHsLbA7Ass1CqE8B77daaV1cnLMGdx9E0YmDvhDDz27WOUro3iVN4je1cBAP59wyhMvsZ6KvOlx/fxlOd9Fx6B4oSBh791pPI1Vo2KII3mtmUZPz33cNxw6iE4pKv4QEw7ow/rivLSIoyVRFYVPcEnJWaOkgidG3wJKj7L9qp9zLWLijTgW0Cm3kKmbWkR7j5/CH567uHoHNA5agczhbufKdcEFO9CBDtY2ActlSJUYnYERWlxAm1K1CaiKDb6vHTjiWhqTaJNSRE+WLXN8tvd5w/xlOeVo/rhsuP7aB3kxz5HocAW4KO6bjR/t52MJ685Ds2tJko1V4V9OpWjWhIGXxZALmz8aKn8akiP7FMFQH9Lv6rmIqj3qQcbcM/uo1IgZ/2EzTWa8ZgIMaRRCQhxvItg8rGmideuH57Zwu8A9suvhrfVLpEw0KYkZf6wTwB+/JF0TxtmyxZNMKLq5OrQM8MwXIUUXk3cHn9pyHFHZPgxV/h9d9qXFeOz+8bhndvH+MtIQFBy/0/POzzzWbY9mcQUIheQRsUHVh+VYJwexVFwGTOTF/EyxMGFN8n63aVwyXG9sWbbHhzfr5P3iingdEzOHSo+KkHFUQkTXs3dnn9pnmpUghAQy11OWvZDEIHG+nYuRycmJIM0hH7MAwEShQFpVDQR+gwI0wcDO1g4nGlVdv2wnwOe5Xj+FapblkUDa1HCwE/OPVzqGxEE9qrlyjnQBCyaCtHkFXa/Cgu3+umakoIkH51p3bjrK0PQrrQID319uO+80reYNk+dO9wanoF8VIhcQxoVH7BTbC7PZHH4qChcZNmerFclV3j+Fco29YDrokuUGpWy4iJMvuY4tLSaqGzLj3waVL8KE25VXOoXpYNhIQoq3zm5P646sZ8v06Wd128+BSs278LRfToK0+TKBEkc3JCg4gOLOUaQJgxnMy+Dg1WjElxdAHClDfVdCpGLKta/cjzujhkkjsIMyE5PjvcEIardY98+Bo/OXInffmNETuvD4ucZx9l5NEghBQAq25bgmL5O0yvbBmyRFx7ZI9DyCSINCSoBEfd4AtazfoI2/XCcaSMMUKWDUzsV7+eYJk7V5D1CUTuePbQGZw/1FzTNL4WoUQkSt1BAVkEl+/l33zwypBoRBzvko6IJO1Cx77Ou6l4XWXA5lck1zAGWN7CpnrYbuT4lZjOP89lGUw+/xNnH0k+bxl2TFQTNrUnp7yL/s6A1OgSRhjQqPmCFh++fcSiW1e3CxcdYD4fSHdhEEyd7KJyXgZbVehQFvOOCJ2wM71WFkf07oXencrz48bpAywuSuA+tQtNPjCQYXk3ibCJh66YbNTSKuVgW4TcMmlrkgkqYOwgJggcJKgHRsV0pnr3+BADAqwvXZ77XHa9FPhs9qtrispF9UF5ShDJbDAqVIthVUpuAd1zw6lyUMPD8/xsFAFJBJWrTT2TzqWg7MmxO2oLLaYLwTlHCwJhBXbFlVyNeHX+S3sURNPxtZx6W0/LcBBWL6Ye0KEQOIEHFBypzbJCvsSgImspkyw4+uoHJ3PAja0TtTBs3Vb5hGBYhJh/iqPCIk8aHxxNXp45O0K1nFP3l9MFyh+ugaXQ1/cT72RKFB/mo+EBlktV9qcMa4Bvd1Lk+8CNsdJOEWc8FcRtz+3Yqt/wds+opE/d6G4bh6V2LQoEQ9MLCjQ5l8vWr5eiHqJ3MiIMCElQ00R2ncjERqpl+1EaU/l3K3RPZSKqbtC385hsj0L9LO+3ygiRugsrjVx2LsYdX45UDJglhHJUc1skLiQIdWcLWFLHZ/+riYXjhhlGhlsfy9HdHYkj3Cvzj6uOk6dg2OKSb+gGXBOEVMv144LYzD8OjM1biZ+e5H2AX5FkyqmXwqFHUXFw4oic27NyPY/uKgzzZ8XoC8tdtjsdREJXpR9RiA7q2x+NXHZv5O6ijGXJN3ExqQcG+vneMG4SP1mzHlaP6BpY/66N0yXHeTvL2ykkDu+CN75/imo5tg76dyvH0d0eiC50QTIQICSoeuOWMQzH+tIGehA6da/7f6AH4y6xV2mXwOGlgZ/zk3MEYXFMhTZdIGBh/2kCtvN3iLlw5qh8mv79GK89cEfP5Xkjc6x33+nmFFcC6dSjD5GuOj7A20cCas02kBByCCJMCVdCGj1fNiGp8EcC6JVmGagj960cfgtGHdVUuX5XqCvlq6ifnHi79PUrydUKNe7XjXj/PhHxjcdeUAVZBRXSYJkEECWlUNPE7jugIOKqOuFEPbT88axC272nCxUfzTTlRHkDnRt6aKGI+oeXDhOuFsJ1p86HVLEEvSU4hckB8Z5ACRUejkg+DFgBUlZfiz5cfgzMOD/ek4zCIaj493MUE50Zc+8aEcwajTUkC9184NOqqhEIunWnjirWOJKkQ4UMalRCQrTLcNCqexql8GN1iSq63m/73lpPxn4UbMP50PT8gO3F95P/v1EPw3VMGFGw49fA1KvaQf/HD4qMS76oSBQIJKjmmvUuMAhbV1VthTgm5Iretd0SPShzRo9J3PnE2WRWqkALkoN3zoOnszrQEETZk+gkBnnzx6OVHY0DXdnj028f4yocIlnxt43ytd74Tdrvnw2Nl5dCk25Y/gggA0qho4nVFdc6w7jhnWPdAyzpveHfMXr4V5w/v4alORH5MDDzytd75juj09DDyjysGaVSIHEOCSoxxG7T+dOlRaE2aOQ+xTURPPkxohUjYpp84m/R40PZkIhfQDBdj3IYswzBISDkI6NNJ/1gDIhxYATEMkSLvBFCSU4gcQLNcCAS1yMi7QSsPydd4H/m28i4UyJHUCrUBkQtIUNEk9HmNXbHl6SRKBMsZh3dzfkldIxIsG5pCmKXz7bGS5YfIBeSjEmNITgkfMw9G2jvPHozDaypQVpLA959bCCD/JrRCgV08hOGfkW+LE68HkhKEDqRRIYiY06akCN88rrflBOx8m9AKkZYQtubm21Ol3clELiBBJcaonvVDHBywwkmcesbB2k1bw5il86wt80EjSeQ/JKgocvrglJ/ABUfmLmZJno1ZRMgkLP5L0dXDzsE6V4WhUck3goiyTBBukI+KIn+/6lg0tiTRpqQoZ2XGaTIqVPLJhGLRqMSo2joHbRYSYURlzZeW/OTus7CnsQVdO5RFXRXiIIAEFUUMw8ipkALQFtRc86//NyrqKkixxvCIT99o3+bgHEZC8VGJkwQqobJtCSrblkRdDeIggUw/MYMdpvJkzCoYhveKtxo7EVONSjuNgzYLidZkMoQ8yZxEEHZCE1QeeOABnHjiiSgvL0dVVRU3TW1tLc477zyUl5ejW7duuOOOO9DS0hJWlXLGkB4VUVeBKEDiamFpm2NNY1xoDV5OQXMYmRJEnhPaUqipqQnf+MY3MGrUKPz97393/N7a2orzzjsPNTU1eP/997Fx40ZceeWVKCkpwS9/+cuwqpUTDqvugOeuP8GyndSNsYd3w9tLN+PqE/tlvssXNXA+w+5aiPsuq7jW72A9xuHIPlWB5xnTR0wQkRKaoHLvvfcCACZPnsz9/a233sJnn32Gt99+G9XV1TjyyCNx//33484778Q999yD0tLSsKqWE04Y0Fkr/Z8uOxqL19fj6D4dM9/RmJVb8mmSiJMQWxSfquSEmXeMwRebdmP0oV0Cz7soRs+VIOJCZEuhOXPmYNiwYaiurs58N27cODQ0NODTTz8VXtfY2IiGhgbLv0KgTUkRjuvXCUWJePohFCpxmvDdSMQ0jkpcNT1h0bdzO5w5pDqUvlMUV/seQURIZIJKXV2dRUgBkPm7rq5OeN3EiRNRWVmZ+de7d+9Q6xklB9sEEAXtyrL+FXFv7QTztsapayRocg2MDm1oJw1B2NESVH784x/DMAzpv88//zysugIAJkyYgPr6+sy/tWvXhlpelBzevfCccqvKS3DHuEF4/Mpjo64KAKBbhza4/6Kh+M03RsTe14Ldkhyn7clkrgiOP19+NHpWtcUjlx4VdVUIIjZo+ajcfvvtuPrqq6VpBgwYoJRXTU0NPvzwQ8t3mzZtyvwmoqysDGVlB0eQoeP7d8KfLz8a/bu0i7oqgTL+tIFRV8HCFSf0jboKSsQ1Mi2ZK4JjRO8qvPfj06OuBkHECi1BpWvXrujatWsgBY8aNQoPPPAANm/ejG7dUuHpp06dioqKCgwZMiSQMgqBc4d1j7oKREygs34IgjgYCW3XT21tLbZv347a2lq0trZi4cKFAICBAweiffv2OOusszBkyBBcccUVeOihh1BXV4ef/exnGD9+/EGjMTkYoTnNOwZpVAiCOAgJTVC566678OSTT2b+PuqolM11+vTpGDNmDIqKivD666/jxhtvxKhRo9CuXTtcddVVuO+++8KqEkHkNVbn6vgIB+SjQhBEmIQmqEyePFkYQyVN37598cYbb4RVBYIoKOLqo5JPW7wJgsg/4r3NgSg46CQT78Q1jkrMN0sRBJHn0BBDEIQvyEeFIIgwIUGFyCk0pXknYYlaHH1LDuia2jZ/wYieEdeEIIhC5uA8n50g8hCLj0p01cjw2k0nY9WWPRjas/ACExIEER9IUCGIPMESmTYGkkq7smIM61UZdTUIgihwyPRDEHlCXHf9EARBhAkJKgSRJ1gj05KkQhDEwQEJKgSRJ8Q03htBEESokKBCEHmCJTItBaQhCOIggQQVgsgTEhY5hSQVgiAODkhQIXJKHOJ/5CvUdgRBHIyQoELkFNMkTYBXLJYfakaCIA4SSFAhiDwhQRoVgiAOQkhQIYg8gfVRSdD5OgRBHCSQoEIQeQIbO6WItCsEQRwkkKBC5BRyCPUO23R0YjFBEAcLJKgQOaF7ZRsAwCmHdom4JvkL66NC/ioEQRws0KGERE548cYT8cbijfjmcb2jrkrekiCNCkEQByEkqBA5oUdVW3z3lAFRVyOvYc1mRaQLJQjiIIGGO4LIEyy7fsj0QxDEQQIJKgSRJ1g1KiSoEARxcECCCkHkIV07lEVdBYIgiJxAPioEkUc8c91I7N7fgu6VbaOuCkEQRE4gQYUg8ogTD6Ht3QRBHFyQ6YcgCIIgiNhCggpBEARBELGFBBWCIAiCIGILCSoEQRAEQcQWElQIgiAIgogtJKgQBEEQBBFbSFAhCIIgCCK2kKBCEARBEERsIUGFIAiCIIjYEpqg8sADD+DEE09EeXk5qqqquGkMw3D8e+6558KqEkEQBEEQeUZoIfSbmprwjW98A6NGjcLf//53YbonnngCZ599duZvkVBDEARBEMTBR2iCyr333gsAmDx5sjRdVVUVampqwqoGQRAEQRB5TOQ+KuPHj0eXLl1w/PHH4x//+AdM05Smb2xsRENDg+UfQRAEQRCFSaSnJ9933304/fTTUV5ejrfeegvf+973sHv3btxyyy3CayZOnJjR1rCQwEIQBEEQ+UN63nZTUMDU4M477zQBSP8tXbrUcs0TTzxhVlZWKuX/85//3OzVq5c0zf79+836+vrMv88++8y1TvSP/tE/+kf/6B/9i+e/tWvXSud9LY3K7bffjquvvlqaZsCAATpZWhg5ciTuv/9+NDY2oqysjJumrKzM8lv79u2xdu1adOjQAYZheC6bR0NDA3r37o21a9eioqIi0LwPdqhtw4PaNjyobcOD2jZc4ti+pmli165d6NGjhzSdlqDStWtXdO3a1VfFZCxcuBAdO3YUCik8EokEevXqFVqdAKCioiI2D7bQoLYND2rb8KC2DQ9q23CJW/tWVla6pgnNR6W2thbbt29HbW0tWltbsXDhQgDAwIED0b59e7z22mvYtGkTTjjhBLRp0wZTp07FL3/5S/zwhz8Mq0oEQRAEQeQZoQkqd911F5588snM30cddRQAYPr06RgzZgxKSkowadIk3HrrrTBNEwMHDsTvfvc7XHfddWFViSAIgiCIPCM0QWXy5MnSGCpnn322JdBbHCkrK8Pdd9+tZYoi1KC2DQ9q2/Cgtg0Pattwyef2NUzTbV8QQRAEQRBENEQe8I0gCIIgCEIECSoEQRAEQcQWElQIgiAIgogtJKgQBEEQBBFbSFARMGnSJPTr1w9t2rTByJEj8eGHH0Zdpdhzzz33wDAMy7/Bgwdnft+/fz/Gjx+Pzp07o3379rj44ouxadMmSx61tbU477zzUF5ejm7duuGOO+5AS0tLrm8lcmbNmoXzzz8fPXr0gGEYeOWVVyy/m6aJu+66C927d0fbtm0xduxYLF++3JJm+/btuPzyy1FRUYGqqipce+212L17tyXNokWLcMopp6BNmzbo3bs3HnroobBvLXLc2vbqq6929GP7DkVqWz4TJ07Ecccdhw4dOqBbt2646KKLsGzZMkuaoMaBGTNm4Oijj0ZZWRkGDhwo3WVaCKi07ZgxYxx994YbbrCkycu2VTqE5yDjueeeM0tLS81//OMf5qeffmped911ZlVVlblp06aoqxZr7r77bvOII44wN27cmPm3ZcuWzO833HCD2bt3b3PatGnmvHnzzBNOOME88cQTM7+3tLSYQ4cONceOHWsuWLDAfOONN8wuXbqYEyZMiOJ2IuWNN94wf/rTn5ovvfSSCcB8+eWXLb8/+OCDZmVlpfnKK6+Yn3zyiXnBBReY/fv3N/ft25dJc/bZZ5sjRoww586da7777rvmwIEDzUsvvTTze319vVldXW1efvnl5pIlS8xnn33WbNu2rfmXv/wlV7cZCW5te9VVV5lnn322pR9v377dkobals+4cePMJ554wlyyZIm5cOFC89xzzzX79Olj7t69O5MmiHFg1apVZnl5uXnbbbeZn332mfnII4+YRUVF5pQpU3J6v7lEpW1PPfVU87rrrrP03fr6+szv+dq2JKhwOP74483x48dn/m5tbTV79OhhTpw4McJaxZ+7777bHDFiBPe3nTt3miUlJeYLL7yQ+W7p0qUmAHPOnDmmaaYmkEQiYdbV1WXSPProo2ZFRYXZ2NgYat3jjH0yTSaTZk1NjfnrX/86893OnTvNsrIy89lnnzVN08wc1vnRRx9l0rz55pumYRjm+vXrTdM0zT//+c9mx44dLW175513moMGDQr5juKDSFC58MILhddQ26qzefNmE4A5c+ZM0zSDGwd+9KMfmUcccYSlrEsuucQcN25c2LcUG+xta5opQeX73/++8Jp8bVsy/dhoamrC/PnzMXbs2Mx3iUQCY8eOxZw5cyKsWX6wfPly9OjRAwMGDMDll1+O2tpaAMD8+fPR3NxsadfBgwejT58+mXadM2cOhg0bhurq6kyacePGoaGhAZ9++mlubyTGrF69GnV1dZa2rKysxMiRIy1tWVVVhWOPPTaTZuzYsUgkEvjggw8yaUaPHo3S0tJMmnHjxmHZsmXYsWNHju4mnsyYMQPdunXDoEGDcOONN2Lbtm2Z36ht1amvrwcAdOrUCUBw48CcOXMseaTTHExjtL1t0zz99NPo0qULhg4digkTJmDv3r2Z3/K1bUOLTJuvbN26Fa2trZYHCQDV1dX4/PPPI6pVfjBy5EhMnjwZgwYNwsaNG3HvvffilFNOwZIlS1BXV4fS0lJUVVVZrqmurkZdXR0AoK6ujtvu6d+IFOm24LUV25bdunWz/F5cXIxOnTpZ0vTv39+RR/q3jh07hlL/uHP22Wfja1/7Gvr374+VK1fiJz/5Cc455xzMmTMHRUVF1LaKJJNJ/OAHP8BJJ52EoUOHAkBg44AoTUNDA/bt24e2bduGcUuxgde2AHDZZZehb9++6NGjBxYtWoQ777wTy5Ytw0svvQQgf9uWBBUiMM4555zM5+HDh2PkyJHo27cv/vWvfxX8wEEUDt/61rcyn4cNG4bhw4fjkEMOwYwZM3DGGWdEWLP8Yvz48ViyZAlmz54ddVUKDlHbXn/99ZnPw4YNQ/fu3XHGGWdg5cqVOOSQQ3JdzcAg04+NLl26oKioyOGFvmnTJtTU1ERUq/ykqqoKhx12GFasWIGamho0NTVh586dljRsu9bU1HDbPf0bkSLdFrI+WlNTg82bN1t+b2lpwfbt26m9NRkwYAC6dOmCFStWAKC2VeGmm27C66+/junTp6NXr16Z74MaB0RpKioqCn5RJGpbHiNHjgQAS9/Nx7YlQcVGaWkpjjnmGEybNi3zXTKZxLRp0zBq1KgIa5Z/7N69GytXrkT37t1xzDHHoKSkxNKuy5YtQ21tbaZdR40ahcWLF1smgalTp6KiogJDhgzJef3jSv/+/VFTU2Npy4aGBnzwwQeWtty5cyfmz5+fSfPOO+8gmUxmBq9Ro0Zh1qxZaG5uzqSZOnUqBg0adFCYJlRZt24dtm3bhu7duwOgtpVhmiZuuukmvPzyy3jnnXcc5q+gxoFRo0ZZ8kinKeQx2q1teSxcuBAALH03L9s2MjfeGPPcc8+ZZWVl5uTJk83PPvvMvP76682qqiqLpzTh5PbbbzdnzJhhrl692nzvvffMsWPHml26dDE3b95smmZqW2KfPn3Md955x5w3b545atQoc9SoUZnr01vnzjrrLHPhwoXmlClTzK5dux6U25N37dplLliwwFywYIEJwPzd735nLliwwPzyyy9N00xtT66qqjJfffVVc9GiReaFF17I3Z581FFHmR988IE5e/Zs89BDD7Vsod25c6dZXV1tXnHFFeaSJUvM5557ziwvLy/4LbSytt21a5f5wx/+0JwzZ465evVq8+233zaPPvpo89BDDzX379+fyYPals+NN95oVlZWmjNmzLBskd27d28mTRDjQHoL7R133GEuXbrUnDRpUuRbaMPGrW1XrFhh3nfffea8efPM1atXm6+++qo5YMAAc/To0Zk88rVtSVAR8Mgjj5h9+vQxS0tLzeOPP96cO3du1FWKPZdcconZvXt3s7S01OzZs6d5ySWXmCtWrMj8vm/fPvN73/ue2bFjR7O8vNz86le/am7cuNGSx5o1a8xzzjnHbNu2rdmlSxfz9ttvN5ubm3N9K5Ezffp0E4Dj31VXXWWaZmqL8s9//nOzurraLCsrM8844wxz2bJlljy2bdtmXnrppWb79u3NiooK85prrjF37dplSfPJJ5+YJ598sllWVmb27NnTfPDBB3N1i5Eha9u9e/eaZ511ltm1a1ezpKTE7Nu3r3ndddc5FinUtnx47QrAfOKJJzJpghoHpk+fbh555JFmaWmpOWDAAEsZhYhb29bW1pqjR482O3XqZJaVlZkDBw4077jjDkscFdPMz7Y1TNM0c6e/IQiCIAiCUId8VAiCIAiCiC0kqBAEQRAEEVtIUCEIgiAIIraQoEIQBEEQRGwhQYUgCIIgiNhCggpBEARBELGFBBWCIAiCIGILCSoEQRAEQcQWElQIgiAIgogtJKgQBEEQBBFbSFAhCIIgCCK2kKBCEARBEERs+f/FvhATiKBgaQAAAABJRU5ErkJggg=="
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "example_mfcc = raw_features[raw_features.filename == \"rock_50.mp3\"].sort_values(\"sample\").iloc[:,:]\n",
+    "plt.plot(example_mfcc[15])\n",
+    "# plt.plot(example_mfcc[4])\n",
+    "\n",
+    "# librosa.display.waveshow(audio)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:32:08.167783042Z",
+     "start_time": "2023-09-06T16:32:07.535299813Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 3. Aggregate MFCC Features"
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "outputs": [],
+   "source": [
+    "# allow for direct entry if features were already created in earlier run\n",
+    "raw_features.to_csv(LOCAL_PATH / \"raw_features.csv\", index=False)\n",
+    "\n",
+    "if \"raw_features\" not in globals():\n",
+    "    raw_features = pd.read_csv(LOCAL_PATH / \"raw_features.csv\")"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:37.098344632Z",
+     "start_time": "2023-09-06T16:32:08.174101151Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "              filename      label       0_min       0_max      0_mean  \\\n0      classical_1.mp3  classical -530.784363 -163.308350 -302.203156   \n1     classical_10.mp3  classical -562.857849  -96.164795 -219.259018   \n2    classical_100.mp3  classical -536.237366  -61.608826 -177.804108   \n3     classical_11.mp3  classical -536.457458 -120.429665 -222.126312   \n4     classical_12.mp3  classical -562.675232 -148.133560 -270.975403   \n..                 ...        ...         ...         ...         ...   \n395        rock_95.mp3       rock -553.110107   -5.218835 -193.506042   \n396        rock_96.mp3       rock -541.236023   27.163334 -119.113991   \n397        rock_97.mp3       rock -518.494995   58.526745  -66.267746   \n398        rock_98.mp3       rock -518.643066   53.555115  -45.734516   \n399        rock_99.mp3       rock -544.703125   75.612129  -49.380943   \n\n         0_std    0_skew      1_min       1_max      1_mean  ...     38_min  \\\n0    51.142183 -0.468374   0.000000  178.751617  111.332344  ... -44.098068   \n1    53.561838 -0.772320   0.029056  259.632690  215.094193  ... -27.458416   \n2    83.381622 -2.587179   0.000000  190.475891  112.471710  ... -27.335688   \n3    76.246992 -2.402419   0.000000  159.425751   99.853645  ... -31.774948   \n4    52.191182 -0.366587   0.000000  194.264160  148.226654  ... -44.843811   \n..         ...       ...        ...         ...         ...  ...        ...   \n395  76.869437 -0.201055 -89.948746  201.180450  111.724190  ... -27.043941   \n396  58.420684 -0.957699  -7.415961  210.492462  125.453690  ... -37.584858   \n397  65.635619 -0.898026 -58.824409  175.201355   99.288261  ... -29.620445   \n398  52.444200 -1.705641   0.000000  187.042740   96.440872  ... -26.967848   \n399  54.045627 -0.863093 -32.930653  191.735382   93.971237  ... -21.929403   \n\n        38_max   38_mean     38_std   38_skew     39_min     39_max   39_mean  \\\n0    47.308060 -3.713503  16.553984  0.230691 -46.794479  49.352516 -2.282116   \n1    29.811110  0.484271   8.660648 -0.479016 -28.989983  27.533710  0.952658   \n2    27.610388 -0.333233   8.185075  0.208425 -38.095375  31.397881 -1.494916   \n3    31.500881 -3.781627   9.191043  0.260886 -22.667440  50.992897  1.600777   \n4    28.490644 -6.242015  10.546545  0.341848 -25.040888  46.878204  1.844494   \n..         ...       ...        ...       ...        ...        ...       ...   \n395  22.451445 -7.234633   8.471853  0.753855 -24.712723  23.410387 -4.502398   \n396  28.087936 -9.704238   8.447620  0.112760 -38.147888  21.814402 -8.249507   \n397  26.325895 -5.722826   7.727378  0.207489 -29.497524  25.410654 -3.356615   \n398   8.714737 -9.511492   5.551820 -0.025604 -23.020084  13.948638 -2.664985   \n399  17.050608 -5.296690   5.894963  0.390705 -20.983192  29.312023 -0.321836   \n\n        39_std   39_skew  \n0    15.285639  0.171462  \n1    10.477735 -0.185771  \n2    10.917299  0.020984  \n3    10.125545  0.595763  \n4    11.160392  0.503120  \n..         ...       ...  \n395   6.687984  0.238807  \n396   7.807756  0.071968  \n397   8.170526  0.160330  \n398   5.051498 -0.258407  \n399   6.571660  0.384794  \n\n[400 rows x 202 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>label</th>\n      <th>0_min</th>\n      <th>0_max</th>\n      <th>0_mean</th>\n      <th>0_std</th>\n      <th>0_skew</th>\n      <th>1_min</th>\n      <th>1_max</th>\n      <th>1_mean</th>\n      <th>...</th>\n      <th>38_min</th>\n      <th>38_max</th>\n      <th>38_mean</th>\n      <th>38_std</th>\n      <th>38_skew</th>\n      <th>39_min</th>\n      <th>39_max</th>\n      <th>39_mean</th>\n      <th>39_std</th>\n      <th>39_skew</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>classical_1.mp3</td>\n      <td>classical</td>\n      <td>-530.784363</td>\n      <td>-163.308350</td>\n      <td>-302.203156</td>\n      <td>51.142183</td>\n      <td>-0.468374</td>\n      <td>0.000000</td>\n      <td>178.751617</td>\n      <td>111.332344</td>\n      <td>...</td>\n      <td>-44.098068</td>\n      <td>47.308060</td>\n      <td>-3.713503</td>\n      <td>16.553984</td>\n      <td>0.230691</td>\n      <td>-46.794479</td>\n      <td>49.352516</td>\n      <td>-2.282116</td>\n      <td>15.285639</td>\n      <td>0.171462</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>classical_10.mp3</td>\n      <td>classical</td>\n      <td>-562.857849</td>\n      <td>-96.164795</td>\n      <td>-219.259018</td>\n      <td>53.561838</td>\n      <td>-0.772320</td>\n      <td>0.029056</td>\n      <td>259.632690</td>\n      <td>215.094193</td>\n      <td>...</td>\n      <td>-27.458416</td>\n      <td>29.811110</td>\n      <td>0.484271</td>\n      <td>8.660648</td>\n      <td>-0.479016</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    </tr>\n    <tr>\n      <th>2</th>\n      <td>classical_100.mp3</td>\n      <td>classical</td>\n      <td>-536.237366</td>\n      <td>-61.608826</td>\n      <td>-177.804108</td>\n      <td>83.381622</td>\n      <td>-2.587179</td>\n      <td>0.000000</td>\n      <td>190.475891</td>\n      <td>112.471710</td>\n      <td>...</td>\n      <td>-27.335688</td>\n      <td>27.610388</td>\n      <td>-0.333233</td>\n      <td>8.185075</td>\n      <td>0.208425</td>\n      <td>-38.095375</td>\n      <td>31.397881</td>\n      <td>-1.494916</td>\n      <td>10.917299</td>\n      <td>0.020984</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>classical_11.mp3</td>\n      <td>classical</td>\n      <td>-536.457458</td>\n      <td>-120.429665</td>\n      <td>-222.126312</td>\n      <td>76.246992</td>\n      <td>-2.402419</td>\n      <td>0.000000</td>\n      <td>159.425751</td>\n      <td>99.853645</td>\n      <td>...</td>\n      <td>-31.774948</td>\n      <td>31.500881</td>\n      <td>-3.781627</td>\n      <td>9.191043</td>\n      <td>0.260886</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    </tr>\n    <tr>\n      <th>4</th>\n      <td>classical_12.mp3</td>\n      <td>classical</td>\n      <td>-562.675232</td>\n      <td>-148.133560</td>\n      <td>-270.975403</td>\n      <td>52.191182</td>\n      <td>-0.366587</td>\n      <td>0.000000</td>\n      <td>194.264160</td>\n      <td>148.226654</td>\n      <td>...</td>\n      <td>-44.843811</td>\n      <td>28.490644</td>\n      <td>-6.242015</td>\n      <td>10.546545</td>\n      <td>0.341848</td>\n      <td>-25.040888</td>\n      <td>46.878204</td>\n      <td>1.844494</td>\n      <td>11.160392</td>\n      <td>0.503120</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>395</th>\n      <td>rock_95.mp3</td>\n      <td>rock</td>\n      <td>-553.110107</td>\n      <td>-5.218835</td>\n      <td>-193.506042</td>\n      <td>76.869437</td>\n      <td>-0.201055</td>\n      <td>-89.948746</td>\n      <td>201.180450</td>\n      <td>111.724190</td>\n      <td>...</td>\n      <td>-27.043941</td>\n      <td>22.451445</td>\n      <td>-7.234633</td>\n      <td>8.471853</td>\n      <td>0.753855</td>\n      <td>-24.712723</td>\n      <td>23.410387</td>\n      <td>-4.502398</td>\n      <td>6.687984</td>\n      <td>0.238807</td>\n    </tr>\n    <tr>\n      <th>396</th>\n      <td>rock_96.mp3</td>\n      <td>rock</td>\n      <td>-541.236023</td>\n      <td>27.163334</td>\n      <td>-119.113991</td>\n      <td>58.420684</td>\n      <td>-0.957699</td>\n      <td>-7.415961</td>\n      <td>210.492462</td>\n      <td>125.453690</td>\n      <td>...</td>\n      <td>-37.584858</td>\n      <td>28.087936</td>\n      <td>-9.704238</td>\n      <td>8.447620</td>\n      <td>0.112760</td>\n      <td>-38.147888</td>\n      <td>21.814402</td>\n      <td>-8.249507</td>\n      <td>7.807756</td>\n      <td>0.071968</td>\n    </tr>\n    <tr>\n      <th>397</th>\n      <td>rock_97.mp3</td>\n      <td>rock</td>\n      <td>-518.494995</td>\n      <td>58.526745</td>\n      <td>-66.267746</td>\n      <td>65.635619</td>\n      <td>-0.898026</td>\n      <td>-58.824409</td>\n      <td>175.201355</td>\n      <td>99.288261</td>\n      <td>...</td>\n      <td>-29.620445</td>\n      <td>26.325895</td>\n      <td>-5.722826</td>\n      <td>7.727378</td>\n      <td>0.207489</td>\n      <td>-29.497524</td>\n      <td>25.410654</td>\n      <td>-3.356615</td>\n      <td>8.170526</td>\n      <td>0.160330</td>\n    </tr>\n    <tr>\n      <th>398</th>\n      <td>rock_98.mp3</td>\n      <td>rock</td>\n      <td>-518.643066</td>\n      <td>53.555115</td>\n      <td>-45.734516</td>\n      <td>52.444200</td>\n      <td>-1.705641</td>\n      <td>0.000000</td>\n      <td>187.042740</td>\n      <td>96.440872</td>\n      <td>...</td>\n      <td>-26.967848</td>\n      <td>8.714737</td>\n      <td>-9.511492</td>\n      <td>5.551820</td>\n      <td>-0.025604</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    </tr>\n    <tr>\n      <th>399</th>\n      <td>rock_99.mp3</td>\n      <td>rock</td>\n      <td>-544.703125</td>\n      <td>75.612129</td>\n      <td>-49.380943</td>\n      <td>54.045627</td>\n      <td>-0.863093</td>\n      <td>-32.930653</td>\n      <td>191.735382</td>\n      <td>93.971237</td>\n      <td>...</td>\n      <td>-21.929403</td>\n      <td>17.050608</td>\n      <td>-5.296690</td>\n      <td>5.894963</td>\n      <td>0.390705</td>\n      <td>-20.983192</td>\n      <td>29.312023</td>\n      <td>-0.321836</td>\n      <td>6.571660</td>\n      <td>0.384794</td>\n    </tr>\n  </tbody>\n</table>\n<p>400 rows × 202 columns</p>\n</div>"
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "meta_columns = [\"sample\", \"filename\", \"label\"]\n",
+    "mfcc_aggregated = raw_features \\\n",
+    "    .drop(meta_columns, axis=1, errors='ignore') \\\n",
+    "    .groupby(raw_features.filename).agg(['min', 'max', 'mean', 'std', 'skew'])\n",
+    "\n",
+    "mfcc_meta = pd.DataFrame(raw_features['label'].groupby(raw_features.filename).last())\n",
+    "mfcc_meta.columns = pd.MultiIndex.from_arrays([['label'], ['']])    # needed for merge\n",
+    "mfcc_merged = pd.merge(mfcc_meta, mfcc_aggregated, left_index=True, right_index=True)\n",
+    "\n",
+    "# reduce multi index to single index\n",
+    "one_level_cols = ['_'.join([str(el) for el in col]) for col in mfcc_merged.columns[1:]]\n",
+    "one_level_cols.insert(0, \"label\")\n",
+    "\n",
+    "mfcc_merged.columns = pd.Index(one_level_cols)\n",
+    "mfcc_merged = mfcc_merged.reset_index()\n",
+    "mfcc_merged"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:52.624562481Z",
+     "start_time": "2023-09-06T16:33:40.167149213Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 4. Split the Features into Train and Test Set"
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "              filename  train\n0      classical_1.mp3   True\n1     classical_10.mp3  False\n2    classical_100.mp3  False\n3     classical_11.mp3  False\n4     classical_12.mp3   True\n..                 ...    ...\n395        rock_95.mp3   True\n396        rock_96.mp3   True\n397        rock_97.mp3   True\n398        rock_98.mp3   True\n399        rock_99.mp3   True\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>False</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>classical_100.mp3</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>classical_11.mp3</td>\n      <td>False</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>True</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>True</td>\n    </tr>\n  </tbody>\n</table>\n<p>400 rows × 2 columns</p>\n</div>"
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "features = mfcc_merged\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 = pd.concat([split_true, split_false]) \\\n",
+    "    .sort_values(\"filename\") \\\n",
+    "    .reset_index(drop=True)\n",
+    "split"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:52.625265280Z",
+     "start_time": "2023-09-06T16:33:52.600299846Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 5: Machine Learning model training and evaluation"
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "                       label       0_min       0_max      0_mean      0_std  \\\nfilename                                                                      \nclassical_1.mp3    classical -530.784363 -163.308350 -302.203156  51.142183   \nclassical_10.mp3   classical -562.857849  -96.164795 -219.259018  53.561838   \nclassical_100.mp3  classical -536.237366  -61.608826 -177.804108  83.381622   \nclassical_11.mp3   classical -536.457458 -120.429665 -222.126312  76.246992   \nclassical_12.mp3   classical -562.675232 -148.133560 -270.975403  52.191182   \n...                      ...         ...         ...         ...        ...   \nrock_95.mp3             rock -553.110107   -5.218835 -193.506042  76.869437   \nrock_96.mp3             rock -541.236023   27.163334 -119.113991  58.420684   \nrock_97.mp3             rock -518.494995   58.526745  -66.267746  65.635619   \nrock_98.mp3             rock -518.643066   53.555115  -45.734516  52.444200   \nrock_99.mp3             rock -544.703125   75.612129  -49.380943  54.045627   \n\n                     0_skew      1_min       1_max      1_mean      1_std  \\\nfilename                                                                    \nclassical_1.mp3   -0.468374   0.000000  178.751617  111.332344  24.847563   \nclassical_10.mp3  -0.772320   0.029056  259.632690  215.094193  18.388131   \nclassical_100.mp3 -2.587179   0.000000  190.475891  112.471710  27.277553   \nclassical_11.mp3  -2.402419   0.000000  159.425751   99.853645  21.916949   \nclassical_12.mp3  -0.366587   0.000000  194.264160  148.226654  19.305008   \n...                     ...        ...         ...         ...        ...   \nrock_95.mp3       -0.201055 -89.948746  201.180450  111.724190  36.463584   \nrock_96.mp3       -0.957699  -7.415961  210.492462  125.453690  31.908869   \nrock_97.mp3       -0.898026 -58.824409  175.201355   99.288261  25.158417   \nrock_98.mp3       -1.705641   0.000000  187.042740   96.440872  24.137702   \nrock_99.mp3       -0.863093 -32.930653  191.735382   93.971237  33.410220   \n\n                   ...     38_max   38_mean     38_std   38_skew     39_min  \\\nfilename           ...                                                        \nclassical_1.mp3    ...  47.308060 -3.713503  16.553984  0.230691 -46.794479   \nclassical_10.mp3   ...  29.811110  0.484271   8.660648 -0.479016 -28.989983   \nclassical_100.mp3  ...  27.610388 -0.333233   8.185075  0.208425 -38.095375   \nclassical_11.mp3   ...  31.500881 -3.781627   9.191043  0.260886 -22.667440   \nclassical_12.mp3   ...  28.490644 -6.242015  10.546545  0.341848 -25.040888   \n...                ...        ...       ...        ...       ...        ...   \nrock_95.mp3        ...  22.451445 -7.234633   8.471853  0.753855 -24.712723   \nrock_96.mp3        ...  28.087936 -9.704238   8.447620  0.112760 -38.147888   \nrock_97.mp3        ...  26.325895 -5.722826   7.727378  0.207489 -29.497524   \nrock_98.mp3        ...   8.714737 -9.511492   5.551820 -0.025604 -23.020084   \nrock_99.mp3        ...  17.050608 -5.296690   5.894963  0.390705 -20.983192   \n\n                      39_max   39_mean     39_std   39_skew  train  \nfilename                                                            \nclassical_1.mp3    49.352516 -2.282116  15.285639  0.171462   True  \nclassical_10.mp3   27.533710  0.952658  10.477735 -0.185771  False  \nclassical_100.mp3  31.397881 -1.494916  10.917299  0.020984  False  \nclassical_11.mp3   50.992897  1.600777  10.125545  0.595763  False  \nclassical_12.mp3   46.878204  1.844494  11.160392  0.503120   True  \n...                      ...       ...        ...       ...    ...  \nrock_95.mp3        23.410387 -4.502398   6.687984  0.238807   True  \nrock_96.mp3        21.814402 -8.249507   7.807756  0.071968   True  \nrock_97.mp3        25.410654 -3.356615   8.170526  0.160330   True  \nrock_98.mp3        13.948638 -2.664985   5.051498 -0.258407   True  \nrock_99.mp3        29.312023 -0.321836   6.571660  0.384794   True  \n\n[400 rows x 202 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>label</th>\n      <th>0_min</th>\n      <th>0_max</th>\n      <th>0_mean</th>\n      <th>0_std</th>\n      <th>0_skew</th>\n      <th>1_min</th>\n      <th>1_max</th>\n      <th>1_mean</th>\n      <th>1_std</th>\n      <th>...</th>\n      <th>38_max</th>\n      <th>38_mean</th>\n      <th>38_std</th>\n      <th>38_skew</th>\n      <th>39_min</th>\n      <th>39_max</th>\n      <th>39_mean</th>\n      <th>39_std</th>\n      <th>39_skew</th>\n      <th>train</th>\n    </tr>\n    <tr>\n      <th>filename</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>classical_1.mp3</th>\n      <td>classical</td>\n      <td>-530.784363</td>\n      <td>-163.308350</td>\n      <td>-302.203156</td>\n      <td>51.142183</td>\n      <td>-0.468374</td>\n      <td>0.000000</td>\n      <td>178.751617</td>\n      <td>111.332344</td>\n      <td>24.847563</td>\n      <td>...</td>\n      <td>47.308060</td>\n      <td>-3.713503</td>\n      <td>16.553984</td>\n      <td>0.230691</td>\n      <td>-46.794479</td>\n      <td>49.352516</td>\n      <td>-2.282116</td>\n      <td>15.285639</td>\n      <td>0.171462</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>classical_10.mp3</th>\n      <td>classical</td>\n      <td>-562.857849</td>\n      <td>-96.164795</td>\n      <td>-219.259018</td>\n      <td>53.561838</td>\n      <td>-0.772320</td>\n      <td>0.029056</td>\n      <td>259.632690</td>\n      <td>215.094193</td>\n      <td>18.388131</td>\n      <td>...</td>\n      <td>29.811110</td>\n      <td>0.484271</td>\n      <td>8.660648</td>\n      <td>-0.479016</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      <td>False</td>\n    </tr>\n    <tr>\n      <th>classical_100.mp3</th>\n      <td>classical</td>\n      <td>-536.237366</td>\n      <td>-61.608826</td>\n      <td>-177.804108</td>\n      <td>83.381622</td>\n      <td>-2.587179</td>\n      <td>0.000000</td>\n      <td>190.475891</td>\n      <td>112.471710</td>\n      <td>27.277553</td>\n      <td>...</td>\n      <td>27.610388</td>\n      <td>-0.333233</td>\n      <td>8.185075</td>\n      <td>0.208425</td>\n      <td>-38.095375</td>\n      <td>31.397881</td>\n      <td>-1.494916</td>\n      <td>10.917299</td>\n      <td>0.020984</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>classical_11.mp3</th>\n      <td>classical</td>\n      <td>-536.457458</td>\n      <td>-120.429665</td>\n      <td>-222.126312</td>\n      <td>76.246992</td>\n      <td>-2.402419</td>\n      <td>0.000000</td>\n      <td>159.425751</td>\n      <td>99.853645</td>\n      <td>21.916949</td>\n      <td>...</td>\n      <td>31.500881</td>\n      <td>-3.781627</td>\n      <td>9.191043</td>\n      <td>0.260886</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      <td>False</td>\n    </tr>\n    <tr>\n      <th>classical_12.mp3</th>\n      <td>classical</td>\n      <td>-562.675232</td>\n      <td>-148.133560</td>\n      <td>-270.975403</td>\n      <td>52.191182</td>\n      <td>-0.366587</td>\n      <td>0.000000</td>\n      <td>194.264160</td>\n      <td>148.226654</td>\n      <td>19.305008</td>\n      <td>...</td>\n      <td>28.490644</td>\n      <td>-6.242015</td>\n      <td>10.546545</td>\n      <td>0.341848</td>\n      <td>-25.040888</td>\n      <td>46.878204</td>\n      <td>1.844494</td>\n      <td>11.160392</td>\n      <td>0.503120</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>rock_95.mp3</th>\n      <td>rock</td>\n      <td>-553.110107</td>\n      <td>-5.218835</td>\n      <td>-193.506042</td>\n      <td>76.869437</td>\n      <td>-0.201055</td>\n      <td>-89.948746</td>\n      <td>201.180450</td>\n      <td>111.724190</td>\n      <td>36.463584</td>\n      <td>...</td>\n      <td>22.451445</td>\n      <td>-7.234633</td>\n      <td>8.471853</td>\n      <td>0.753855</td>\n      <td>-24.712723</td>\n      <td>23.410387</td>\n      <td>-4.502398</td>\n      <td>6.687984</td>\n      <td>0.238807</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>rock_96.mp3</th>\n      <td>rock</td>\n      <td>-541.236023</td>\n      <td>27.163334</td>\n      <td>-119.113991</td>\n      <td>58.420684</td>\n      <td>-0.957699</td>\n      <td>-7.415961</td>\n      <td>210.492462</td>\n      <td>125.453690</td>\n      <td>31.908869</td>\n      <td>...</td>\n      <td>28.087936</td>\n      <td>-9.704238</td>\n      <td>8.447620</td>\n      <td>0.112760</td>\n      <td>-38.147888</td>\n      <td>21.814402</td>\n      <td>-8.249507</td>\n      <td>7.807756</td>\n      <td>0.071968</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>rock_97.mp3</th>\n      <td>rock</td>\n      <td>-518.494995</td>\n      <td>58.526745</td>\n      <td>-66.267746</td>\n      <td>65.635619</td>\n      <td>-0.898026</td>\n      <td>-58.824409</td>\n      <td>175.201355</td>\n      <td>99.288261</td>\n      <td>25.158417</td>\n      <td>...</td>\n      <td>26.325895</td>\n      <td>-5.722826</td>\n      <td>7.727378</td>\n      <td>0.207489</td>\n      <td>-29.497524</td>\n      <td>25.410654</td>\n      <td>-3.356615</td>\n      <td>8.170526</td>\n      <td>0.160330</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>rock_98.mp3</th>\n      <td>rock</td>\n      <td>-518.643066</td>\n      <td>53.555115</td>\n      <td>-45.734516</td>\n      <td>52.444200</td>\n      <td>-1.705641</td>\n      <td>0.000000</td>\n      <td>187.042740</td>\n      <td>96.440872</td>\n      <td>24.137702</td>\n      <td>...</td>\n      <td>8.714737</td>\n      <td>-9.511492</td>\n      <td>5.551820</td>\n      <td>-0.025604</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      <td>True</td>\n    </tr>\n    <tr>\n      <th>rock_99.mp3</th>\n      <td>rock</td>\n      <td>-544.703125</td>\n      <td>75.612129</td>\n      <td>-49.380943</td>\n      <td>54.045627</td>\n      <td>-0.863093</td>\n      <td>-32.930653</td>\n      <td>191.735382</td>\n      <td>93.971237</td>\n      <td>33.410220</td>\n      <td>...</td>\n      <td>17.050608</td>\n      <td>-5.296690</td>\n      <td>5.894963</td>\n      <td>0.390705</td>\n      <td>-20.983192</td>\n      <td>29.312023</td>\n      <td>-0.321836</td>\n      <td>6.571660</td>\n      <td>0.384794</td>\n      <td>True</td>\n    </tr>\n  </tbody>\n</table>\n<p>400 rows × 202 columns</p>\n</div>"
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "joined = pd.merge(features, split, on=\"filename\").set_index(\"filename\")\n",
+    "joined"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:52.968965270Z",
+     "start_time": "2023-09-06T16:33:52.652167547Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "                      label       0_min       0_max      0_mean      0_std  \\\nfilename                                                                     \nclassical_1.mp3   classical -530.784363 -163.308350 -302.203156  51.142183   \nclassical_12.mp3  classical -562.675232 -148.133560 -270.975403  52.191182   \nclassical_13.mp3  classical -637.720642 -177.713959 -361.834045  71.310080   \nclassical_14.mp3  classical -531.049438 -100.790543 -188.970749  58.287371   \nclassical_15.mp3  classical -555.129944  -96.139236 -209.245819  45.350121   \n...                     ...         ...         ...         ...        ...   \nrock_95.mp3            rock -553.110107   -5.218835 -193.506042  76.869437   \nrock_96.mp3            rock -541.236023   27.163334 -119.113991  58.420684   \nrock_97.mp3            rock -518.494995   58.526745  -66.267746  65.635619   \nrock_98.mp3            rock -518.643066   53.555115  -45.734516  52.444200   \nrock_99.mp3            rock -544.703125   75.612129  -49.380943  54.045627   \n\n                    0_skew      1_min       1_max      1_mean      1_std  ...  \\\nfilename                                                                  ...   \nclassical_1.mp3  -0.468374   0.000000  178.751617  111.332344  24.847563  ...   \nclassical_12.mp3 -0.366587   0.000000  194.264160  148.226654  19.305008  ...   \nclassical_13.mp3  0.008326   0.000000  257.162842  211.556549  20.347035  ...   \nclassical_14.mp3 -3.246618   0.000000  157.947922   86.563927  17.911136  ...   \nclassical_15.mp3 -3.574710   0.000000  140.918640  109.309990  14.171102  ...   \n...                    ...        ...         ...         ...        ...  ...   \nrock_95.mp3      -0.201055 -89.948746  201.180450  111.724190  36.463584  ...   \nrock_96.mp3      -0.957699  -7.415961  210.492462  125.453690  31.908869  ...   \nrock_97.mp3      -0.898026 -58.824409  175.201355   99.288261  25.158417  ...   \nrock_98.mp3      -1.705641   0.000000  187.042740   96.440872  24.137702  ...   \nrock_99.mp3      -0.863093 -32.930653  191.735382   93.971237  33.410220  ...   \n\n                     38_min     38_max   38_mean     38_std   38_skew  \\\nfilename                                                                \nclassical_1.mp3  -44.098068  47.308060 -3.713503  16.553984  0.230691   \nclassical_12.mp3 -44.843811  28.490644 -6.242015  10.546545  0.341848   \nclassical_13.mp3 -24.728806  18.424036 -0.275737   7.026148 -0.640964   \nclassical_14.mp3 -36.261154  38.335831 -5.770759  12.254058  0.805707   \nclassical_15.mp3 -42.808113  24.146545 -7.260053   9.862490  0.097765   \n...                     ...        ...       ...        ...       ...   \nrock_95.mp3      -27.043941  22.451445 -7.234633   8.471853  0.753855   \nrock_96.mp3      -37.584858  28.087936 -9.704238   8.447620  0.112760   \nrock_97.mp3      -29.620445  26.325895 -5.722826   7.727378  0.207489   \nrock_98.mp3      -26.967848   8.714737 -9.511492   5.551820 -0.025604   \nrock_99.mp3      -21.929403  17.050608 -5.296690   5.894963  0.390705   \n\n                     39_min     39_max   39_mean     39_std   39_skew  \nfilename                                                               \nclassical_1.mp3  -46.794479  49.352516 -2.282116  15.285639  0.171462  \nclassical_12.mp3 -25.040888  46.878204  1.844494  11.160392  0.503120  \nclassical_13.mp3 -24.319565  18.439262 -2.147022   8.171929  0.009566  \nclassical_14.mp3 -40.597336  32.816467 -0.543406  11.467829 -0.187037  \nclassical_15.mp3 -31.394997  35.685539 -0.949139  11.141700  0.249278  \n...                     ...        ...       ...        ...       ...  \nrock_95.mp3      -24.712723  23.410387 -4.502398   6.687984  0.238807  \nrock_96.mp3      -38.147888  21.814402 -8.249507   7.807756  0.071968  \nrock_97.mp3      -29.497524  25.410654 -3.356615   8.170526  0.160330  \nrock_98.mp3      -23.020084  13.948638 -2.664985   5.051498 -0.258407  \nrock_99.mp3      -20.983192  29.312023 -0.321836   6.571660  0.384794  \n\n[320 rows x 201 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>label</th>\n      <th>0_min</th>\n      <th>0_max</th>\n      <th>0_mean</th>\n      <th>0_std</th>\n      <th>0_skew</th>\n      <th>1_min</th>\n      <th>1_max</th>\n      <th>1_mean</th>\n      <th>1_std</th>\n      <th>...</th>\n      <th>38_min</th>\n      <th>38_max</th>\n      <th>38_mean</th>\n      <th>38_std</th>\n      <th>38_skew</th>\n      <th>39_min</th>\n      <th>39_max</th>\n      <th>39_mean</th>\n      <th>39_std</th>\n      <th>39_skew</th>\n    </tr>\n    <tr>\n      <th>filename</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>classical_1.mp3</th>\n      <td>classical</td>\n      <td>-530.784363</td>\n      <td>-163.308350</td>\n      <td>-302.203156</td>\n      <td>51.142183</td>\n      <td>-0.468374</td>\n      <td>0.000000</td>\n      <td>178.751617</td>\n      <td>111.332344</td>\n      <td>24.847563</td>\n      <td>...</td>\n      <td>-44.098068</td>\n      <td>47.308060</td>\n      <td>-3.713503</td>\n      <td>16.553984</td>\n      <td>0.230691</td>\n      <td>-46.794479</td>\n      <td>49.352516</td>\n      <td>-2.282116</td>\n      <td>15.285639</td>\n      <td>0.171462</td>\n    </tr>\n    <tr>\n      <th>classical_12.mp3</th>\n      <td>classical</td>\n      <td>-562.675232</td>\n      <td>-148.133560</td>\n      <td>-270.975403</td>\n      <td>52.191182</td>\n      <td>-0.366587</td>\n      <td>0.000000</td>\n      <td>194.264160</td>\n      <td>148.226654</td>\n      <td>19.305008</td>\n      <td>...</td>\n      <td>-44.843811</td>\n      <td>28.490644</td>\n      <td>-6.242015</td>\n      <td>10.546545</td>\n      <td>0.341848</td>\n      <td>-25.040888</td>\n      <td>46.878204</td>\n      <td>1.844494</td>\n      <td>11.160392</td>\n      <td>0.503120</td>\n    </tr>\n    <tr>\n      <th>classical_13.mp3</th>\n      <td>classical</td>\n      <td>-637.720642</td>\n      <td>-177.713959</td>\n      <td>-361.834045</td>\n      <td>71.310080</td>\n      <td>0.008326</td>\n      <td>0.000000</td>\n      <td>257.162842</td>\n      <td>211.556549</td>\n      <td>20.347035</td>\n      <td>...</td>\n      <td>-24.728806</td>\n      <td>18.424036</td>\n      <td>-0.275737</td>\n      <td>7.026148</td>\n      <td>-0.640964</td>\n      <td>-24.319565</td>\n      <td>18.439262</td>\n      <td>-2.147022</td>\n      <td>8.171929</td>\n      <td>0.009566</td>\n    </tr>\n    <tr>\n      <th>classical_14.mp3</th>\n      <td>classical</td>\n      <td>-531.049438</td>\n      <td>-100.790543</td>\n      <td>-188.970749</td>\n      <td>58.287371</td>\n      <td>-3.246618</td>\n      <td>0.000000</td>\n      <td>157.947922</td>\n      <td>86.563927</td>\n      <td>17.911136</td>\n      <td>...</td>\n      <td>-36.261154</td>\n      <td>38.335831</td>\n      <td>-5.770759</td>\n      <td>12.254058</td>\n      <td>0.805707</td>\n      <td>-40.597336</td>\n      <td>32.816467</td>\n      <td>-0.543406</td>\n      <td>11.467829</td>\n      <td>-0.187037</td>\n    </tr>\n    <tr>\n      <th>classical_15.mp3</th>\n      <td>classical</td>\n      <td>-555.129944</td>\n      <td>-96.139236</td>\n      <td>-209.245819</td>\n      <td>45.350121</td>\n      <td>-3.574710</td>\n      <td>0.000000</td>\n      <td>140.918640</td>\n      <td>109.309990</td>\n      <td>14.171102</td>\n      <td>...</td>\n      <td>-42.808113</td>\n      <td>24.146545</td>\n      <td>-7.260053</td>\n      <td>9.862490</td>\n      <td>0.097765</td>\n      <td>-31.394997</td>\n      <td>35.685539</td>\n      <td>-0.949139</td>\n      <td>11.141700</td>\n      <td>0.249278</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>rock_95.mp3</th>\n      <td>rock</td>\n      <td>-553.110107</td>\n      <td>-5.218835</td>\n      <td>-193.506042</td>\n      <td>76.869437</td>\n      <td>-0.201055</td>\n      <td>-89.948746</td>\n      <td>201.180450</td>\n      <td>111.724190</td>\n      <td>36.463584</td>\n      <td>...</td>\n      <td>-27.043941</td>\n      <td>22.451445</td>\n      <td>-7.234633</td>\n      <td>8.471853</td>\n      <td>0.753855</td>\n      <td>-24.712723</td>\n      <td>23.410387</td>\n      <td>-4.502398</td>\n      <td>6.687984</td>\n      <td>0.238807</td>\n    </tr>\n    <tr>\n      <th>rock_96.mp3</th>\n      <td>rock</td>\n      <td>-541.236023</td>\n      <td>27.163334</td>\n      <td>-119.113991</td>\n      <td>58.420684</td>\n      <td>-0.957699</td>\n      <td>-7.415961</td>\n      <td>210.492462</td>\n      <td>125.453690</td>\n      <td>31.908869</td>\n      <td>...</td>\n      <td>-37.584858</td>\n      <td>28.087936</td>\n      <td>-9.704238</td>\n      <td>8.447620</td>\n      <td>0.112760</td>\n      <td>-38.147888</td>\n      <td>21.814402</td>\n      <td>-8.249507</td>\n      <td>7.807756</td>\n      <td>0.071968</td>\n    </tr>\n    <tr>\n      <th>rock_97.mp3</th>\n      <td>rock</td>\n      <td>-518.494995</td>\n      <td>58.526745</td>\n      <td>-66.267746</td>\n      <td>65.635619</td>\n      <td>-0.898026</td>\n      <td>-58.824409</td>\n      <td>175.201355</td>\n      <td>99.288261</td>\n      <td>25.158417</td>\n      <td>...</td>\n      <td>-29.620445</td>\n      <td>26.325895</td>\n      <td>-5.722826</td>\n      <td>7.727378</td>\n      <td>0.207489</td>\n      <td>-29.497524</td>\n      <td>25.410654</td>\n      <td>-3.356615</td>\n      <td>8.170526</td>\n      <td>0.160330</td>\n    </tr>\n    <tr>\n      <th>rock_98.mp3</th>\n      <td>rock</td>\n      <td>-518.643066</td>\n      <td>53.555115</td>\n      <td>-45.734516</td>\n      <td>52.444200</td>\n      <td>-1.705641</td>\n      <td>0.000000</td>\n      <td>187.042740</td>\n      <td>96.440872</td>\n      <td>24.137702</td>\n      <td>...</td>\n      <td>-26.967848</td>\n      <td>8.714737</td>\n      <td>-9.511492</td>\n      <td>5.551820</td>\n      <td>-0.025604</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    </tr>\n    <tr>\n      <th>rock_99.mp3</th>\n      <td>rock</td>\n      <td>-544.703125</td>\n      <td>75.612129</td>\n      <td>-49.380943</td>\n      <td>54.045627</td>\n      <td>-0.863093</td>\n      <td>-32.930653</td>\n      <td>191.735382</td>\n      <td>93.971237</td>\n      <td>33.410220</td>\n      <td>...</td>\n      <td>-21.929403</td>\n      <td>17.050608</td>\n      <td>-5.296690</td>\n      <td>5.894963</td>\n      <td>0.390705</td>\n      <td>-20.983192</td>\n      <td>29.312023</td>\n      <td>-0.321836</td>\n      <td>6.571660</td>\n      <td>0.384794</td>\n    </tr>\n  </tbody>\n</table>\n<p>320 rows × 201 columns</p>\n</div>"
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "train: DataFrame = joined[joined[\"train\"] == True].drop(\"train\", axis=1)\n",
+    "train"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:53.010226965Z",
+     "start_time": "2023-09-06T16:33:52.744721352Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "                       label       0_min       0_max      0_mean      0_std  \\\nfilename                                                                      \nclassical_10.mp3   classical -562.857849  -96.164795 -219.259018  53.561838   \nclassical_100.mp3  classical -536.237366  -61.608826 -177.804108  83.381622   \nclassical_11.mp3   classical -536.457458 -120.429665 -222.126312  76.246992   \nclassical_19.mp3   classical -543.642334 -106.038223 -216.909943  61.317534   \nclassical_20.mp3   classical -605.991516 -161.119308 -263.483093  49.157298   \n...                      ...         ...         ...         ...        ...   \nrock_57.mp3             rock -543.735168   50.739136  -70.208893  83.040454   \nrock_66.mp3             rock -520.185791   21.333998  -79.359444  44.616105   \nrock_75.mp3             rock -519.826965   54.035805  -32.218468  33.789999   \nrock_81.mp3             rock -532.139099   52.119076 -117.146126  76.883343   \nrock_90.mp3             rock -501.955994    9.573563 -137.388382  46.025847   \n\n                     0_skew      1_min       1_max      1_mean      1_std  \\\nfilename                                                                    \nclassical_10.mp3  -0.772320   0.029056  259.632690  215.094193  18.388131   \nclassical_100.mp3 -2.587179   0.000000  190.475891  112.471710  27.277553   \nclassical_11.mp3  -2.402419   0.000000  159.425751   99.853645  21.916949   \nclassical_19.mp3  -3.473125   0.000000  151.947662   93.405411  22.029233   \nclassical_20.mp3  -0.856221   0.000000  191.926758  141.393814  17.754779   \n...                     ...        ...         ...         ...        ...   \nrock_57.mp3       -2.913490 -51.877323  177.711395   89.957848  29.532071   \nrock_66.mp3       -2.708660   0.000000  162.490845  115.182426  18.106840   \nrock_75.mp3       -1.231267   1.666233  164.635895   93.935715  21.886208   \nrock_81.mp3       -0.656551 -44.119019  168.675858  101.038620  31.198018   \nrock_90.mp3       -0.004000  -7.494962  190.229202  112.531166  33.245804   \n\n                   ...     38_min     38_max   38_mean    38_std   38_skew  \\\nfilename           ...                                                       \nclassical_10.mp3   ... -27.458416  29.811110  0.484271  8.660648 -0.479016   \nclassical_100.mp3  ... -27.335688  27.610388 -0.333233  8.185075  0.208425   \nclassical_11.mp3   ... -31.774948  31.500881 -3.781627  9.191043  0.260886   \nclassical_19.mp3   ... -27.029385  30.682745  3.342259  8.420860  0.043171   \nclassical_20.mp3   ... -24.911243  38.551231 -2.274261  9.671005  0.719436   \n...                ...        ...        ...       ...       ...       ...   \nrock_57.mp3        ... -30.258139   9.919489 -6.048107  5.045001 -0.187751   \nrock_66.mp3        ... -23.582970  16.230869 -4.445108  6.836216 -0.005944   \nrock_75.mp3        ... -29.449886   9.328630 -7.874899  6.538823 -0.428034   \nrock_81.mp3        ... -36.623711  23.897625 -3.552371  9.184054 -0.304160   \nrock_90.mp3        ... -23.657921  24.251360 -4.784957  6.215656  0.480860   \n\n                      39_min     39_max   39_mean     39_std   39_skew  \nfilename                                                                \nclassical_10.mp3  -28.989983  27.533710  0.952658  10.477735 -0.185771  \nclassical_100.mp3 -38.095375  31.397881 -1.494916  10.917299  0.020984  \nclassical_11.mp3  -22.667440  50.992897  1.600777  10.125545  0.595763  \nclassical_19.mp3  -25.900257  36.766388  2.389575  10.099726  0.140336  \nclassical_20.mp3  -30.311798  29.272329  0.289613   9.590299 -0.244191  \n...                      ...        ...       ...        ...       ...  \nrock_57.mp3       -19.538643  21.089222 -1.995280   5.352349  0.480205  \nrock_66.mp3       -16.087088  22.686642  2.065789   6.279558  0.069703  \nrock_75.mp3       -21.944729  18.833591 -2.557417   5.737269 -0.007298  \nrock_81.mp3       -34.576202  36.869560 -1.597456  10.409478  0.058469  \nrock_90.mp3       -21.904373  18.819710 -1.302765   5.389064 -0.064191  \n\n[80 rows x 201 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>label</th>\n      <th>0_min</th>\n      <th>0_max</th>\n      <th>0_mean</th>\n      <th>0_std</th>\n      <th>0_skew</th>\n      <th>1_min</th>\n      <th>1_max</th>\n      <th>1_mean</th>\n      <th>1_std</th>\n      <th>...</th>\n      <th>38_min</th>\n      <th>38_max</th>\n      <th>38_mean</th>\n      <th>38_std</th>\n      <th>38_skew</th>\n      <th>39_min</th>\n      <th>39_max</th>\n      <th>39_mean</th>\n      <th>39_std</th>\n      <th>39_skew</th>\n    </tr>\n    <tr>\n      <th>filename</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>classical_10.mp3</th>\n      <td>classical</td>\n      <td>-562.857849</td>\n      <td>-96.164795</td>\n      <td>-219.259018</td>\n      <td>53.561838</td>\n      <td>-0.772320</td>\n      <td>0.029056</td>\n      <td>259.632690</td>\n      <td>215.094193</td>\n      <td>18.388131</td>\n      <td>...</td>\n      <td>-27.458416</td>\n      <td>29.811110</td>\n      <td>0.484271</td>\n      <td>8.660648</td>\n      <td>-0.479016</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    </tr>\n    <tr>\n      <th>classical_100.mp3</th>\n      <td>classical</td>\n      <td>-536.237366</td>\n      <td>-61.608826</td>\n      <td>-177.804108</td>\n      <td>83.381622</td>\n      <td>-2.587179</td>\n      <td>0.000000</td>\n      <td>190.475891</td>\n      <td>112.471710</td>\n      <td>27.277553</td>\n      <td>...</td>\n      <td>-27.335688</td>\n      <td>27.610388</td>\n      <td>-0.333233</td>\n      <td>8.185075</td>\n      <td>0.208425</td>\n      <td>-38.095375</td>\n      <td>31.397881</td>\n      <td>-1.494916</td>\n      <td>10.917299</td>\n      <td>0.020984</td>\n    </tr>\n    <tr>\n      <th>classical_11.mp3</th>\n      <td>classical</td>\n      <td>-536.457458</td>\n      <td>-120.429665</td>\n      <td>-222.126312</td>\n      <td>76.246992</td>\n      <td>-2.402419</td>\n      <td>0.000000</td>\n      <td>159.425751</td>\n      <td>99.853645</td>\n      <td>21.916949</td>\n      <td>...</td>\n      <td>-31.774948</td>\n      <td>31.500881</td>\n      <td>-3.781627</td>\n      <td>9.191043</td>\n      <td>0.260886</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    </tr>\n    <tr>\n      <th>classical_19.mp3</th>\n      <td>classical</td>\n      <td>-543.642334</td>\n      <td>-106.038223</td>\n      <td>-216.909943</td>\n      <td>61.317534</td>\n      <td>-3.473125</td>\n      <td>0.000000</td>\n      <td>151.947662</td>\n      <td>93.405411</td>\n      <td>22.029233</td>\n      <td>...</td>\n      <td>-27.029385</td>\n      <td>30.682745</td>\n      <td>3.342259</td>\n      <td>8.420860</td>\n      <td>0.043171</td>\n      <td>-25.900257</td>\n      <td>36.766388</td>\n      <td>2.389575</td>\n      <td>10.099726</td>\n      <td>0.140336</td>\n    </tr>\n    <tr>\n      <th>classical_20.mp3</th>\n      <td>classical</td>\n      <td>-605.991516</td>\n      <td>-161.119308</td>\n      <td>-263.483093</td>\n      <td>49.157298</td>\n      <td>-0.856221</td>\n      <td>0.000000</td>\n      <td>191.926758</td>\n      <td>141.393814</td>\n      <td>17.754779</td>\n      <td>...</td>\n      <td>-24.911243</td>\n      <td>38.551231</td>\n      <td>-2.274261</td>\n      <td>9.671005</td>\n      <td>0.719436</td>\n      <td>-30.311798</td>\n      <td>29.272329</td>\n      <td>0.289613</td>\n      <td>9.590299</td>\n      <td>-0.244191</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>rock_57.mp3</th>\n      <td>rock</td>\n      <td>-543.735168</td>\n      <td>50.739136</td>\n      <td>-70.208893</td>\n      <td>83.040454</td>\n      <td>-2.913490</td>\n      <td>-51.877323</td>\n      <td>177.711395</td>\n      <td>89.957848</td>\n      <td>29.532071</td>\n      <td>...</td>\n      <td>-30.258139</td>\n      <td>9.919489</td>\n      <td>-6.048107</td>\n      <td>5.045001</td>\n      <td>-0.187751</td>\n      <td>-19.538643</td>\n      <td>21.089222</td>\n      <td>-1.995280</td>\n      <td>5.352349</td>\n      <td>0.480205</td>\n    </tr>\n    <tr>\n      <th>rock_66.mp3</th>\n      <td>rock</td>\n      <td>-520.185791</td>\n      <td>21.333998</td>\n      <td>-79.359444</td>\n      <td>44.616105</td>\n      <td>-2.708660</td>\n      <td>0.000000</td>\n      <td>162.490845</td>\n      <td>115.182426</td>\n      <td>18.106840</td>\n      <td>...</td>\n      <td>-23.582970</td>\n      <td>16.230869</td>\n      <td>-4.445108</td>\n      <td>6.836216</td>\n      <td>-0.005944</td>\n      <td>-16.087088</td>\n      <td>22.686642</td>\n      <td>2.065789</td>\n      <td>6.279558</td>\n      <td>0.069703</td>\n    </tr>\n    <tr>\n      <th>rock_75.mp3</th>\n      <td>rock</td>\n      <td>-519.826965</td>\n      <td>54.035805</td>\n      <td>-32.218468</td>\n      <td>33.789999</td>\n      <td>-1.231267</td>\n      <td>1.666233</td>\n      <td>164.635895</td>\n      <td>93.935715</td>\n      <td>21.886208</td>\n      <td>...</td>\n      <td>-29.449886</td>\n      <td>9.328630</td>\n      <td>-7.874899</td>\n      <td>6.538823</td>\n      <td>-0.428034</td>\n      <td>-21.944729</td>\n      <td>18.833591</td>\n      <td>-2.557417</td>\n      <td>5.737269</td>\n      <td>-0.007298</td>\n    </tr>\n    <tr>\n      <th>rock_81.mp3</th>\n      <td>rock</td>\n      <td>-532.139099</td>\n      <td>52.119076</td>\n      <td>-117.146126</td>\n      <td>76.883343</td>\n      <td>-0.656551</td>\n      <td>-44.119019</td>\n      <td>168.675858</td>\n      <td>101.038620</td>\n      <td>31.198018</td>\n      <td>...</td>\n      <td>-36.623711</td>\n      <td>23.897625</td>\n      <td>-3.552371</td>\n      <td>9.184054</td>\n      <td>-0.304160</td>\n      <td>-34.576202</td>\n      <td>36.869560</td>\n      <td>-1.597456</td>\n      <td>10.409478</td>\n      <td>0.058469</td>\n    </tr>\n    <tr>\n      <th>rock_90.mp3</th>\n      <td>rock</td>\n      <td>-501.955994</td>\n      <td>9.573563</td>\n      <td>-137.388382</td>\n      <td>46.025847</td>\n      <td>-0.004000</td>\n      <td>-7.494962</td>\n      <td>190.229202</td>\n      <td>112.531166</td>\n      <td>33.245804</td>\n      <td>...</td>\n      <td>-23.657921</td>\n      <td>24.251360</td>\n      <td>-4.784957</td>\n      <td>6.215656</td>\n      <td>0.480860</td>\n      <td>-21.904373</td>\n      <td>18.819710</td>\n      <td>-1.302765</td>\n      <td>5.389064</td>\n      <td>-0.064191</td>\n    </tr>\n  </tbody>\n</table>\n<p>80 rows × 201 columns</p>\n</div>"
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "test: DataFrame = joined[joined[\"train\"] == False].drop(\"train\", axis=1)\n",
+    "test"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:53.064138270Z",
+     "start_time": "2023-09-06T16:33:52.930093810Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "(                       0_min       0_max      0_mean      0_std    0_skew  \\\n filename                                                                    \n classical_1.mp3  -530.784363 -163.308350 -302.203156  51.142183 -0.468374   \n classical_12.mp3 -562.675232 -148.133560 -270.975403  52.191182 -0.366587   \n classical_13.mp3 -637.720642 -177.713959 -361.834045  71.310080  0.008326   \n classical_14.mp3 -531.049438 -100.790543 -188.970749  58.287371 -3.246618   \n classical_15.mp3 -555.129944  -96.139236 -209.245819  45.350121 -3.574710   \n ...                      ...         ...         ...        ...       ...   \n rock_95.mp3      -553.110107   -5.218835 -193.506042  76.869437 -0.201055   \n rock_96.mp3      -541.236023   27.163334 -119.113991  58.420684 -0.957699   \n rock_97.mp3      -518.494995   58.526745  -66.267746  65.635619 -0.898026   \n rock_98.mp3      -518.643066   53.555115  -45.734516  52.444200 -1.705641   \n rock_99.mp3      -544.703125   75.612129  -49.380943  54.045627 -0.863093   \n \n                       1_min       1_max      1_mean      1_std    1_skew  ...  \\\n filename                                                                  ...   \n classical_1.mp3    0.000000  178.751617  111.332344  24.847563 -0.402642  ...   \n classical_12.mp3   0.000000  194.264160  148.226654  19.305008 -0.533256  ...   \n classical_13.mp3   0.000000  257.162842  211.556549  20.347035 -1.050120  ...   \n classical_14.mp3   0.000000  157.947922   86.563927  17.911136  0.244245  ...   \n classical_15.mp3   0.000000  140.918640  109.309990  14.171102 -2.617227  ...   \n ...                     ...         ...         ...        ...       ...  ...   \n rock_95.mp3      -89.948746  201.180450  111.724190  36.463584 -0.443224  ...   \n rock_96.mp3       -7.415961  210.492462  125.453690  31.908869 -0.547468  ...   \n rock_97.mp3      -58.824409  175.201355   99.288261  25.158417 -0.568056  ...   \n rock_98.mp3        0.000000  187.042740   96.440872  24.137702 -0.145216  ...   \n rock_99.mp3      -32.930653  191.735382   93.971237  33.410220  0.040112  ...   \n \n                      38_min     38_max   38_mean     38_std   38_skew  \\\n filename                                                                \n classical_1.mp3  -44.098068  47.308060 -3.713503  16.553984  0.230691   \n classical_12.mp3 -44.843811  28.490644 -6.242015  10.546545  0.341848   \n classical_13.mp3 -24.728806  18.424036 -0.275737   7.026148 -0.640964   \n classical_14.mp3 -36.261154  38.335831 -5.770759  12.254058  0.805707   \n classical_15.mp3 -42.808113  24.146545 -7.260053   9.862490  0.097765   \n ...                     ...        ...       ...        ...       ...   \n rock_95.mp3      -27.043941  22.451445 -7.234633   8.471853  0.753855   \n rock_96.mp3      -37.584858  28.087936 -9.704238   8.447620  0.112760   \n rock_97.mp3      -29.620445  26.325895 -5.722826   7.727378  0.207489   \n rock_98.mp3      -26.967848   8.714737 -9.511492   5.551820 -0.025604   \n rock_99.mp3      -21.929403  17.050608 -5.296690   5.894963  0.390705   \n \n                      39_min     39_max   39_mean     39_std   39_skew  \n filename                                                               \n classical_1.mp3  -46.794479  49.352516 -2.282116  15.285639  0.171462  \n classical_12.mp3 -25.040888  46.878204  1.844494  11.160392  0.503120  \n classical_13.mp3 -24.319565  18.439262 -2.147022   8.171929  0.009566  \n classical_14.mp3 -40.597336  32.816467 -0.543406  11.467829 -0.187037  \n classical_15.mp3 -31.394997  35.685539 -0.949139  11.141700  0.249278  \n ...                     ...        ...       ...        ...       ...  \n rock_95.mp3      -24.712723  23.410387 -4.502398   6.687984  0.238807  \n rock_96.mp3      -38.147888  21.814402 -8.249507   7.807756  0.071968  \n rock_97.mp3      -29.497524  25.410654 -3.356615   8.170526  0.160330  \n rock_98.mp3      -23.020084  13.948638 -2.664985   5.051498 -0.258407  \n rock_99.mp3      -20.983192  29.312023 -0.321836   6.571660  0.384794  \n \n [320 rows x 200 columns],\n array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,\n        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]))"
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# remove labels\n",
+    "X = train.drop(['label'], axis=1, errors='ignore')\n",
+    "\n",
+    "columns: Index = X.columns\n",
+    "classnames = np.sort(np.unique(joined.label.values)) # -> [\"classical\", \"electronic\", \"pop\", \"rock\"]\n",
+    "\n",
+    "# map classname to an index and create dicts for easy lookup in O(1)\n",
+    "classname2index = {}\n",
+    "index2classname = {}\n",
+    "\n",
+    "for i, classname in enumerate(classnames):\n",
+    "    classname2index[classname] = i\n",
+    "    index2classname[i] = classname\n",
+    "\n",
+    "# map label to label index\n",
+    "y = np.array([classname2index[classname] for classname in train.label.values])\n",
+    "\n",
+    "(X, y)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:53.384132460Z",
+     "start_time": "2023-09-06T16:33:52.974140158Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(320, 200)\n",
+      "(80, 200)\n",
+      "0.25\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,\n       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3])"
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "X_test = test.drop(['label'], axis=1, errors='ignore')\n",
+    "\n",
+    "print(X.shape)\n",
+    "print(X_test.shape)\n",
+    "print(X_test.shape[0] / X.shape[0])     # fraction of test sample\n",
+    "\n",
+    "y_test = np.array([classname2index[classname] for classname in test.label.values])\n",
+    "y_test"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:53.385211474Z",
+     "start_time": "2023-09-06T16:33:53.017055988Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "array([[ 0.43337449, -1.7728706 , -1.32763933, ..., -0.68466574,\n         3.57466709,  0.10865617],\n       [-0.42729588, -1.58097286, -0.98456168, ...,  0.50149939,\n         1.74587552,  1.04983892],\n       [-2.45262044, -1.95504141, -1.98276254, ..., -0.64583406,\n         0.42103984, -0.35077496],\n       ...,\n       [ 0.76503978,  1.03241718,  1.2644193 , ..., -0.99352289,\n         0.42041778,  0.07706691],\n       [ 0.76104364,  0.96954681,  1.49000365, ..., -0.7947189 ,\n        -0.96229984, -1.11123088],\n       [ 0.05773511,  1.24847596,  1.44994288, ..., -0.12119682,\n        -0.2883865 ,  0.71405216]])"
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Standardize for PCA\n",
+    "scaler = StandardScaler()\n",
+    "X_standardized = scaler.fit_transform(X.values)\n",
+    "X_test_standardized = scaler.transform(X_test.values)\n",
+    "\n",
+    "X_standardized"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:53.387124363Z",
+     "start_time": "2023-09-06T16:33:53.035337727Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.8569547942728654\n",
+      "(320, 50)\n",
+      "(80, 50)\n",
+      "(320,)\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Reduce Dimensions via PCA\n",
+    "pca = PCA(n_components=50).fit(X_standardized)\n",
+    "X_pca = pca.transform(X_standardized)\n",
+    "X_test_pca = pca.transform(X_test_standardized)\n",
+    "\n",
+    "print(sum(pca.explained_variance_ratio_))\n",
+    "print(X_pca.shape)\n",
+    "print(X_test_pca.shape)\n",
+    "print(y.shape)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:53.648047288Z",
+     "start_time": "2023-09-06T16:33:53.076945689Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.78125\n",
+      "[[ 2.54932913 -0.8297137  -2.64117401 ...  0.0628467  -1.08498817\n",
+      "  -0.54600181]\n",
+      " [ 5.60625198 -1.68012408 -3.12748987 ... -0.79584617 -0.8702528\n",
+      "   0.32833321]\n",
+      " [-4.29091225 -0.05226949 -4.71139064 ...  0.01077759  0.51144486\n",
+      "  -0.02390549]\n",
+      " ...\n",
+      " [-7.89826346  1.0391027  -5.76202999 ... -0.43377044 -1.18091018\n",
+      "  -0.44692849]\n",
+      " [-8.30381697 -1.3222363   2.37698638 ...  0.11685826 -0.13683289\n",
+      "  -1.10917816]\n",
+      " [-4.76845573 -7.78718752  3.16067256 ... -1.23649128  0.39003957\n",
+      "   0.95120336]]\n",
+      "[3 0 3 2 3 0 1 2 0 3 0 0 0 1 2 1 2 3 2 1 1 0 3 0 0 0 3 1 1 3 3 2 3 1 2 1 0\n",
+      " 1 0 1 3 0 0 0 0 3 3 3 0 3 3 3 1 2 2 0 1 2 1 2 3 2 1 0]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Fit SVM:\n",
+    "\n",
+    "X_train, X_val, y_train, y_val = train_test_split(X_pca, y, test_size = 0.2, random_state=4, shuffle = True)\n",
+    "\n",
+    "clf = SVC(kernel='rbf', probability=True)\n",
+    "clf.fit(X_train, y_train)\n",
+    "\n",
+    "print(accuracy_score(clf.predict(X_val), y_val))\n",
+    "print(X_val)\n",
+    "print(y_val)\n"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:33:53.908081165Z",
+     "start_time": "2023-09-06T16:33:53.275197554Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.7068627450980391\n",
+      "{'C': 4, 'gamma': 0.01}\n",
+      "SVC(C=4, gamma=0.01)\n",
+      "0.78125\n"
+     ]
+    }
+   ],
+   "source": [
+    "# grid for C, gamma\n",
+    "C_grid = [0.001, 0.01, 0.1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
+    "gamma_grid = [0.001, 0.01, 0.1, 1, 10]\n",
+    "param_grid = {'C': C_grid, 'gamma': gamma_grid}\n",
+    "\n",
+    "grid = GridSearchCV(SVC(kernel='rbf'), param_grid, cv=5, scoring=\"accuracy\")\n",
+    "grid.fit(X_train, y_train)\n",
+    "\n",
+    "# Find the best model\n",
+    "print(grid.best_score_)\n",
+    "print(grid.best_params_)\n",
+    "print(grid.best_estimator_)\n",
+    "print(accuracy_score(grid.predict(X_val), y_val))"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:34:01.350344280Z",
+     "start_time": "2023-09-06T16:33:53.459579739Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.78125\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Optimal model\n",
+    "\n",
+    "clf = SVC(kernel='rbf', C=4, gamma=0.01, probability=True)\n",
+    "clf.fit(X_train, y_train)\n",
+    "\n",
+    "print(accuracy_score(clf.predict(X_val), y_val))"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:34:01.440250619Z",
+     "start_time": "2023-09-06T16:34:01.354593939Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.7875\n",
+      "[[9.98186250e-01 7.07416061e-04 7.80359226e-04 3.25974952e-04]\n",
+      " [9.96457336e-01 8.61299907e-04 1.23630417e-03 1.44505986e-03]\n",
+      " [9.88168745e-01 3.07061855e-03 3.28921925e-03 5.47141688e-03]\n",
+      " [9.99725418e-01 2.34111856e-05 1.88388067e-04 6.27825592e-05]\n",
+      " [9.95553472e-01 1.24175862e-04 9.79386045e-04 3.34296563e-03]\n",
+      " [9.91956058e-01 5.30538055e-03 1.54189494e-03 1.19666681e-03]\n",
+      " [9.48805820e-01 4.51553061e-03 3.54571301e-02 1.12215196e-02]\n",
+      " [9.39011874e-01 1.25859524e-02 3.91467574e-02 9.25541627e-03]\n",
+      " [9.98779810e-01 3.54844256e-04 4.83538402e-04 3.81807584e-04]\n",
+      " [9.90943320e-01 6.68565763e-03 1.21029168e-03 1.16073074e-03]\n",
+      " [1.70650977e-01 4.12405105e-01 2.54547776e-01 1.62396142e-01]\n",
+      " [7.61283180e-01 5.85153569e-02 1.20185726e-01 6.00157375e-02]\n",
+      " [9.99812599e-01 5.80059091e-05 6.23304798e-05 6.70645603e-05]\n",
+      " [9.94666111e-01 3.87806861e-04 1.39823341e-03 3.54784853e-03]\n",
+      " [9.96732326e-01 2.09863248e-03 5.52203710e-04 6.16837643e-04]\n",
+      " [7.83508670e-01 2.25171519e-02 1.45607359e-01 4.83668199e-02]\n",
+      " [1.08947087e-01 1.43062693e-02 6.87834391e-01 1.88912253e-01]\n",
+      " [8.95644592e-01 1.19426746e-02 7.53917300e-02 1.70210036e-02]\n",
+      " [9.99765501e-01 4.27079401e-05 5.63234537e-05 1.35467724e-04]\n",
+      " [6.96168233e-01 2.32101342e-01 5.44296450e-02 1.73007797e-02]\n",
+      " [9.74327858e-01 6.29911950e-03 1.38415586e-02 5.53146410e-03]\n",
+      " [1.97208847e-03 9.39267826e-01 8.53321167e-03 5.02268735e-02]\n",
+      " [1.54495619e-03 9.67010528e-01 2.65155983e-02 4.92891741e-03]\n",
+      " [2.97549129e-03 7.41850329e-01 1.38927973e-01 1.16246207e-01]\n",
+      " [4.09082904e-03 4.48959962e-01 4.03601661e-01 1.43347548e-01]\n",
+      " [1.44331850e-03 8.96264314e-01 7.01120834e-02 3.21802844e-02]\n",
+      " [1.82609926e-02 6.93756720e-01 2.33339552e-01 5.46427349e-02]\n",
+      " [8.24945729e-02 6.49069944e-01 2.17144236e-01 5.12912463e-02]\n",
+      " [9.23976812e-02 7.76732703e-01 1.02546091e-01 2.83235249e-02]\n",
+      " [8.05320661e-01 1.41289007e-01 3.51733662e-02 1.82169657e-02]\n",
+      " [6.32741836e-04 8.05861715e-01 2.26476412e-02 1.70857902e-01]\n",
+      " [2.57706086e-02 4.08707961e-01 4.56859671e-01 1.08661759e-01]\n",
+      " [2.38704115e-03 8.17061213e-01 1.24634438e-01 5.59173084e-02]\n",
+      " [7.85891844e-04 3.23912838e-01 5.91400091e-02 6.16161261e-01]\n",
+      " [8.17398003e-03 5.92856683e-01 1.36843385e-01 2.62125952e-01]\n",
+      " [2.01727314e-03 9.18622935e-01 9.53308788e-03 6.98267044e-02]\n",
+      " [1.02655478e-01 4.15450834e-01 3.07215353e-01 1.74678335e-01]\n",
+      " [4.21319476e-04 3.08866780e-01 5.37141483e-01 1.53570417e-01]\n",
+      " [7.37060683e-04 6.26005330e-01 3.32306955e-01 4.09506550e-02]\n",
+      " [3.57947383e-03 3.38994309e-01 5.85661778e-01 7.17644389e-02]\n",
+      " [7.81396204e-04 9.05484100e-01 4.24574488e-02 5.12770549e-02]\n",
+      " [1.38673280e-02 8.44602740e-01 3.48480447e-02 1.06681887e-01]\n",
+      " [2.38678656e-02 3.16318564e-02 8.06543692e-01 1.37956586e-01]\n",
+      " [2.77447879e-02 1.76362240e-01 2.28042151e-01 5.67850821e-01]\n",
+      " [3.68498883e-03 1.93765262e-02 3.74744135e-01 6.02194350e-01]\n",
+      " [1.08250700e-01 1.31283644e-01 4.52307411e-01 3.08158244e-01]\n",
+      " [1.06117414e-03 4.57675502e-03 1.21562074e-01 8.72799997e-01]\n",
+      " [9.44284923e-03 6.01444265e-02 6.88640823e-01 2.41771902e-01]\n",
+      " [3.04315346e-03 4.91841391e-03 6.73229859e-01 3.18808574e-01]\n",
+      " [3.47407145e-03 3.38133523e-01 4.27311082e-01 2.31081323e-01]\n",
+      " [6.38991934e-02 2.34946580e-02 4.38116434e-01 4.74489715e-01]\n",
+      " [3.65337631e-02 1.47529551e-01 6.56699181e-01 1.59237505e-01]\n",
+      " [3.45369958e-02 4.86056971e-02 4.50222236e-01 4.66635071e-01]\n",
+      " [1.02874384e-01 1.14593225e-01 4.12828659e-01 3.69703732e-01]\n",
+      " [7.01929891e-04 4.72310828e-03 6.33659414e-01 3.60915547e-01]\n",
+      " [1.19280091e-03 2.91859540e-03 6.63499318e-01 3.32389286e-01]\n",
+      " [3.22247158e-04 1.86224604e-03 7.86294266e-01 2.11521241e-01]\n",
+      " [1.62556011e-02 1.10337495e-01 6.90066111e-01 1.83340793e-01]\n",
+      " [5.83937991e-03 8.91483148e-03 8.23557657e-01 1.61688132e-01]\n",
+      " [1.40771587e-03 1.99973215e-03 7.69667401e-01 2.26925151e-01]\n",
+      " [2.85627492e-03 4.09235838e-02 5.47033952e-01 4.09186189e-01]\n",
+      " [5.00914955e-02 5.66591605e-02 8.19154779e-01 7.40945653e-02]\n",
+      " [3.49728526e-04 1.03301315e-02 3.45356722e-01 6.43963418e-01]\n",
+      " [7.86355678e-03 5.17956142e-02 8.13005815e-01 1.27335014e-01]\n",
+      " [2.24811753e-04 1.50400751e-03 5.92965001e-01 4.05306180e-01]\n",
+      " [1.50292599e-03 1.18077604e-02 7.95371303e-01 1.91318010e-01]\n",
+      " [9.71722011e-04 1.93522506e-03 4.85836249e-01 5.11256804e-01]\n",
+      " [2.71508043e-04 8.47075628e-03 6.65359707e-02 9.24721765e-01]\n",
+      " [3.78695110e-04 7.86603624e-03 3.13831725e-01 6.77923544e-01]\n",
+      " [1.56018964e-03 5.04504439e-02 3.75946622e-01 5.72042744e-01]\n",
+      " [4.13000514e-03 4.44190116e-03 1.76929372e-01 8.14498722e-01]\n",
+      " [7.03938811e-04 5.20938587e-01 2.13900864e-01 2.64456610e-01]\n",
+      " [1.26489155e-03 3.03436964e-02 2.15768512e-01 7.52622900e-01]\n",
+      " [1.39383300e-04 2.39767850e-03 7.56550144e-01 2.40912794e-01]\n",
+      " [8.86305936e-04 4.62779469e-04 1.80744510e-01 8.17906405e-01]\n",
+      " [4.22976399e-04 5.51964764e-02 2.85832649e-01 6.58547898e-01]\n",
+      " [6.85422618e-04 1.63669725e-03 1.51783518e-01 8.45894362e-01]\n",
+      " [1.88958698e-03 1.04946968e-02 1.31240172e-01 8.56375545e-01]\n",
+      " [3.17948589e-03 2.18481451e-02 1.25011239e-01 8.49961130e-01]\n",
+      " [8.82291635e-04 1.06487654e-02 3.11812728e-01 6.76656214e-01]]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Fit entire training sets\n",
+    "clf.fit(X_pca, y)\n",
+    "\n",
+    "print(accuracy_score(clf.predict(X_test_pca), y_test))\n",
+    "print(clf.predict_proba(X_test_pca))"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:34:01.583086439Z",
+     "start_time": "2023-09-06T16:34:01.473457338Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "                         label       pred1       pred2       pred3       pred4\n",
+      "filename                                                                      \n",
+      "classical_10.mp3     classical   classical         pop  electronic        rock\n",
+      "classical_100.mp3    classical   classical         pop        rock  electronic\n",
+      "classical_11.mp3     classical   classical        rock         pop  electronic\n",
+      "classical_19.mp3     classical   classical         pop        rock  electronic\n",
+      "classical_20.mp3     classical   classical        rock         pop  electronic\n",
+      "classical_21.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_24.mp3     classical   classical         pop        rock  electronic\n",
+      "classical_27.mp3     classical   classical         pop  electronic        rock\n",
+      "classical_28.mp3     classical   classical         pop  electronic        rock\n",
+      "classical_29.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_40.mp3     classical  electronic         pop        rock   classical\n",
+      "classical_49.mp3     classical   classical         pop  electronic        rock\n",
+      "classical_5.mp3      classical   classical         pop  electronic        rock\n",
+      "classical_51.mp3     classical   classical        rock         pop  electronic\n",
+      "classical_58.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_69.mp3     classical   classical         pop        rock  electronic\n",
+      "classical_71.mp3     classical         pop        rock   classical  electronic\n",
+      "classical_8.mp3      classical   classical         pop        rock  electronic\n",
+      "classical_92.mp3     classical   classical        rock         pop  electronic\n",
+      "classical_97.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_98.mp3     classical   classical         pop  electronic        rock\n",
+      "electronic_10.mp3   electronic  electronic        rock         pop   classical\n",
+      "electronic_100.mp3  electronic  electronic         pop        rock   classical\n",
+      "electronic_14.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_2.mp3    electronic  electronic         pop        rock   classical\n",
+      "electronic_23.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_27.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_3.mp3    electronic  electronic         pop   classical        rock\n",
+      "electronic_32.mp3   electronic  electronic         pop   classical        rock\n",
+      "electronic_47.mp3   electronic   classical  electronic         pop        rock\n",
+      "electronic_48.mp3   electronic  electronic        rock         pop   classical\n",
+      "electronic_51.mp3   electronic         pop  electronic        rock   classical\n",
+      "electronic_52.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_54.mp3   electronic        rock  electronic         pop   classical\n",
+      "electronic_55.mp3   electronic  electronic        rock         pop   classical\n",
+      "electronic_56.mp3   electronic  electronic        rock         pop   classical\n",
+      "electronic_57.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_75.mp3   electronic         pop  electronic        rock   classical\n",
+      "electronic_77.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_84.mp3   electronic         pop  electronic        rock   classical\n",
+      "electronic_86.mp3   electronic  electronic        rock         pop   classical\n",
+      "electronic_95.mp3   electronic  electronic        rock         pop   classical\n",
+      "pop_10.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_100.mp3                pop        rock         pop  electronic   classical\n",
+      "pop_2.mp3                  pop        rock         pop  electronic   classical\n",
+      "pop_34.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_37.mp3                 pop        rock         pop  electronic   classical\n",
+      "pop_41.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_42.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_47.mp3                 pop         pop  electronic        rock   classical\n",
+      "pop_52.mp3                 pop        rock         pop   classical  electronic\n",
+      "pop_57.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_6.mp3                  pop        rock         pop  electronic   classical\n",
+      "pop_61.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_62.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_64.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_65.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_7.mp3                  pop         pop        rock  electronic   classical\n",
+      "pop_72.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_73.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_8.mp3                  pop         pop        rock  electronic   classical\n",
+      "pop_86.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_87.mp3                 pop        rock         pop  electronic   classical\n",
+      "pop_92.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_94.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_97.mp3                 pop         pop        rock  electronic   classical\n",
+      "rock_11.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_22.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_25.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_26.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_4.mp3                rock        rock         pop  electronic   classical\n",
+      "rock_41.mp3               rock  electronic        rock         pop   classical\n",
+      "rock_45.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_48.mp3               rock         pop        rock  electronic   classical\n",
+      "rock_54.mp3               rock        rock         pop   classical  electronic\n",
+      "rock_57.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_66.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_75.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_81.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_90.mp3               rock        rock         pop  electronic   classical\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Fit the entire training sets\n",
+    "\n",
+    "def convert_to_labels(preds, i2c, k=3):\n",
+    "    ans = []\n",
+    "    ids = []\n",
+    "    for p in preds:\n",
+    "        idx = np.argsort(p)[::-1]\n",
+    "        ids.append([i for i in idx[:k]])\n",
+    "        ans.append([i2c[i] for i in idx[:k]])\n",
+    "\n",
+    "    return ans, ids\n",
+    "\n",
+    "clf.fit(X_pca, y)\n",
+    "prediction_lists, percentage_lists = convert_to_labels(clf.predict_proba(X_test_pca), index2classname, k=4)\n",
+    "\n",
+    "# # Write to outputs\n",
+    "subm = pd.DataFrame(index=test.index)\n",
+    "subm['label'] = test.label.values\n",
+    "subm['pred1'] = [prediction_list[0] for prediction_list in prediction_lists]\n",
+    "subm['pred2'] = [prediction_list[1] for prediction_list in prediction_lists]\n",
+    "subm['pred3'] = [prediction_list[2] for prediction_list in prediction_lists]\n",
+    "subm['pred4'] = [prediction_list[3] for prediction_list in prediction_lists]\n",
+    "\n",
+    "pd.set_option('display.max_rows', None)\n",
+    "print(subm)\n",
+    "pd.reset_option('display.max_rows')"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:34:01.741253646Z",
+     "start_time": "2023-09-06T16:34:01.567005786Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "outputs": [],
+   "source": [
+    "with open(LOCAL_PATH / \"clf.pickle\", \"wb\") as file:\n",
+    "    pickle.dump(clf, file)\n",
+    "subm.to_csv(LOCAL_PATH / \"submission.csv\", index=False)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:34:01.742181308Z",
+     "start_time": "2023-09-06T16:34:01.725149499Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "outputs": [],
+   "source": [
+    "if not ONLY_LOCAL:\n",
+    "    with open(RESOURCE_PATH / \"5_ml_model\" / \"ml_model_entity_metadata.yml\", \"r\") as file:\n",
+    "        metadata = yaml.safe_load(file)\n",
+    "\n",
+    "    nb_config_ml = NbConfig(\n",
+    "        nb_location=NOTEBOOK_PATH / \"5_ml_model.ipynb\",\n",
+    "        entities=[\n",
+    "            ml_model_entity := InvenioEntity.new(\n",
+    "                name=\"Standalone Machine Learning model\",\n",
+    "                description=\"An ml model representing the trained clf\",\n",
+    "                location=LOCAL_PATH / \"5_ml_model\" / \"output\" / \"ml_model.pickle\",\n",
+    "                dbrepo_connector=connector,\n",
+    "                invenio_connector=invenio_connector,\n",
+    "                record_metadata=metadata,\n",
+    "                type=\"clf\"\n",
+    "            ),\n",
+    "            test_result_entity := DbRepoEntity.new(\n",
+    "                name=\"Standalone Test Result Entity\",\n",
+    "                description=\"Result of tests on ml model\",\n",
+    "                table_name=\"test_result\",\n",
+    "                table_description=\"Test results of genre prediction on ml model\",\n",
+    "                location=LOCAL_PATH / \"5_ml_model\" / \"output\" / \"test_result.csv\",\n",
+    "                dbrepo_connector=connector,\n",
+    "                type=\"submission\"\n",
+    "            )\n",
+    "        ],\n",
+    "        dependencies=[\n",
+    "            audio_files_entity\n",
+    "        ]\n",
+    "    )\n",
+    "\n",
+    "    executor.upload_entities(nb_config_ml)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-09-06T16:34:01.832515470Z",
+     "start_time": "2023-09-06T16:34:01.741700194Z"
+    }
+   }
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 2
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython2",
+   "version": "2.7.6"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/notebooks/1_audio_files.ipynb b/notebooks/1_audio_files.ipynb
index 504b059f5562150ecb54bf5431875ed279cf858d..14a85d7af5546b9d8dcdf619168915fcb5ad976b 100644
--- a/notebooks/1_audio_files.ipynb
+++ b/notebooks/1_audio_files.ipynb
@@ -1,8 +1,52 @@
 {
  "cells": [
+  {
+   "cell_type": "markdown",
+   "id": "4389a8092677254e",
+   "metadata": {
+    "collapsed": false,
+    "jupyter": {
+     "outputs_hidden": false
+    },
+    "papermill": {
+     "duration": 0.00365,
+     "end_time": "2023-10-10T20:19:34.354097",
+     "exception": false,
+     "start_time": "2023-10-10T20:19:34.350447",
+     "status": "completed"
+    },
+    "tags": []
+   },
+   "source": [
+    "# Audio Files\n",
+    "\n",
+    "Bundle the provided audio files (400, in MP3) in a tar, encrypt it using gzip and store it in the output folder."
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 1,
+   "id": "87ab37c6",
+   "metadata": {
+    "collapsed": false,
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:19:34.369926Z",
+     "iopub.status.busy": "2023-10-10T20:19:34.368623Z",
+     "iopub.status.idle": "2023-10-10T20:19:34.394688Z",
+     "shell.execute_reply": "2023-10-10T20:19:34.393354Z"
+    },
+    "jupyter": {
+     "outputs_hidden": false
+    },
+    "papermill": {
+     "duration": 0.037909,
+     "end_time": "2023-10-10T20:19:34.398270",
+     "exception": false,
+     "start_time": "2023-10-10T20:19:34.360361",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "from definitions import BASE_PATH\n",
@@ -10,27 +54,94 @@
     "import zipfile\n",
     "import os\n",
     "from pathlib import Path"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 2,
+   "id": "1b4e6b01",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:19:34.412182Z",
+     "iopub.status.busy": "2023-10-10T20:19:34.410878Z",
+     "iopub.status.idle": "2023-10-10T20:19:34.418072Z",
+     "shell.execute_reply": "2023-10-10T20:19:34.416762Z"
+    },
+    "papermill": {
+     "duration": 0.0178,
+     "end_time": "2023-10-10T20:19:34.421245",
+     "exception": false,
+     "start_time": "2023-10-10T20:19:34.403445",
+     "status": "completed"
+    },
+    "tags": [
+     "parameters"
+    ]
+   },
    "outputs": [],
    "source": [
-    "OUTPUT_PATHS: dict[str, str] = {\n",
-    "    \"audio_tar\": (BASE_PATH / \"tmp\" / \"1_audio_files\" / \"output\" / \"emotifymusic.tar.gz\").__str__()\n",
+    "# Parameters\n",
+    "INPUT_PATHS = {}\n",
+    "OUTPUT_PATHS = {\n",
+    "    \"audio_tar\": str(BASE_PATH / \"tmp/1_audio_files/output/emotifymusic.tar.gz\")\n",
     "}"
-   ],
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "a0c3731f",
    "metadata": {
-    "collapsed": false
-   }
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:19:34.432077Z",
+     "iopub.status.busy": "2023-10-10T20:19:34.431120Z",
+     "iopub.status.idle": "2023-10-10T20:19:34.436917Z",
+     "shell.execute_reply": "2023-10-10T20:19:34.435800Z"
+    },
+    "papermill": {
+     "duration": 0.014193,
+     "end_time": "2023-10-10T20:19:34.439709",
+     "exception": false,
+     "start_time": "2023-10-10T20:19:34.425516",
+     "status": "completed"
+    },
+    "tags": [
+     "injected-parameters"
+    ]
+   },
+   "outputs": [],
+   "source": [
+    "# Parameters\n",
+    "INPUT_PATHS = {}\n",
+    "OUTPUT_PATHS = {\n",
+    "    \"audio_tar\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/1_audio_files/output/emotifymusic.tar.gz\"\n",
+    "}\n"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 4,
+   "id": "1e487573",
+   "metadata": {
+    "collapsed": false,
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:19:34.446770Z",
+     "iopub.status.busy": "2023-10-10T20:19:34.446426Z",
+     "iopub.status.idle": "2023-10-10T20:19:36.570981Z",
+     "shell.execute_reply": "2023-10-10T20:19:36.570217Z"
+    },
+    "jupyter": {
+     "outputs_hidden": false
+    },
+    "papermill": {
+     "duration": 2.131337,
+     "end_time": "2023-10-10T20:19:36.573889",
+     "exception": false,
+     "start_time": "2023-10-10T20:19:34.442552",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "# load provided files\n",
@@ -40,15 +151,33 @@
     "dir_path.mkdir(parents=True, exist_ok=True)\n",
     "# unzip to dir_path\n",
     "with zipfile.ZipFile(zip_path, \"r\") as zfile:\n",
-    "    zfile.extractall(path=dir_path)\n"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
+    "    zfile.extractall(path=dir_path)"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 5,
+   "id": "c3193f35",
+   "metadata": {
+    "collapsed": false,
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:19:36.590650Z",
+     "iopub.status.busy": "2023-10-10T20:19:36.590408Z",
+     "iopub.status.idle": "2023-10-10T20:19:37.253257Z",
+     "shell.execute_reply": "2023-10-10T20:19:37.252729Z"
+    },
+    "jupyter": {
+     "outputs_hidden": false
+    },
+    "papermill": {
+     "duration": 0.673083,
+     "end_time": "2023-10-10T20:19:37.254793",
+     "exception": false,
+     "start_time": "2023-10-10T20:19:36.581710",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "file_paths = list(dir_path.rglob('**/*.*'))\n",
@@ -56,55 +185,79 @@
     "flattened_dir_path.mkdir(parents=True, exist_ok=True)\n",
     "\n",
     "for path in file_paths:\n",
-    "    (flattened_dir_path / path.relative_to(dir_path).as_posix().replace('/', '_')).write_bytes(path.read_bytes())\n"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
+    "    (flattened_dir_path / path.relative_to(dir_path).as_posix().replace('/', '_')).write_bytes(path.read_bytes())"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "\n"
-     ]
-    }
-   ],
+   "execution_count": 6,
+   "id": "3272ea2b",
+   "metadata": {
+    "collapsed": false,
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:19:37.268248Z",
+     "iopub.status.busy": "2023-10-10T20:19:37.267971Z",
+     "iopub.status.idle": "2023-10-10T20:19:50.606898Z",
+     "shell.execute_reply": "2023-10-10T20:19:50.606324Z"
+    },
+    "jupyter": {
+     "outputs_hidden": false
+    },
+    "papermill": {
+     "duration": 13.347122,
+     "end_time": "2023-10-10T20:19:50.608576",
+     "exception": false,
+     "start_time": "2023-10-10T20:19:37.261454",
+     "status": "completed"
+    },
+    "tags": []
+   },
+   "outputs": [],
    "source": [
     "tar_path = Path(OUTPUT_PATHS[\"audio_tar\"])\n",
     "tar_path.parent.mkdir(parents=True, exist_ok=True)\n",
     "\n",
     "with tarfile.open(tar_path, \"w:gz\") as file:\n",
     "    file.add(flattened_dir_path, arcname=os.path.sep)"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
+   ]
   }
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
   "language_info": {
    "codemirror_mode": {
     "name": "ipython",
-    "version": 2
+    "version": 3
    },
    "file_extension": ".py",
    "mimetype": "text/x-python",
    "name": "python",
    "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython2",
-   "version": "2.7.6"
+   "pygments_lexer": "ipython3",
+   "version": "3.10.13"
+  },
+  "papermill": {
+   "default_parameters": {},
+   "duration": 17.279795,
+   "end_time": "2023-10-10T20:19:50.829787",
+   "environment_variables": {},
+   "exception": null,
+   "input_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/1_audio_files.ipynb",
+   "output_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/1_audio_files.ipynb",
+   "parameters": {
+    "INPUT_PATHS": {},
+    "OUTPUT_PATHS": {
+     "audio_tar": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/1_audio_files/output/emotifymusic.tar.gz"
+    }
+   },
+   "start_time": "2023-10-10T20:19:33.549992",
+   "version": "2.4.0"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 0
-}
+ "nbformat_minor": 5
+}
\ No newline at end of file
diff --git a/notebooks/2_generate_features.ipynb b/notebooks/2_generate_features.ipynb
index acda19ea03d612005ae886e01f6444bdd5befc2b..97b795b2c61164bf2a0930d656ae4bac8fb487c6 100644
--- a/notebooks/2_generate_features.ipynb
+++ b/notebooks/2_generate_features.ipynb
@@ -2,7 +2,17 @@
  "cells": [
   {
    "cell_type": "markdown",
-   "metadata": {},
+   "id": "699a83ce",
+   "metadata": {
+    "papermill": {
+     "duration": 0.002815,
+     "end_time": "2023-10-10T20:22:20.918811",
+     "exception": false,
+     "start_time": "2023-10-10T20:22:20.915996",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "source": [
     "# Feature Extraction of Base audio files from Invenio"
    ]
@@ -10,8 +20,23 @@
   {
    "cell_type": "code",
    "execution_count": 1,
+   "id": "6463a609",
    "metadata": {
-    "collapsed": true
+    "collapsed": true,
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:22:20.925526Z",
+     "iopub.status.busy": "2023-10-10T20:22:20.925242Z",
+     "iopub.status.idle": "2023-10-10T20:22:21.833418Z",
+     "shell.execute_reply": "2023-10-10T20:22:21.832909Z"
+    },
+    "papermill": {
+     "duration": 0.915204,
+     "end_time": "2023-10-10T20:22:21.836842",
+     "exception": false,
+     "start_time": "2023-10-10T20:22:20.921638",
+     "status": "completed"
+    },
+    "tags": []
    },
    "outputs": [],
    "source": [
@@ -27,8 +52,22 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 2,
+   "id": "f025335b",
    "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:22:21.844838Z",
+     "iopub.status.busy": "2023-10-10T20:22:21.844500Z",
+     "iopub.status.idle": "2023-10-10T20:22:21.850320Z",
+     "shell.execute_reply": "2023-10-10T20:22:21.849083Z"
+    },
+    "papermill": {
+     "duration": 0.013137,
+     "end_time": "2023-10-10T20:22:21.853195",
+     "exception": false,
+     "start_time": "2023-10-10T20:22:21.840058",
+     "status": "completed"
+    },
     "tags": [
      "parameters"
     ]
@@ -49,7 +88,56 @@
   {
    "cell_type": "code",
    "execution_count": 3,
-   "metadata": {},
+   "id": "704afac7",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:22:21.865120Z",
+     "iopub.status.busy": "2023-10-10T20:22:21.864492Z",
+     "iopub.status.idle": "2023-10-10T20:22:21.868274Z",
+     "shell.execute_reply": "2023-10-10T20:22:21.867779Z"
+    },
+    "papermill": {
+     "duration": 0.012662,
+     "end_time": "2023-10-10T20:22:21.870977",
+     "exception": false,
+     "start_time": "2023-10-10T20:22:21.858315",
+     "status": "completed"
+    },
+    "tags": [
+     "injected-parameters"
+    ]
+   },
+   "outputs": [],
+   "source": [
+    "# Parameters\n",
+    "INPUT_PATHS = {\n",
+    "    \"audio_tar\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/2_generate_features/input/emotifymusic.tar.gz\"\n",
+    "}\n",
+    "OUTPUT_PATHS = {\n",
+    "    \"raw_features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/2_generate_features/output/raw_features.csv\"\n",
+    "}\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "10f1b3cd",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:22:21.883213Z",
+     "iopub.status.busy": "2023-10-10T20:22:21.882982Z",
+     "iopub.status.idle": "2023-10-10T20:22:24.581248Z",
+     "shell.execute_reply": "2023-10-10T20:22:24.580333Z"
+    },
+    "papermill": {
+     "duration": 2.708308,
+     "end_time": "2023-10-10T20:22:24.584454",
+     "exception": false,
+     "start_time": "2023-10-10T20:22:21.876146",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "# inputs\n",
@@ -58,8 +146,7 @@
     "\n",
     "assert INPUT_PATH.exists() and INPUT_PATH.is_dir()\n",
     "\n",
-    "# files = load_input_audio_archive(gzip_audio_path := INPUT_PATH / \"audio_files.tar.gz\", gzip_audio_path.with_suffix(\"\"))\n",
-    "with tarfile.open(audio_gz := INPUT_PATHS[\"audio_tar\"], \"r:gz\") as archive:\n",
+    "with tarfile.open(audio_gz := Path(INPUT_PATHS[\"audio_tar\"]).resolve(), \"r:gz\") as archive:\n",
     "    archive.extractall(path=(path_out := audio_gz.with_suffix(\"\").with_suffix(\"\")))\n",
     "\n",
     "files = list(path_out.rglob(\"**/*.*\"))"
@@ -67,8 +154,24 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
+   "execution_count": 5,
+   "id": "469af6f9",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:22:24.598204Z",
+     "iopub.status.busy": "2023-10-10T20:22:24.597956Z",
+     "iopub.status.idle": "2023-10-10T20:22:24.602484Z",
+     "shell.execute_reply": "2023-10-10T20:22:24.601691Z"
+    },
+    "papermill": {
+     "duration": 0.015478,
+     "end_time": "2023-10-10T20:22:24.606471",
+     "exception": false,
+     "start_time": "2023-10-10T20:22:24.590993",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "@contextmanager\n",
@@ -81,8 +184,24 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
+   "execution_count": 6,
+   "id": "316f6c17",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:22:24.621126Z",
+     "iopub.status.busy": "2023-10-10T20:22:24.620845Z",
+     "iopub.status.idle": "2023-10-10T20:24:35.477364Z",
+     "shell.execute_reply": "2023-10-10T20:24:35.476322Z"
+    },
+    "papermill": {
+     "duration": 130.866953,
+     "end_time": "2023-10-10T20:24:35.479456",
+     "exception": false,
+     "start_time": "2023-10-10T20:22:24.612503",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "def generate_mfcc_feature(filepath: Path, sr: int = DEFAULT_SAMPLING_RATE, number_mfccs: int = 40):\n",
@@ -105,8 +224,24 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {},
+   "execution_count": 7,
+   "id": "acc9bae8",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:24:35.488096Z",
+     "iopub.status.busy": "2023-10-10T20:24:35.487818Z",
+     "iopub.status.idle": "2023-10-10T20:24:36.254861Z",
+     "shell.execute_reply": "2023-10-10T20:24:36.254294Z"
+    },
+    "papermill": {
+     "duration": 0.772318,
+     "end_time": "2023-10-10T20:24:36.256138",
+     "exception": false,
+     "start_time": "2023-10-10T20:24:35.483820",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [
     {
      "data": {
@@ -156,122 +291,122 @@
        "    <tr>\n",
        "      <th>0</th>\n",
        "      <td>0</td>\n",
-       "      <td>rock_62.mp3</td>\n",
-       "      <td>rock</td>\n",
-       "      <td>-571.813416</td>\n",
-       "      <td>-0.045195</td>\n",
-       "      <td>-0.776617</td>\n",
-       "      <td>0.130642</td>\n",
-       "      <td>0.740200</td>\n",
-       "      <td>-0.202103</td>\n",
-       "      <td>-0.685899</td>\n",
+       "      <td>classical_8.mp3</td>\n",
+       "      <td>classical</td>\n",
+       "      <td>-513.835449</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
        "      <td>...</td>\n",
-       "      <td>-0.571889</td>\n",
-       "      <td>0.460704</td>\n",
-       "      <td>0.534769</td>\n",
-       "      <td>-0.529890</td>\n",
-       "      <td>-0.475038</td>\n",
-       "      <td>0.583885</td>\n",
-       "      <td>0.398325</td>\n",
-       "      <td>-0.615929</td>\n",
-       "      <td>-0.313063</td>\n",
-       "      <td>0.622702</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>0.000000</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>1</th>\n",
        "      <td>1</td>\n",
-       "      <td>rock_62.mp3</td>\n",
-       "      <td>rock</td>\n",
-       "      <td>-283.595123</td>\n",
-       "      <td>104.793701</td>\n",
-       "      <td>-28.864902</td>\n",
-       "      <td>35.690403</td>\n",
-       "      <td>-4.955809</td>\n",
-       "      <td>-11.049730</td>\n",
-       "      <td>-12.609512</td>\n",
+       "      <td>classical_8.mp3</td>\n",
+       "      <td>classical</td>\n",
+       "      <td>-430.772858</td>\n",
+       "      <td>99.951447</td>\n",
+       "      <td>61.102493</td>\n",
+       "      <td>28.070032</td>\n",
+       "      <td>15.340330</td>\n",
+       "      <td>15.008282</td>\n",
+       "      <td>11.502503</td>\n",
        "      <td>...</td>\n",
-       "      <td>-8.575553</td>\n",
-       "      <td>7.450663</td>\n",
-       "      <td>3.012856</td>\n",
-       "      <td>-0.510788</td>\n",
-       "      <td>-4.468874</td>\n",
-       "      <td>-4.104988</td>\n",
-       "      <td>-0.391649</td>\n",
-       "      <td>3.345398</td>\n",
-       "      <td>2.204561</td>\n",
-       "      <td>-7.161574</td>\n",
+       "      <td>-4.017534</td>\n",
+       "      <td>-2.689229</td>\n",
+       "      <td>-2.293572</td>\n",
+       "      <td>-2.991963</td>\n",
+       "      <td>-3.644343</td>\n",
+       "      <td>-4.003089</td>\n",
+       "      <td>-4.528318</td>\n",
+       "      <td>-4.626081</td>\n",
+       "      <td>-2.798346</td>\n",
+       "      <td>0.923011</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2</th>\n",
        "      <td>2</td>\n",
-       "      <td>rock_62.mp3</td>\n",
-       "      <td>rock</td>\n",
-       "      <td>-84.322151</td>\n",
-       "      <td>101.870377</td>\n",
-       "      <td>-0.200612</td>\n",
-       "      <td>48.966591</td>\n",
-       "      <td>0.395384</td>\n",
-       "      <td>7.875898</td>\n",
-       "      <td>-8.082167</td>\n",
+       "      <td>classical_8.mp3</td>\n",
+       "      <td>classical</td>\n",
+       "      <td>-312.093567</td>\n",
+       "      <td>159.784668</td>\n",
+       "      <td>31.906086</td>\n",
+       "      <td>25.901234</td>\n",
+       "      <td>6.815042</td>\n",
+       "      <td>3.911939</td>\n",
+       "      <td>21.410465</td>\n",
        "      <td>...</td>\n",
-       "      <td>-1.941671</td>\n",
-       "      <td>3.003232</td>\n",
-       "      <td>-9.348690</td>\n",
-       "      <td>1.886054</td>\n",
-       "      <td>-5.747732</td>\n",
-       "      <td>1.687546</td>\n",
-       "      <td>0.704384</td>\n",
-       "      <td>-2.186291</td>\n",
-       "      <td>1.340472</td>\n",
-       "      <td>-1.882954</td>\n",
+       "      <td>3.267372</td>\n",
+       "      <td>-2.944059</td>\n",
+       "      <td>-7.677339</td>\n",
+       "      <td>-3.628831</td>\n",
+       "      <td>-4.110184</td>\n",
+       "      <td>-14.840838</td>\n",
+       "      <td>-3.495162</td>\n",
+       "      <td>8.776964</td>\n",
+       "      <td>-4.981813</td>\n",
+       "      <td>-10.156776</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>3</th>\n",
        "      <td>3</td>\n",
-       "      <td>rock_62.mp3</td>\n",
-       "      <td>rock</td>\n",
-       "      <td>-19.622435</td>\n",
-       "      <td>92.185410</td>\n",
-       "      <td>8.945698</td>\n",
-       "      <td>51.681049</td>\n",
-       "      <td>7.451919</td>\n",
-       "      <td>13.238035</td>\n",
-       "      <td>0.040309</td>\n",
+       "      <td>classical_8.mp3</td>\n",
+       "      <td>classical</td>\n",
+       "      <td>-243.798019</td>\n",
+       "      <td>168.200287</td>\n",
+       "      <td>16.092997</td>\n",
+       "      <td>34.248627</td>\n",
+       "      <td>3.439126</td>\n",
+       "      <td>4.217156</td>\n",
+       "      <td>16.333824</td>\n",
        "      <td>...</td>\n",
-       "      <td>0.989069</td>\n",
-       "      <td>3.732528</td>\n",
-       "      <td>-10.594652</td>\n",
-       "      <td>2.572243</td>\n",
-       "      <td>-1.231659</td>\n",
-       "      <td>3.904081</td>\n",
-       "      <td>-0.745448</td>\n",
-       "      <td>1.233542</td>\n",
-       "      <td>-2.789202</td>\n",
-       "      <td>-0.164483</td>\n",
+       "      <td>8.645699</td>\n",
+       "      <td>-5.766571</td>\n",
+       "      <td>-5.486410</td>\n",
+       "      <td>-3.288999</td>\n",
+       "      <td>-3.853479</td>\n",
+       "      <td>-19.015926</td>\n",
+       "      <td>-7.971353</td>\n",
+       "      <td>9.408128</td>\n",
+       "      <td>-3.466177</td>\n",
+       "      <td>-11.191519</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>4</th>\n",
        "      <td>4</td>\n",
-       "      <td>rock_62.mp3</td>\n",
-       "      <td>rock</td>\n",
-       "      <td>-15.719015</td>\n",
-       "      <td>84.805496</td>\n",
-       "      <td>3.012265</td>\n",
-       "      <td>46.291245</td>\n",
-       "      <td>11.866993</td>\n",
-       "      <td>14.065739</td>\n",
-       "      <td>3.912442</td>\n",
+       "      <td>classical_8.mp3</td>\n",
+       "      <td>classical</td>\n",
+       "      <td>-250.946625</td>\n",
+       "      <td>182.020203</td>\n",
+       "      <td>12.093463</td>\n",
+       "      <td>31.393484</td>\n",
+       "      <td>10.792284</td>\n",
+       "      <td>5.874646</td>\n",
+       "      <td>15.635584</td>\n",
        "      <td>...</td>\n",
-       "      <td>2.546893</td>\n",
-       "      <td>4.681245</td>\n",
-       "      <td>-10.060188</td>\n",
-       "      <td>-0.001825</td>\n",
-       "      <td>-0.918342</td>\n",
-       "      <td>1.720158</td>\n",
-       "      <td>-1.147007</td>\n",
-       "      <td>5.340800</td>\n",
-       "      <td>-6.961733</td>\n",
-       "      <td>1.635832</td>\n",
+       "      <td>6.143005</td>\n",
+       "      <td>-2.007963</td>\n",
+       "      <td>-7.107271</td>\n",
+       "      <td>-5.137182</td>\n",
+       "      <td>-7.456434</td>\n",
+       "      <td>-19.914568</td>\n",
+       "      <td>-8.567856</td>\n",
+       "      <td>4.395530</td>\n",
+       "      <td>-5.535549</td>\n",
+       "      <td>-9.764086</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>...</th>\n",
@@ -300,122 +435,122 @@
        "    <tr>\n",
        "      <th>2581</th>\n",
        "      <td>2581</td>\n",
-       "      <td>pop_84.mp3</td>\n",
-       "      <td>pop</td>\n",
-       "      <td>-20.295166</td>\n",
-       "      <td>76.309967</td>\n",
-       "      <td>-0.537112</td>\n",
-       "      <td>47.537018</td>\n",
-       "      <td>-2.753691</td>\n",
-       "      <td>20.138699</td>\n",
-       "      <td>-12.179976</td>\n",
+       "      <td>electronic_28.mp3</td>\n",
+       "      <td>electronic</td>\n",
+       "      <td>-4.531759</td>\n",
+       "      <td>85.749336</td>\n",
+       "      <td>3.175902</td>\n",
+       "      <td>29.282883</td>\n",
+       "      <td>10.520454</td>\n",
+       "      <td>28.353235</td>\n",
+       "      <td>7.040113</td>\n",
        "      <td>...</td>\n",
-       "      <td>-11.053669</td>\n",
-       "      <td>13.894144</td>\n",
-       "      <td>8.479092</td>\n",
-       "      <td>7.122847</td>\n",
-       "      <td>-14.929329</td>\n",
-       "      <td>-5.350380</td>\n",
-       "      <td>-13.549859</td>\n",
-       "      <td>-2.760207</td>\n",
-       "      <td>-6.507334</td>\n",
-       "      <td>-1.587169</td>\n",
+       "      <td>-0.076582</td>\n",
+       "      <td>10.373774</td>\n",
+       "      <td>-3.842222</td>\n",
+       "      <td>1.740638</td>\n",
+       "      <td>-4.820115</td>\n",
+       "      <td>5.424960</td>\n",
+       "      <td>-0.350912</td>\n",
+       "      <td>3.484543</td>\n",
+       "      <td>4.927905</td>\n",
+       "      <td>7.667750</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2582</th>\n",
        "      <td>2582</td>\n",
-       "      <td>pop_84.mp3</td>\n",
-       "      <td>pop</td>\n",
-       "      <td>-24.393179</td>\n",
-       "      <td>76.078751</td>\n",
-       "      <td>-0.217696</td>\n",
-       "      <td>45.393887</td>\n",
-       "      <td>-3.839055</td>\n",
-       "      <td>18.908188</td>\n",
-       "      <td>-13.727843</td>\n",
+       "      <td>electronic_28.mp3</td>\n",
+       "      <td>electronic</td>\n",
+       "      <td>-21.892481</td>\n",
+       "      <td>64.973923</td>\n",
+       "      <td>0.638062</td>\n",
+       "      <td>30.259424</td>\n",
+       "      <td>3.547897</td>\n",
+       "      <td>25.982525</td>\n",
+       "      <td>12.492319</td>\n",
        "      <td>...</td>\n",
-       "      <td>-4.695143</td>\n",
-       "      <td>15.707985</td>\n",
-       "      <td>8.134483</td>\n",
-       "      <td>-4.642361</td>\n",
-       "      <td>-16.337616</td>\n",
-       "      <td>1.411419</td>\n",
-       "      <td>-5.382087</td>\n",
-       "      <td>-2.032343</td>\n",
-       "      <td>-4.381462</td>\n",
-       "      <td>6.644224</td>\n",
+       "      <td>-4.140548</td>\n",
+       "      <td>8.154976</td>\n",
+       "      <td>-8.581367</td>\n",
+       "      <td>0.991196</td>\n",
+       "      <td>-7.903484</td>\n",
+       "      <td>5.064352</td>\n",
+       "      <td>-7.015607</td>\n",
+       "      <td>2.761323</td>\n",
+       "      <td>2.499545</td>\n",
+       "      <td>4.854020</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2583</th>\n",
        "      <td>2583</td>\n",
-       "      <td>pop_84.mp3</td>\n",
-       "      <td>pop</td>\n",
-       "      <td>-32.004326</td>\n",
-       "      <td>73.496300</td>\n",
-       "      <td>7.648635</td>\n",
-       "      <td>48.266846</td>\n",
-       "      <td>-0.455808</td>\n",
-       "      <td>17.435381</td>\n",
-       "      <td>-14.363821</td>\n",
+       "      <td>electronic_28.mp3</td>\n",
+       "      <td>electronic</td>\n",
+       "      <td>-26.937489</td>\n",
+       "      <td>59.654442</td>\n",
+       "      <td>3.198796</td>\n",
+       "      <td>36.822197</td>\n",
+       "      <td>-0.308186</td>\n",
+       "      <td>17.223629</td>\n",
+       "      <td>12.519827</td>\n",
        "      <td>...</td>\n",
-       "      <td>-2.071352</td>\n",
-       "      <td>17.130743</td>\n",
-       "      <td>0.093085</td>\n",
-       "      <td>-9.584680</td>\n",
-       "      <td>-14.788561</td>\n",
-       "      <td>3.801263</td>\n",
-       "      <td>-4.997859</td>\n",
-       "      <td>-0.796039</td>\n",
-       "      <td>-4.585654</td>\n",
-       "      <td>8.843502</td>\n",
+       "      <td>-2.150106</td>\n",
+       "      <td>6.751756</td>\n",
+       "      <td>-8.335445</td>\n",
+       "      <td>-3.181783</td>\n",
+       "      <td>-11.748012</td>\n",
+       "      <td>3.223699</td>\n",
+       "      <td>-10.738268</td>\n",
+       "      <td>-1.915628</td>\n",
+       "      <td>-2.164130</td>\n",
+       "      <td>-0.500030</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2584</th>\n",
        "      <td>2584</td>\n",
-       "      <td>pop_84.mp3</td>\n",
-       "      <td>pop</td>\n",
-       "      <td>-24.098267</td>\n",
-       "      <td>74.569794</td>\n",
-       "      <td>1.918022</td>\n",
-       "      <td>42.742210</td>\n",
-       "      <td>-2.470837</td>\n",
-       "      <td>18.779152</td>\n",
-       "      <td>-18.865677</td>\n",
+       "      <td>electronic_28.mp3</td>\n",
+       "      <td>electronic</td>\n",
+       "      <td>-37.675701</td>\n",
+       "      <td>69.980713</td>\n",
+       "      <td>6.486831</td>\n",
+       "      <td>36.693054</td>\n",
+       "      <td>-2.817516</td>\n",
+       "      <td>14.450989</td>\n",
+       "      <td>9.200117</td>\n",
        "      <td>...</td>\n",
-       "      <td>-8.722974</td>\n",
-       "      <td>14.073466</td>\n",
-       "      <td>0.714307</td>\n",
-       "      <td>-3.764169</td>\n",
-       "      <td>-16.944185</td>\n",
-       "      <td>-0.806753</td>\n",
-       "      <td>-6.225281</td>\n",
-       "      <td>2.324071</td>\n",
-       "      <td>-6.115126</td>\n",
-       "      <td>1.064405</td>\n",
+       "      <td>0.592433</td>\n",
+       "      <td>4.523458</td>\n",
+       "      <td>-8.737437</td>\n",
+       "      <td>-4.725236</td>\n",
+       "      <td>-7.613096</td>\n",
+       "      <td>1.976833</td>\n",
+       "      <td>-9.998651</td>\n",
+       "      <td>-1.651334</td>\n",
+       "      <td>-1.831298</td>\n",
+       "      <td>-1.857335</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>2585</th>\n",
        "      <td>2585</td>\n",
-       "      <td>pop_84.mp3</td>\n",
-       "      <td>pop</td>\n",
-       "      <td>-49.109211</td>\n",
-       "      <td>77.647949</td>\n",
-       "      <td>-3.673396</td>\n",
-       "      <td>42.419292</td>\n",
-       "      <td>-1.558257</td>\n",
-       "      <td>18.824373</td>\n",
-       "      <td>-23.748917</td>\n",
+       "      <td>electronic_28.mp3</td>\n",
+       "      <td>electronic</td>\n",
+       "      <td>-69.959473</td>\n",
+       "      <td>90.579102</td>\n",
+       "      <td>12.684738</td>\n",
+       "      <td>39.559166</td>\n",
+       "      <td>-2.489999</td>\n",
+       "      <td>13.447134</td>\n",
+       "      <td>2.889965</td>\n",
        "      <td>...</td>\n",
-       "      <td>-10.903637</td>\n",
-       "      <td>10.563424</td>\n",
-       "      <td>3.245042</td>\n",
-       "      <td>3.819183</td>\n",
-       "      <td>-15.246656</td>\n",
-       "      <td>-0.539900</td>\n",
-       "      <td>-7.361567</td>\n",
-       "      <td>7.688834</td>\n",
-       "      <td>-3.895716</td>\n",
-       "      <td>-3.842279</td>\n",
+       "      <td>2.153978</td>\n",
+       "      <td>6.035127</td>\n",
+       "      <td>-8.183851</td>\n",
+       "      <td>-0.212283</td>\n",
+       "      <td>-1.487655</td>\n",
+       "      <td>-2.779953</td>\n",
+       "      <td>-5.455588</td>\n",
+       "      <td>0.809570</td>\n",
+       "      <td>-1.209018</td>\n",
+       "      <td>-1.631956</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
@@ -423,49 +558,62 @@
        "</div>"
       ],
       "text/plain": [
-       "      sample     filename label           0           1          2          3  \\\n",
-       "0          0  rock_62.mp3  rock -571.813416   -0.045195  -0.776617   0.130642   \n",
-       "1          1  rock_62.mp3  rock -283.595123  104.793701 -28.864902  35.690403   \n",
-       "2          2  rock_62.mp3  rock  -84.322151  101.870377  -0.200612  48.966591   \n",
-       "3          3  rock_62.mp3  rock  -19.622435   92.185410   8.945698  51.681049   \n",
-       "4          4  rock_62.mp3  rock  -15.719015   84.805496   3.012265  46.291245   \n",
-       "...      ...          ...   ...         ...         ...        ...        ...   \n",
-       "2581    2581   pop_84.mp3   pop  -20.295166   76.309967  -0.537112  47.537018   \n",
-       "2582    2582   pop_84.mp3   pop  -24.393179   76.078751  -0.217696  45.393887   \n",
-       "2583    2583   pop_84.mp3   pop  -32.004326   73.496300   7.648635  48.266846   \n",
-       "2584    2584   pop_84.mp3   pop  -24.098267   74.569794   1.918022  42.742210   \n",
-       "2585    2585   pop_84.mp3   pop  -49.109211   77.647949  -3.673396  42.419292   \n",
+       "      sample           filename       label           0           1  \\\n",
+       "0          0    classical_8.mp3   classical -513.835449    0.000000   \n",
+       "1          1    classical_8.mp3   classical -430.772858   99.951447   \n",
+       "2          2    classical_8.mp3   classical -312.093567  159.784668   \n",
+       "3          3    classical_8.mp3   classical -243.798019  168.200287   \n",
+       "4          4    classical_8.mp3   classical -250.946625  182.020203   \n",
+       "...      ...                ...         ...         ...         ...   \n",
+       "2581    2581  electronic_28.mp3  electronic   -4.531759   85.749336   \n",
+       "2582    2582  electronic_28.mp3  electronic  -21.892481   64.973923   \n",
+       "2583    2583  electronic_28.mp3  electronic  -26.937489   59.654442   \n",
+       "2584    2584  electronic_28.mp3  electronic  -37.675701   69.980713   \n",
+       "2585    2585  electronic_28.mp3  electronic  -69.959473   90.579102   \n",
+       "\n",
+       "              2          3          4          5          6  ...        30  \\\n",
+       "0      0.000000   0.000000   0.000000   0.000000   0.000000  ...  0.000000   \n",
+       "1     61.102493  28.070032  15.340330  15.008282  11.502503  ... -4.017534   \n",
+       "2     31.906086  25.901234   6.815042   3.911939  21.410465  ...  3.267372   \n",
+       "3     16.092997  34.248627   3.439126   4.217156  16.333824  ...  8.645699   \n",
+       "4     12.093463  31.393484  10.792284   5.874646  15.635584  ...  6.143005   \n",
+       "...         ...        ...        ...        ...        ...  ...       ...   \n",
+       "2581   3.175902  29.282883  10.520454  28.353235   7.040113  ... -0.076582   \n",
+       "2582   0.638062  30.259424   3.547897  25.982525  12.492319  ... -4.140548   \n",
+       "2583   3.198796  36.822197  -0.308186  17.223629  12.519827  ... -2.150106   \n",
+       "2584   6.486831  36.693054  -2.817516  14.450989   9.200117  ...  0.592433   \n",
+       "2585  12.684738  39.559166  -2.489999  13.447134   2.889965  ...  2.153978   \n",
        "\n",
-       "              4          5          6  ...         30         31         32  \\\n",
-       "0      0.740200  -0.202103  -0.685899  ...  -0.571889   0.460704   0.534769   \n",
-       "1     -4.955809 -11.049730 -12.609512  ...  -8.575553   7.450663   3.012856   \n",
-       "2      0.395384   7.875898  -8.082167  ...  -1.941671   3.003232  -9.348690   \n",
-       "3      7.451919  13.238035   0.040309  ...   0.989069   3.732528 -10.594652   \n",
-       "4     11.866993  14.065739   3.912442  ...   2.546893   4.681245 -10.060188   \n",
-       "...         ...        ...        ...  ...        ...        ...        ...   \n",
-       "2581  -2.753691  20.138699 -12.179976  ... -11.053669  13.894144   8.479092   \n",
-       "2582  -3.839055  18.908188 -13.727843  ...  -4.695143  15.707985   8.134483   \n",
-       "2583  -0.455808  17.435381 -14.363821  ...  -2.071352  17.130743   0.093085   \n",
-       "2584  -2.470837  18.779152 -18.865677  ...  -8.722974  14.073466   0.714307   \n",
-       "2585  -1.558257  18.824373 -23.748917  ... -10.903637  10.563424   3.245042   \n",
+       "             31        32        33         34         35         36  \\\n",
+       "0      0.000000  0.000000  0.000000   0.000000   0.000000   0.000000   \n",
+       "1     -2.689229 -2.293572 -2.991963  -3.644343  -4.003089  -4.528318   \n",
+       "2     -2.944059 -7.677339 -3.628831  -4.110184 -14.840838  -3.495162   \n",
+       "3     -5.766571 -5.486410 -3.288999  -3.853479 -19.015926  -7.971353   \n",
+       "4     -2.007963 -7.107271 -5.137182  -7.456434 -19.914568  -8.567856   \n",
+       "...         ...       ...       ...        ...        ...        ...   \n",
+       "2581  10.373774 -3.842222  1.740638  -4.820115   5.424960  -0.350912   \n",
+       "2582   8.154976 -8.581367  0.991196  -7.903484   5.064352  -7.015607   \n",
+       "2583   6.751756 -8.335445 -3.181783 -11.748012   3.223699 -10.738268   \n",
+       "2584   4.523458 -8.737437 -4.725236  -7.613096   1.976833  -9.998651   \n",
+       "2585   6.035127 -8.183851 -0.212283  -1.487655  -2.779953  -5.455588   \n",
        "\n",
-       "            33         34        35         36        37        38        39  \n",
-       "0    -0.529890  -0.475038  0.583885   0.398325 -0.615929 -0.313063  0.622702  \n",
-       "1    -0.510788  -4.468874 -4.104988  -0.391649  3.345398  2.204561 -7.161574  \n",
-       "2     1.886054  -5.747732  1.687546   0.704384 -2.186291  1.340472 -1.882954  \n",
-       "3     2.572243  -1.231659  3.904081  -0.745448  1.233542 -2.789202 -0.164483  \n",
-       "4    -0.001825  -0.918342  1.720158  -1.147007  5.340800 -6.961733  1.635832  \n",
-       "...        ...        ...       ...        ...       ...       ...       ...  \n",
-       "2581  7.122847 -14.929329 -5.350380 -13.549859 -2.760207 -6.507334 -1.587169  \n",
-       "2582 -4.642361 -16.337616  1.411419  -5.382087 -2.032343 -4.381462  6.644224  \n",
-       "2583 -9.584680 -14.788561  3.801263  -4.997859 -0.796039 -4.585654  8.843502  \n",
-       "2584 -3.764169 -16.944185 -0.806753  -6.225281  2.324071 -6.115126  1.064405  \n",
-       "2585  3.819183 -15.246656 -0.539900  -7.361567  7.688834 -3.895716 -3.842279  \n",
+       "            37        38         39  \n",
+       "0     0.000000  0.000000   0.000000  \n",
+       "1    -4.626081 -2.798346   0.923011  \n",
+       "2     8.776964 -4.981813 -10.156776  \n",
+       "3     9.408128 -3.466177 -11.191519  \n",
+       "4     4.395530 -5.535549  -9.764086  \n",
+       "...        ...       ...        ...  \n",
+       "2581  3.484543  4.927905   7.667750  \n",
+       "2582  2.761323  2.499545   4.854020  \n",
+       "2583 -1.915628 -2.164130  -0.500030  \n",
+       "2584 -1.651334 -1.831298  -1.857335  \n",
+       "2585  0.809570 -1.209018  -1.631956  \n",
        "\n",
        "[1029854 rows x 43 columns]"
       ]
      },
-     "execution_count": 6,
+     "execution_count": 7,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -487,8 +635,24 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {},
+   "execution_count": 8,
+   "id": "0abf745b",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:24:36.270995Z",
+     "iopub.status.busy": "2023-10-10T20:24:36.270774Z",
+     "iopub.status.idle": "2023-10-10T20:25:07.468362Z",
+     "shell.execute_reply": "2023-10-10T20:25:07.467787Z"
+    },
+    "papermill": {
+     "duration": 31.206394,
+     "end_time": "2023-10-10T20:25:07.470045",
+     "exception": false,
+     "start_time": "2023-10-10T20:24:36.263651",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "# outputs\n",
@@ -514,9 +678,28 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.9"
+   "version": "3.10.13"
+  },
+  "papermill": {
+   "default_parameters": {},
+   "duration": 168.079285,
+   "end_time": "2023-10-10T20:25:08.092566",
+   "environment_variables": {},
+   "exception": null,
+   "input_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/2_generate_features.ipynb",
+   "output_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/2_generate_features.ipynb",
+   "parameters": {
+    "INPUT_PATHS": {
+     "audio_tar": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/2_generate_features/input/emotifymusic.tar.gz"
+    },
+    "OUTPUT_PATHS": {
+     "raw_features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/2_generate_features/output/raw_features.csv"
+    }
+   },
+   "start_time": "2023-10-10T20:22:20.013281",
+   "version": "2.4.0"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 1
-}
+ "nbformat_minor": 5
+}
\ No newline at end of file
diff --git a/notebooks/3_aggregate_features.ipynb b/notebooks/3_aggregate_features.ipynb
index 84a3f978993d3566cf13413af61126ca335e5238..9dfa0965c4ef81176a7dd959dbff279d742479b7 100644
--- a/notebooks/3_aggregate_features.ipynb
+++ b/notebooks/3_aggregate_features.ipynb
@@ -2,7 +2,17 @@
  "cells": [
   {
    "cell_type": "markdown",
-   "metadata": {},
+   "id": "f48a4573",
+   "metadata": {
+    "papermill": {
+     "duration": 0.005214,
+     "end_time": "2023-10-10T20:29:39.798977",
+     "exception": false,
+     "start_time": "2023-10-10T20:29:39.793763",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "source": [
     "# Aggregate MFCC Features\n",
     "\n",
@@ -12,19 +22,57 @@
   {
    "cell_type": "code",
    "execution_count": 1,
+   "id": "389576b8",
    "metadata": {
-    "collapsed": true
+    "ExecuteTime": {
+     "end_time": "2023-08-14T15:32:41.535589478Z",
+     "start_time": "2023-08-14T15:32:40.986222405Z"
+    },
+    "collapsed": true,
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:29:39.811180Z",
+     "iopub.status.busy": "2023-10-10T20:29:39.810870Z",
+     "iopub.status.idle": "2023-10-10T20:29:40.112894Z",
+     "shell.execute_reply": "2023-10-10T20:29:40.112151Z"
+    },
+    "jupyter": {
+     "outputs_hidden": true
+    },
+    "papermill": {
+     "duration": 0.309491,
+     "end_time": "2023-10-10T20:29:40.114738",
+     "exception": false,
+     "start_time": "2023-10-10T20:29:39.805247",
+     "status": "completed"
+    },
+    "tags": []
    },
    "outputs": [],
    "source": [
+    "from pathlib import Path\n",
+    "\n",
     "import pandas as pd\n",
     "from definitions import BASE_PATH"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 2,
+   "id": "26f640e0",
    "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:29:40.122700Z",
+     "iopub.status.busy": "2023-10-10T20:29:40.122309Z",
+     "iopub.status.idle": "2023-10-10T20:29:40.127330Z",
+     "shell.execute_reply": "2023-10-10T20:29:40.126502Z"
+    },
+    "papermill": {
+     "duration": 0.010905,
+     "end_time": "2023-10-10T20:29:40.128867",
+     "exception": false,
+     "start_time": "2023-10-10T20:29:40.117962",
+     "status": "completed"
+    },
     "tags": [
      "parameters"
     ]
@@ -45,20 +93,83 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
+   "execution_count": 3,
+   "id": "70fd8bf2",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:29:40.134992Z",
+     "iopub.status.busy": "2023-10-10T20:29:40.134692Z",
+     "iopub.status.idle": "2023-10-10T20:29:40.138145Z",
+     "shell.execute_reply": "2023-10-10T20:29:40.137550Z"
+    },
+    "papermill": {
+     "duration": 0.008147,
+     "end_time": "2023-10-10T20:29:40.139591",
+     "exception": false,
+     "start_time": "2023-10-10T20:29:40.131444",
+     "status": "completed"
+    },
+    "tags": [
+     "injected-parameters"
+    ]
+   },
+   "outputs": [],
+   "source": [
+    "# Parameters\n",
+    "INPUT_PATHS = {\n",
+    "    \"raw_features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/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",
+    "}\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "c5d9d980",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:29:40.145046Z",
+     "iopub.status.busy": "2023-10-10T20:29:40.144752Z",
+     "iopub.status.idle": "2023-10-10T20:29:44.318757Z",
+     "shell.execute_reply": "2023-10-10T20:29:44.318022Z"
+    },
+    "papermill": {
+     "duration": 4.179755,
+     "end_time": "2023-10-10T20:29:44.321578",
+     "exception": false,
+     "start_time": "2023-10-10T20:29:40.141823",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "# inputs\n",
-    "assert INPUT_PATH.exists() and INPUT_PATH.is_dir()\n",
-    "\n",
-    "raw_features = pd.read_csv(INPUT_PATH / \"raw_features.csv\", index_col=False)"
+    "raw_features = pd.read_csv(INPUT_PATHS[\"raw_features\"], index_col=False)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {},
+   "execution_count": 5,
+   "id": "99f75f47",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:29:44.327809Z",
+     "iopub.status.busy": "2023-10-10T20:29:44.327547Z",
+     "iopub.status.idle": "2023-10-10T20:29:48.186600Z",
+     "shell.execute_reply": "2023-10-10T20:29:48.186091Z"
+    },
+    "papermill": {
+     "duration": 3.865747,
+     "end_time": "2023-10-10T20:29:48.189794",
+     "exception": false,
+     "start_time": "2023-10-10T20:29:44.324047",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [
     {
      "data": {
@@ -136,10 +247,10 @@
        "      <td>-562.85785</td>\n",
        "      <td>-96.164795</td>\n",
        "      <td>-219.259016</td>\n",
-       "      <td>53.561838</td>\n",
+       "      <td>53.561839</td>\n",
        "      <td>-0.772320</td>\n",
        "      <td>0.029056</td>\n",
-       "      <td>259.63270</td>\n",
+       "      <td>259.63272</td>\n",
        "      <td>215.094182</td>\n",
        "      <td>...</td>\n",
        "      <td>-27.458416</td>\n",
@@ -147,8 +258,8 @@
        "      <td>0.484271</td>\n",
        "      <td>8.660648</td>\n",
        "      <td>-0.479016</td>\n",
-       "      <td>-28.989983</td>\n",
-       "      <td>27.533710</td>\n",
+       "      <td>-28.989979</td>\n",
+       "      <td>27.533707</td>\n",
        "      <td>0.952658</td>\n",
        "      <td>10.477735</td>\n",
        "      <td>-0.185771</td>\n",
@@ -172,7 +283,7 @@
        "      <td>8.185075</td>\n",
        "      <td>0.208425</td>\n",
        "      <td>-38.095375</td>\n",
-       "      <td>31.397880</td>\n",
+       "      <td>31.397882</td>\n",
        "      <td>-1.494916</td>\n",
        "      <td>10.917299</td>\n",
        "      <td>0.020985</td>\n",
@@ -195,8 +306,8 @@
        "      <td>-3.781627</td>\n",
        "      <td>9.191043</td>\n",
        "      <td>0.260886</td>\n",
-       "      <td>-22.667440</td>\n",
-       "      <td>50.992897</td>\n",
+       "      <td>-22.667439</td>\n",
+       "      <td>50.992905</td>\n",
        "      <td>1.600777</td>\n",
        "      <td>10.125545</td>\n",
        "      <td>0.595763</td>\n",
@@ -212,14 +323,14 @@
        "      <td>-0.366586</td>\n",
        "      <td>0.000000</td>\n",
        "      <td>194.26416</td>\n",
-       "      <td>148.226647</td>\n",
+       "      <td>148.226648</td>\n",
        "      <td>...</td>\n",
-       "      <td>-44.843810</td>\n",
+       "      <td>-44.843815</td>\n",
        "      <td>28.490644</td>\n",
        "      <td>-6.242015</td>\n",
        "      <td>10.546545</td>\n",
        "      <td>0.341848</td>\n",
-       "      <td>-25.040888</td>\n",
+       "      <td>-25.040886</td>\n",
        "      <td>46.878204</td>\n",
        "      <td>1.844494</td>\n",
        "      <td>11.160392</td>\n",
@@ -270,7 +381,7 @@
        "      <td>-24.712723</td>\n",
        "      <td>23.410387</td>\n",
        "      <td>-4.502398</td>\n",
-       "      <td>6.687984</td>\n",
+       "      <td>6.687983</td>\n",
        "      <td>0.238807</td>\n",
        "    </tr>\n",
        "    <tr>\n",
@@ -278,21 +389,21 @@
        "      <td>rock_96.mp3</td>\n",
        "      <td>rock</td>\n",
        "      <td>-541.23600</td>\n",
-       "      <td>27.163334</td>\n",
+       "      <td>27.163332</td>\n",
        "      <td>-119.113996</td>\n",
        "      <td>58.420684</td>\n",
        "      <td>-0.957699</td>\n",
-       "      <td>-7.415961</td>\n",
+       "      <td>-7.415959</td>\n",
        "      <td>210.49246</td>\n",
        "      <td>125.453699</td>\n",
        "      <td>...</td>\n",
        "      <td>-37.584858</td>\n",
-       "      <td>28.087936</td>\n",
+       "      <td>28.087940</td>\n",
        "      <td>-9.704238</td>\n",
        "      <td>8.447620</td>\n",
        "      <td>0.112760</td>\n",
        "      <td>-38.147890</td>\n",
-       "      <td>21.814402</td>\n",
+       "      <td>21.814400</td>\n",
        "      <td>-8.249507</td>\n",
        "      <td>7.807756</td>\n",
        "      <td>0.071968</td>\n",
@@ -316,7 +427,7 @@
        "      <td>7.727378</td>\n",
        "      <td>0.207489</td>\n",
        "      <td>-29.497524</td>\n",
-       "      <td>25.410654</td>\n",
+       "      <td>25.410656</td>\n",
        "      <td>-3.356614</td>\n",
        "      <td>8.170526</td>\n",
        "      <td>0.160330</td>\n",
@@ -331,16 +442,16 @@
        "      <td>52.444200</td>\n",
        "      <td>-1.705641</td>\n",
        "      <td>0.000000</td>\n",
-       "      <td>187.04274</td>\n",
+       "      <td>187.04272</td>\n",
        "      <td>96.440874</td>\n",
        "      <td>...</td>\n",
-       "      <td>-26.967848</td>\n",
-       "      <td>8.714737</td>\n",
+       "      <td>-26.967852</td>\n",
+       "      <td>8.714736</td>\n",
        "      <td>-9.511491</td>\n",
        "      <td>5.551820</td>\n",
        "      <td>-0.025604</td>\n",
-       "      <td>-23.020084</td>\n",
-       "      <td>13.948638</td>\n",
+       "      <td>-23.020082</td>\n",
+       "      <td>13.948639</td>\n",
        "      <td>-2.664985</td>\n",
        "      <td>5.051498</td>\n",
        "      <td>-0.258407</td>\n",
@@ -354,17 +465,17 @@
        "      <td>-49.380943</td>\n",
        "      <td>54.045627</td>\n",
        "      <td>-0.863093</td>\n",
-       "      <td>-32.930653</td>\n",
+       "      <td>-32.930650</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.894963</td>\n",
+       "      <td>5.894962</td>\n",
        "      <td>0.390705</td>\n",
        "      <td>-20.983192</td>\n",
-       "      <td>29.312023</td>\n",
+       "      <td>29.312021</td>\n",
        "      <td>-0.321836</td>\n",
        "      <td>6.571660</td>\n",
        "      <td>0.384794</td>\n",
@@ -383,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.163334 -119.113996   \n",
+       "396        rock_96.mp3       rock -541.23600   27.163332 -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.561838 -0.772320   0.029056  259.63270  215.094182  ... -27.458416   \n",
+       "1    53.561839 -0.772320   0.029056  259.63272  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.226647  ... -44.843810   \n",
+       "4    52.191182 -0.366586   0.000000  194.26416  148.226648  ... -44.843815   \n",
        "..         ...       ...        ...        ...         ...  ...        ...   \n",
        "395  76.869437 -0.201055 -89.948746  201.18045  111.724191  ... -27.043941   \n",
-       "396  58.420684 -0.957699  -7.415961  210.49246  125.453699  ... -37.584858   \n",
+       "396  58.420684 -0.957699  -7.415959  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.04274   96.440874  ... -26.967848   \n",
-       "399  54.045627 -0.863093 -32.930653  191.73538   93.971242  ... -21.929403   \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",
        "\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.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",
+       "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",
        "..         ...       ...        ...       ...        ...        ...       ...   \n",
        "395  22.451445 -7.234634   8.471853  0.753855 -24.712723  23.410387 -4.502398   \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",
+       "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",
        "\n",
        "        39_std   39_skew  \n",
        "0    15.285639  0.171462  \n",
@@ -421,7 +532,7 @@
        "3    10.125545  0.595763  \n",
        "4    11.160392  0.503120  \n",
        "..         ...       ...  \n",
-       "395   6.687984  0.238807  \n",
+       "395   6.687983  0.238807  \n",
        "396   7.807756  0.071968  \n",
        "397   8.170526  0.160330  \n",
        "398   5.051498 -0.258407  \n",
@@ -430,7 +541,7 @@
        "[400 rows x 202 columns]"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 5,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -456,15 +567,32 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {},
+   "execution_count": 6,
+   "id": "4ac5c765",
+   "metadata": {
+    "execution": {
+     "iopub.execute_input": "2023-10-10T20:29:48.197061Z",
+     "iopub.status.busy": "2023-10-10T20:29:48.196826Z",
+     "iopub.status.idle": "2023-10-10T20:29:48.273847Z",
+     "shell.execute_reply": "2023-10-10T20:29:48.273103Z"
+    },
+    "papermill": {
+     "duration": 0.082818,
+     "end_time": "2023-10-10T20:29:48.275380",
+     "exception": false,
+     "start_time": "2023-10-10T20:29:48.192562",
+     "status": "completed"
+    },
+    "tags": []
+   },
    "outputs": [],
    "source": [
     "# outputs\n",
-    "OUTPUT_PATH.mkdir(parents=True, exist_ok=True)\n",
+    "aggregated_features_path = Path(OUTPUT_PATHS[\"aggregated_features\"]).resolve()\n",
+    "aggregated_features_path.parent.mkdir(parents=True, exist_ok=True)\n",
     "\n",
     "output = mfcc_merged\n",
-    "output.to_csv(OUTPUT_PATH / \"features.csv\", index=False)"
+    "output.to_csv(aggregated_features_path, index=False)"
    ]
   }
  ],
@@ -485,9 +613,28 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.9"
+   "version": "3.10.13"
+  },
+  "papermill": {
+   "default_parameters": {},
+   "duration": 9.80761,
+   "end_time": "2023-10-10T20:29:48.599137",
+   "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",
+   "parameters": {
+    "INPUT_PATHS": {
+     "raw_features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/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"
+    }
+   },
+   "start_time": "2023-10-10T20:29:38.791527",
+   "version": "2.4.0"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 1
-}
+ "nbformat_minor": 5
+}
\ No newline at end of file
diff --git a/notebooks/4_split.ipynb b/notebooks/4_split.ipynb
index c0e5c137f8921859ceccfc40d6bc53bb387d9c2f..371f87d8020e8c5e32f3fd71f1815f9d4274225e 100644
--- a/notebooks/4_split.ipynb
+++ b/notebooks/4_split.ipynb
@@ -1,67 +1,38 @@
 {
  "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "462c6dd4",
-   "metadata": {
-    "execution": {
-     "iopub.execute_input": "2023-02-22T22:06:53.776834Z",
-     "iopub.status.busy": "2023-02-22T22:06:53.776344Z",
-     "iopub.status.idle": "2023-02-22T22:06:53.784674Z",
-     "shell.execute_reply": "2023-02-22T22:06:53.783920Z"
-    },
-    "papermill": {
-     "duration": 0.01461,
-     "end_time": "2023-02-22T22:06:53.786525",
-     "exception": false,
-     "start_time": "2023-02-22T22:06:53.771915",
-     "status": "completed"
-    },
-    "tags": [
-     "injected-parameters"
-    ]
-   },
-   "outputs": [],
-   "source": [
-    "# Parameters\n",
-    "INPUT_PATHS = {\"features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/input/features.csv\"}\n",
-    "OUTPUT_PATHS = {\"split\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/output/split.csv\"}\n"
-   ]
-  },
   {
    "cell_type": "markdown",
    "id": "e92b4fe9",
    "metadata": {
     "papermill": {
-     "duration": 0.003942,
-     "end_time": "2023-02-22T22:06:53.794630",
+     "duration": 0.005822,
+     "end_time": "2023-10-10T20:29:52.589509",
      "exception": false,
-     "start_time": "2023-02-22T22:06:53.790688",
+     "start_time": "2023-10-10T20:29:52.583687",
      "status": "completed"
     },
     "tags": []
    },
    "source": [
-    "# Split the given dataframe into a test and a train set"
+    "# Split the Features into Train and Test Set"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "id": "5f1fae44",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T22:06:53.802861Z",
-     "iopub.status.busy": "2023-02-22T22:06:53.802570Z",
-     "iopub.status.idle": "2023-02-22T22:06:54.204257Z",
-     "shell.execute_reply": "2023-02-22T22:06:54.203456Z"
+     "iopub.execute_input": "2023-10-10T20:29:52.604063Z",
+     "iopub.status.busy": "2023-10-10T20:29:52.602712Z",
+     "iopub.status.idle": "2023-10-10T20:29:52.903037Z",
+     "shell.execute_reply": "2023-10-10T20:29:52.902341Z"
     },
     "papermill": {
-     "duration": 0.407755,
-     "end_time": "2023-02-22T22:06:54.206303",
+     "duration": 0.310276,
+     "end_time": "2023-10-10T20:29:52.905670",
      "exception": false,
-     "start_time": "2023-02-22T22:06:53.798548",
+     "start_time": "2023-10-10T20:29:52.595394",
      "status": "completed"
     },
     "tags": []
@@ -75,24 +46,26 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 2,
    "id": "01de1b27",
    "metadata": {
     "collapsed": false,
     "execution": {
-     "iopub.execute_input": "2023-02-22T22:06:54.218120Z",
-     "iopub.status.busy": "2023-02-22T22:06:54.217222Z",
-     "iopub.status.idle": "2023-02-22T22:06:54.225007Z",
-     "shell.execute_reply": "2023-02-22T22:06:54.221894Z"
+     "iopub.execute_input": "2023-10-10T20:29:52.911502Z",
+     "iopub.status.busy": "2023-10-10T20:29:52.911091Z",
+     "iopub.status.idle": "2023-10-10T20:29:52.915967Z",
+     "shell.execute_reply": "2023-10-10T20:29:52.915019Z"
     },
     "papermill": {
-     "duration": 0.016949,
-     "end_time": "2023-02-22T22:06:54.227114",
+     "duration": 0.009356,
+     "end_time": "2023-10-10T20:29:52.917383",
      "exception": false,
-     "start_time": "2023-02-22T22:06:54.210165",
+     "start_time": "2023-10-10T20:29:52.908027",
      "status": "completed"
     },
-    "tags": []
+    "tags": [
+     "parameters"
+    ]
    },
    "outputs": [],
    "source": [
@@ -109,78 +82,53 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
-   "id": "85fd7edd",
+   "execution_count": 3,
+   "id": "d8169758",
    "metadata": {
-    "collapsed": false,
     "execution": {
-     "iopub.execute_input": "2023-02-22T22:06:54.235495Z",
-     "iopub.status.busy": "2023-02-22T22:06:54.235185Z",
-     "iopub.status.idle": "2023-02-22T22:06:54.238945Z",
-     "shell.execute_reply": "2023-02-22T22:06:54.238230Z"
+     "iopub.execute_input": "2023-10-10T20:29:52.922218Z",
+     "iopub.status.busy": "2023-10-10T20:29:52.921930Z",
+     "iopub.status.idle": "2023-10-10T20:29:52.925542Z",
+     "shell.execute_reply": "2023-10-10T20:29:52.924834Z"
     },
     "papermill": {
-     "duration": 0.010662,
-     "end_time": "2023-02-22T22:06:54.240943",
+     "duration": 0.007457,
+     "end_time": "2023-10-10T20:29:52.926785",
      "exception": false,
-     "start_time": "2023-02-22T22:06:54.230281",
+     "start_time": "2023-10-10T20:29:52.919328",
      "status": "completed"
     },
-    "tags": []
+    "tags": [
+     "injected-parameters"
+    ]
    },
    "outputs": [],
    "source": [
     "# Parameters\n",
-    "INPUT_PATHS = {\"features\": \"/home/lukas/OneDrive-TU/Uni/Bachelorarbeit/repos/dbrepo-ismir/tmp/4_split/input/features.csv\"}\n",
-    "OUTPUT_PATHS = {\"split\": \"/home/lukas/OneDrive-TU/Uni/Bachelorarbeit/repos/dbrepo-ismir/tmp/4_split/output/split.csv\"}\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "id": "95bb5d4a",
-   "metadata": {
-    "collapsed": false,
-    "execution": {
-     "iopub.execute_input": "2023-02-22T22:06:54.249999Z",
-     "iopub.status.busy": "2023-02-22T22:06:54.249651Z",
-     "iopub.status.idle": "2023-02-22T22:06:54.255623Z",
-     "shell.execute_reply": "2023-02-22T22:06:54.254792Z"
-    },
-    "papermill": {
-     "duration": 0.013695,
-     "end_time": "2023-02-22T22:06:54.258076",
-     "exception": false,
-     "start_time": "2023-02-22T22:06:54.244381",
-     "status": "completed"
-    },
-    "tags": []
-   },
-   "outputs": [],
-   "source": [
-    "if not INPUT_PATHS[\"features\"]:\n",
-    "    INPUT_PATHS[\"features\"] = (BASE_PATH / \"tmp\" / \"4_split\" / \"input\" / \"features.csv\").__str__()\n",
-    "\n",
-    "if not OUTPUT_PATHS[\"split\"]:\n",
-    "    OUTPUT_PATHS[\"split\"] = (BASE_PATH / \"tmp\" / \"4_split\" / \"output\" / \"split.csv\").__str__()"
+    "INPUT_PATHS = {\n",
+    "    \"aggregated_features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/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",
+    "}\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 4,
    "id": "a4cc6800",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T22:06:54.266338Z",
-     "iopub.status.busy": "2023-02-22T22:06:54.266018Z",
-     "iopub.status.idle": "2023-02-22T22:06:54.302050Z",
-     "shell.execute_reply": "2023-02-22T22:06:54.301191Z"
+     "iopub.execute_input": "2023-10-10T20:29:52.931298Z",
+     "iopub.status.busy": "2023-10-10T20:29:52.931087Z",
+     "iopub.status.idle": "2023-10-10T20:29:52.953647Z",
+     "shell.execute_reply": "2023-10-10T20:29:52.952884Z"
     },
     "papermill": {
-     "duration": 0.043378,
-     "end_time": "2023-02-22T22:06:54.304654",
+     "duration": 0.026646,
+     "end_time": "2023-10-10T20:29:52.955241",
      "exception": false,
-     "start_time": "2023-02-22T22:06:54.261276",
+     "start_time": "2023-10-10T20:29:52.928595",
      "status": "completed"
     },
     "tags": []
@@ -192,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-02-22T22:06:54.314672Z",
-     "iopub.status.busy": "2023-02-22T22:06:54.313277Z",
-     "iopub.status.idle": "2023-02-22T22:06:54.325516Z",
-     "shell.execute_reply": "2023-02-22T22:06:54.324791Z"
+     "iopub.execute_input": "2023-10-10T20:29:52.960691Z",
+     "iopub.status.busy": "2023-10-10T20:29:52.960246Z",
+     "iopub.status.idle": "2023-10-10T20:29:52.967937Z",
+     "shell.execute_reply": "2023-10-10T20:29:52.967204Z"
     },
     "papermill": {
-     "duration": 0.019722,
-     "end_time": "2023-02-22T22:06:54.327847",
+     "duration": 0.011851,
+     "end_time": "2023-10-10T20:29:52.969363",
      "exception": false,
-     "start_time": "2023-02-22T22:06:54.308125",
+     "start_time": "2023-10-10T20:29:52.957512",
      "status": "completed"
     },
     "tags": []
@@ -236,20 +184,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 6,
    "id": "091e0641",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T22:06:54.339778Z",
-     "iopub.status.busy": "2023-02-22T22:06:54.337779Z",
-     "iopub.status.idle": "2023-02-22T22:06:54.368008Z",
-     "shell.execute_reply": "2023-02-22T22:06:54.365597Z"
+     "iopub.execute_input": "2023-10-10T20:29:52.976324Z",
+     "iopub.status.busy": "2023-10-10T20:29:52.975376Z",
+     "iopub.status.idle": "2023-10-10T20:29:52.997935Z",
+     "shell.execute_reply": "2023-10-10T20:29:52.996626Z"
     },
     "papermill": {
-     "duration": 0.038635,
-     "end_time": "2023-02-22T22:06:54.370257",
+     "duration": 0.028011,
+     "end_time": "2023-10-10T20:29:52.999430",
      "exception": false,
-     "start_time": "2023-02-22T22:06:54.331622",
+     "start_time": "2023-10-10T20:29:52.971419",
      "status": "completed"
     },
     "tags": []
@@ -284,7 +232,7 @@
        "    <tr>\n",
        "      <th>0</th>\n",
        "      <td>classical_1.mp3</td>\n",
-       "      <td>True</td>\n",
+       "      <td>False</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>1</th>\n",
@@ -294,7 +242,7 @@
        "    <tr>\n",
        "      <th>2</th>\n",
        "      <td>classical_100.mp3</td>\n",
-       "      <td>True</td>\n",
+       "      <td>False</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>3</th>\n",
@@ -343,9 +291,9 @@
       ],
       "text/plain": [
        "              filename  train\n",
-       "0      classical_1.mp3   True\n",
+       "0      classical_1.mp3  False\n",
        "1     classical_10.mp3   True\n",
-       "2    classical_100.mp3   True\n",
+       "2    classical_100.mp3  False\n",
        "3     classical_11.mp3   True\n",
        "4     classical_12.mp3   True\n",
        "..                 ...    ...\n",
@@ -358,7 +306,7 @@
        "[400 rows x 2 columns]"
       ]
      },
-     "execution_count": 8,
+     "execution_count": 6,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -369,20 +317,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 7,
    "id": "7b11b8bb",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T22:06:54.382100Z",
-     "iopub.status.busy": "2023-02-22T22:06:54.380345Z",
-     "iopub.status.idle": "2023-02-22T22:06:54.390638Z",
-     "shell.execute_reply": "2023-02-22T22:06:54.389791Z"
+     "iopub.execute_input": "2023-10-10T20:29:53.004736Z",
+     "iopub.status.busy": "2023-10-10T20:29:53.004384Z",
+     "iopub.status.idle": "2023-10-10T20:29:53.012049Z",
+     "shell.execute_reply": "2023-10-10T20:29:53.010855Z"
     },
     "papermill": {
-     "duration": 0.018752,
-     "end_time": "2023-02-22T22:06:54.392770",
+     "duration": 0.012188,
+     "end_time": "2023-10-10T20:29:53.013673",
      "exception": false,
-     "start_time": "2023-02-22T22:06:54.374018",
+     "start_time": "2023-10-10T20:29:53.001485",
      "status": "completed"
     },
     "tags": []
@@ -415,28 +363,28 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.9"
+   "version": "3.10.13"
   },
   "papermill": {
    "default_parameters": {},
-   "duration": 2.055989,
-   "end_time": "2023-02-22T22:06:54.814906",
+   "duration": 1.731275,
+   "end_time": "2023-10-10T20:29:53.335011",
    "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",
    "parameters": {
     "INPUT_PATHS": {
-     "features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/input/features.csv"
+     "aggregated_features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/input/features.csv"
     },
     "OUTPUT_PATHS": {
      "split": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/4_split/output/split.csv"
     }
    },
-   "start_time": "2023-02-22T22:06:52.758917",
+   "start_time": "2023-10-10T20:29:51.603736",
    "version": "2.4.0"
   }
  },
  "nbformat": 4,
  "nbformat_minor": 5
-}
+}
\ No newline at end of file
diff --git a/notebooks/5_ml_model.ipynb b/notebooks/5_ml_model.ipynb
index 26febe0ae6c26e0487440112abe00deaafd36b5e..03622dbc7d6930b470f9773c2e47dc8d8c66509c 100644
--- a/notebooks/5_ml_model.ipynb
+++ b/notebooks/5_ml_model.ipynb
@@ -5,10 +5,10 @@
    "id": "5de30442",
    "metadata": {
     "papermill": {
-     "duration": 0.247241,
-     "end_time": "2023-02-22T23:02:58.065597",
+     "duration": 0.004501,
+     "end_time": "2023-10-10T20:29:56.392851",
      "exception": false,
-     "start_time": "2023-02-22T23:02:57.818356",
+     "start_time": "2023-10-10T20:29:56.388350",
      "status": "completed"
     },
     "tags": []
@@ -25,16 +25,16 @@
    "id": "a2eb8998",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:02:58.316434Z",
-     "iopub.status.busy": "2023-02-22T23:02:58.316102Z",
-     "iopub.status.idle": "2023-02-22T23:02:59.398758Z",
-     "shell.execute_reply": "2023-02-22T23:02:59.397746Z"
+     "iopub.execute_input": "2023-10-10T20:29:56.404718Z",
+     "iopub.status.busy": "2023-10-10T20:29:56.403976Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.046443Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.045488Z"
     },
     "papermill": {
-     "duration": 1.216666,
-     "end_time": "2023-02-22T23:02:59.404681",
+     "duration": 0.651867,
+     "end_time": "2023-10-10T20:29:57.049250",
      "exception": false,
-     "start_time": "2023-02-22T23:02:58.188015",
+     "start_time": "2023-10-10T20:29:56.397383",
      "status": "completed"
     },
     "tags": []
@@ -61,16 +61,16 @@
    "id": "8a8da20f",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:02:59.791455Z",
-     "iopub.status.busy": "2023-02-22T23:02:59.791014Z",
-     "iopub.status.idle": "2023-02-22T23:02:59.799995Z",
-     "shell.execute_reply": "2023-02-22T23:02:59.798620Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.059270Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.058896Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.064586Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.063604Z"
     },
     "papermill": {
-     "duration": 0.16848,
-     "end_time": "2023-02-22T23:02:59.805952",
+     "duration": 0.013884,
+     "end_time": "2023-10-10T20:29:57.067486",
      "exception": false,
-     "start_time": "2023-02-22T23:02:59.637472",
+     "start_time": "2023-10-10T20:29:57.053602",
      "status": "completed"
     },
     "tags": [
@@ -96,19 +96,19 @@
   {
    "cell_type": "code",
    "execution_count": 3,
-   "id": "1b827561",
+   "id": "dca8296b",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:00.056022Z",
-     "iopub.status.busy": "2023-02-22T23:03:00.055639Z",
-     "iopub.status.idle": "2023-02-22T23:03:00.062609Z",
-     "shell.execute_reply": "2023-02-22T23:03:00.061781Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.076447Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.075691Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.080057Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.079206Z"
     },
     "papermill": {
-     "duration": 0.121897,
-     "end_time": "2023-02-22T23:03:00.065712",
+     "duration": 0.012321,
+     "end_time": "2023-10-10T20:29:57.083555",
      "exception": false,
-     "start_time": "2023-02-22T23:02:59.943815",
+     "start_time": "2023-10-10T20:29:57.071234",
      "status": "completed"
     },
     "tags": [
@@ -118,8 +118,14 @@
    "outputs": [],
    "source": [
     "# Parameters\n",
-    "INPUT_PATHS = {\"split\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/input/split.csv\", \"features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/input/features.csv\"}\n",
-    "OUTPUT_PATHS = {\"clf\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/ml_model.pickle\", \"submission\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/test_result.csv\"}\n"
+    "INPUT_PATHS = {\n",
+    "    \"split\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/input/split.csv\",\n",
+    "    \"aggregated_features\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/input/features.csv\",\n",
+    "}\n",
+    "OUTPUT_PATHS = {\n",
+    "    \"clf\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/output/ml_model.pickle\",\n",
+    "    \"submission\": \"/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/output/test_result.csv\",\n",
+    "}\n"
    ]
   },
   {
@@ -128,16 +134,16 @@
    "id": "6810272a",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:00.277109Z",
-     "iopub.status.busy": "2023-02-22T23:03:00.276746Z",
-     "iopub.status.idle": "2023-02-22T23:03:00.309845Z",
-     "shell.execute_reply": "2023-02-22T23:03:00.309159Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.092871Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.092295Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.118496Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.117541Z"
     },
     "papermill": {
-     "duration": 0.137077,
-     "end_time": "2023-02-22T23:03:00.312049",
+     "duration": 0.033571,
+     "end_time": "2023-10-10T20:29:57.120555",
      "exception": false,
-     "start_time": "2023-02-22T23:03:00.174972",
+     "start_time": "2023-10-10T20:29:57.086984",
      "status": "completed"
     },
     "tags": []
@@ -146,7 +152,7 @@
    "source": [
     "# input\n",
     "split: pd.DataFrame = pd.read_csv(INPUT_PATHS[\"split\"])\n",
-    "features: pd.DataFrame = pd.read_csv(INPUT_PATHS[\"features\"])"
+    "features: pd.DataFrame = pd.read_csv(INPUT_PATHS[\"aggregated_features\"])"
    ]
   },
   {
@@ -155,16 +161,16 @@
    "id": "36f06fd6",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:00.535727Z",
-     "iopub.status.busy": "2023-02-22T23:03:00.535434Z",
-     "iopub.status.idle": "2023-02-22T23:03:00.566484Z",
-     "shell.execute_reply": "2023-02-22T23:03:00.565659Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.129659Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.129233Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.156435Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.155735Z"
     },
     "papermill": {
-     "duration": 0.143691,
-     "end_time": "2023-02-22T23:03:00.568732",
+     "duration": 0.033758,
+     "end_time": "2023-10-10T20:29:57.158194",
      "exception": false,
-     "start_time": "2023-02-22T23:03:00.425041",
+     "start_time": "2023-10-10T20:29:57.124436",
      "status": "completed"
     },
     "tags": []
@@ -285,7 +291,7 @@
        "      <td>0.952658</td>\n",
        "      <td>10.477735</td>\n",
        "      <td>-0.185771</td>\n",
-       "      <td>False</td>\n",
+       "      <td>True</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>classical_100.mp3</th>\n",
@@ -309,7 +315,7 @@
        "      <td>-1.494916</td>\n",
        "      <td>10.917299</td>\n",
        "      <td>0.020985</td>\n",
-       "      <td>True</td>\n",
+       "      <td>False</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>classical_11.mp3</th>\n",
@@ -357,7 +363,7 @@
        "      <td>1.844494</td>\n",
        "      <td>11.160392</td>\n",
        "      <td>0.503120</td>\n",
-       "      <td>False</td>\n",
+       "      <td>True</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>...</th>\n",
@@ -554,10 +560,10 @@
        "                      39_max   39_mean     39_std   39_skew  train  \n",
        "filename                                                            \n",
        "classical_1.mp3    49.352516 -2.282116  15.285639  0.171462  False  \n",
-       "classical_10.mp3   27.533707  0.952658  10.477735 -0.185771  False  \n",
-       "classical_100.mp3  31.397882 -1.494916  10.917299  0.020985   True  \n",
+       "classical_10.mp3   27.533707  0.952658  10.477735 -0.185771   True  \n",
+       "classical_100.mp3  31.397882 -1.494916  10.917299  0.020985  False  \n",
        "classical_11.mp3   50.992905  1.600777  10.125545  0.595763   True  \n",
-       "classical_12.mp3   46.878204  1.844494  11.160392  0.503120  False  \n",
+       "classical_12.mp3   46.878204  1.844494  11.160392  0.503120   True  \n",
        "...                      ...       ...        ...       ...    ...  \n",
        "rock_95.mp3        23.410387 -4.502398   6.687983  0.238807   True  \n",
        "rock_96.mp3        21.814400 -8.249507   7.807756  0.071968   True  \n",
@@ -584,16 +590,16 @@
    "id": "265d042f",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:00.807555Z",
-     "iopub.status.busy": "2023-02-22T23:03:00.807169Z",
-     "iopub.status.idle": "2023-02-22T23:03:00.830354Z",
-     "shell.execute_reply": "2023-02-22T23:03:00.829651Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.169022Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.168524Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.190644Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.189670Z"
     },
     "papermill": {
-     "duration": 0.136153,
-     "end_time": "2023-02-22T23:03:00.831710",
+     "duration": 0.029559,
+     "end_time": "2023-10-10T20:29:57.191983",
      "exception": false,
-     "start_time": "2023-02-22T23:03:00.695557",
+     "start_time": "2023-10-10T20:29:57.162424",
      "status": "completed"
     },
     "tags": []
@@ -669,28 +675,28 @@
        "  </thead>\n",
        "  <tbody>\n",
        "    <tr>\n",
-       "      <th>classical_100.mp3</th>\n",
+       "      <th>classical_10.mp3</th>\n",
        "      <td>classical</td>\n",
-       "      <td>-536.23737</td>\n",
-       "      <td>-61.608826</td>\n",
-       "      <td>-177.804114</td>\n",
-       "      <td>83.381622</td>\n",
-       "      <td>-2.587179</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>190.47589</td>\n",
-       "      <td>112.471713</td>\n",
-       "      <td>27.277553</td>\n",
+       "      <td>-562.85785</td>\n",
+       "      <td>-96.164795</td>\n",
+       "      <td>-219.259016</td>\n",
+       "      <td>53.561839</td>\n",
+       "      <td>-0.772320</td>\n",
+       "      <td>0.029056</td>\n",
+       "      <td>259.63272</td>\n",
+       "      <td>215.094182</td>\n",
+       "      <td>18.388131</td>\n",
        "      <td>...</td>\n",
-       "      <td>-27.335688</td>\n",
-       "      <td>27.610388</td>\n",
-       "      <td>-0.333233</td>\n",
-       "      <td>8.185075</td>\n",
-       "      <td>0.208425</td>\n",
-       "      <td>-38.095375</td>\n",
-       "      <td>31.397882</td>\n",
-       "      <td>-1.494916</td>\n",
-       "      <td>10.917299</td>\n",
-       "      <td>0.020985</td>\n",
+       "      <td>-27.458416</td>\n",
+       "      <td>29.811110</td>\n",
+       "      <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>0.952658</td>\n",
+       "      <td>10.477735</td>\n",
+       "      <td>-0.185771</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>classical_11.mp3</th>\n",
@@ -717,6 +723,30 @@
        "      <td>0.595763</td>\n",
        "    </tr>\n",
        "    <tr>\n",
+       "      <th>classical_12.mp3</th>\n",
+       "      <td>classical</td>\n",
+       "      <td>-562.67523</td>\n",
+       "      <td>-148.133560</td>\n",
+       "      <td>-270.975406</td>\n",
+       "      <td>52.191182</td>\n",
+       "      <td>-0.366586</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>194.26416</td>\n",
+       "      <td>148.226648</td>\n",
+       "      <td>19.305008</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-44.843815</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>46.878204</td>\n",
+       "      <td>1.844494</td>\n",
+       "      <td>11.160392</td>\n",
+       "      <td>0.503120</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
        "      <th>classical_13.mp3</th>\n",
        "      <td>classical</td>\n",
        "      <td>-637.72064</td>\n",
@@ -765,30 +795,6 @@
        "      <td>-0.187037</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>classical_15.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-555.12994</td>\n",
-       "      <td>-96.139240</td>\n",
-       "      <td>-209.245810</td>\n",
-       "      <td>45.350121</td>\n",
-       "      <td>-3.574710</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>140.91864</td>\n",
-       "      <td>109.309985</td>\n",
-       "      <td>14.171102</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-42.808117</td>\n",
-       "      <td>24.146545</td>\n",
-       "      <td>-7.260053</td>\n",
-       "      <td>9.862490</td>\n",
-       "      <td>0.097765</td>\n",
-       "      <td>-31.394999</td>\n",
-       "      <td>35.685540</td>\n",
-       "      <td>-0.949139</td>\n",
-       "      <td>11.141700</td>\n",
-       "      <td>0.249279</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
        "      <th>...</th>\n",
        "      <td>...</td>\n",
        "      <td>...</td>\n",
@@ -938,61 +944,61 @@
        "</div>"
       ],
       "text/plain": [
-       "                       label      0_min       0_max      0_mean      0_std  \\\n",
-       "filename                                                                     \n",
-       "classical_100.mp3  classical -536.23737  -61.608826 -177.804114  83.381622   \n",
-       "classical_11.mp3   classical -536.45746 -120.429665 -222.126303  76.246992   \n",
-       "classical_13.mp3   classical -637.72064 -177.713960 -361.834032  71.310080   \n",
-       "classical_14.mp3   classical -531.04944 -100.790540 -188.970758  58.287371   \n",
-       "classical_15.mp3   classical -555.12994  -96.139240 -209.245810  45.350121   \n",
-       "...                      ...        ...         ...         ...        ...   \n",
-       "rock_95.mp3             rock -553.11010   -5.218835 -193.506047  76.869437   \n",
-       "rock_96.mp3             rock -541.23600   27.163332 -119.113996  58.420684   \n",
-       "rock_97.mp3             rock -518.49500   58.526745  -66.267744  65.635619   \n",
-       "rock_98.mp3             rock -518.64307   53.555115  -45.734517  52.444200   \n",
-       "rock_99.mp3             rock -544.70310   75.612130  -49.380943  54.045627   \n",
-       "\n",
-       "                     0_skew      1_min      1_max      1_mean      1_std  ...  \\\n",
-       "filename                                                                  ...   \n",
-       "classical_100.mp3 -2.587179   0.000000  190.47589  112.471713  27.277553  ...   \n",
-       "classical_11.mp3  -2.402418   0.000000  159.42575   99.853645  21.916948  ...   \n",
-       "classical_13.mp3   0.008325   0.000000  257.16284  211.556558  20.347035  ...   \n",
-       "classical_14.mp3  -3.246618   0.000000  157.94792   86.563928  17.911136  ...   \n",
-       "classical_15.mp3  -3.574710   0.000000  140.91864  109.309985  14.171102  ...   \n",
-       "...                     ...        ...        ...         ...        ...  ...   \n",
-       "rock_95.mp3       -0.201055 -89.948746  201.18045  111.724191  36.463584  ...   \n",
-       "rock_96.mp3       -0.957699  -7.415959  210.49246  125.453699  31.908870  ...   \n",
-       "rock_97.mp3       -0.898026 -58.824410  175.20135   99.288265  25.158417  ...   \n",
-       "rock_98.mp3       -1.705641   0.000000  187.04272   96.440874  24.137702  ...   \n",
-       "rock_99.mp3       -0.863093 -32.930650  191.73538   93.971242  33.410220  ...   \n",
+       "                      label      0_min       0_max      0_mean      0_std  \\\n",
+       "filename                                                                    \n",
+       "classical_10.mp3  classical -562.85785  -96.164795 -219.259016  53.561839   \n",
+       "classical_11.mp3  classical -536.45746 -120.429665 -222.126303  76.246992   \n",
+       "classical_12.mp3  classical -562.67523 -148.133560 -270.975406  52.191182   \n",
+       "classical_13.mp3  classical -637.72064 -177.713960 -361.834032  71.310080   \n",
+       "classical_14.mp3  classical -531.04944 -100.790540 -188.970758  58.287371   \n",
+       "...                     ...        ...         ...         ...        ...   \n",
+       "rock_95.mp3            rock -553.11010   -5.218835 -193.506047  76.869437   \n",
+       "rock_96.mp3            rock -541.23600   27.163332 -119.113996  58.420684   \n",
+       "rock_97.mp3            rock -518.49500   58.526745  -66.267744  65.635619   \n",
+       "rock_98.mp3            rock -518.64307   53.555115  -45.734517  52.444200   \n",
+       "rock_99.mp3            rock -544.70310   75.612130  -49.380943  54.045627   \n",
        "\n",
-       "                      38_min     38_max   38_mean     38_std   38_skew  \\\n",
-       "filename                                                                 \n",
-       "classical_100.mp3 -27.335688  27.610388 -0.333233   8.185075  0.208425   \n",
-       "classical_11.mp3  -31.774948  31.500881 -3.781627   9.191043  0.260886   \n",
-       "classical_13.mp3  -24.728806  18.424034 -0.275736   7.026148 -0.640964   \n",
-       "classical_14.mp3  -36.261150  38.335830 -5.770759  12.254058  0.805707   \n",
-       "classical_15.mp3  -42.808117  24.146545 -7.260053   9.862490  0.097765   \n",
-       "...                      ...        ...       ...        ...       ...   \n",
-       "rock_95.mp3       -27.043941  22.451445 -7.234634   8.471853  0.753855   \n",
-       "rock_96.mp3       -37.584858  28.087940 -9.704238   8.447620  0.112760   \n",
-       "rock_97.mp3       -29.620445  26.325895 -5.722825   7.727378  0.207489   \n",
-       "rock_98.mp3       -26.967852   8.714736 -9.511491   5.551820 -0.025604   \n",
-       "rock_99.mp3       -21.929403  17.050608 -5.296691   5.894962  0.390705   \n",
+       "                    0_skew      1_min      1_max      1_mean      1_std  ...  \\\n",
+       "filename                                                                 ...   \n",
+       "classical_10.mp3 -0.772320   0.029056  259.63272  215.094182  18.388131  ...   \n",
+       "classical_11.mp3 -2.402418   0.000000  159.42575   99.853645  21.916948  ...   \n",
+       "classical_12.mp3 -0.366586   0.000000  194.26416  148.226648  19.305008  ...   \n",
+       "classical_13.mp3  0.008325   0.000000  257.16284  211.556558  20.347035  ...   \n",
+       "classical_14.mp3 -3.246618   0.000000  157.94792   86.563928  17.911136  ...   \n",
+       "...                    ...        ...        ...         ...        ...  ...   \n",
+       "rock_95.mp3      -0.201055 -89.948746  201.18045  111.724191  36.463584  ...   \n",
+       "rock_96.mp3      -0.957699  -7.415959  210.49246  125.453699  31.908870  ...   \n",
+       "rock_97.mp3      -0.898026 -58.824410  175.20135   99.288265  25.158417  ...   \n",
+       "rock_98.mp3      -1.705641   0.000000  187.04272   96.440874  24.137702  ...   \n",
+       "rock_99.mp3      -0.863093 -32.930650  191.73538   93.971242  33.410220  ...   \n",
        "\n",
-       "                      39_min     39_max   39_mean     39_std   39_skew  \n",
+       "                     38_min     38_max   38_mean     38_std   38_skew  \\\n",
        "filename                                                                \n",
-       "classical_100.mp3 -38.095375  31.397882 -1.494916  10.917299  0.020985  \n",
-       "classical_11.mp3  -22.667439  50.992905  1.600777  10.125545  0.595763  \n",
-       "classical_13.mp3  -24.319565  18.439264 -2.147022   8.171929  0.009566  \n",
-       "classical_14.mp3  -40.597336  32.816467 -0.543406  11.467829 -0.187037  \n",
-       "classical_15.mp3  -31.394999  35.685540 -0.949139  11.141700  0.249279  \n",
-       "...                      ...        ...       ...        ...       ...  \n",
-       "rock_95.mp3       -24.712723  23.410387 -4.502398   6.687983  0.238807  \n",
-       "rock_96.mp3       -38.147890  21.814400 -8.249507   7.807756  0.071968  \n",
-       "rock_97.mp3       -29.497524  25.410656 -3.356614   8.170526  0.160330  \n",
-       "rock_98.mp3       -23.020082  13.948639 -2.664985   5.051498 -0.258407  \n",
-       "rock_99.mp3       -20.983192  29.312021 -0.321836   6.571660  0.384794  \n",
+       "classical_10.mp3 -27.458416  29.811110  0.484271   8.660648 -0.479016   \n",
+       "classical_11.mp3 -31.774948  31.500881 -3.781627   9.191043  0.260886   \n",
+       "classical_12.mp3 -44.843815  28.490644 -6.242015  10.546545  0.341848   \n",
+       "classical_13.mp3 -24.728806  18.424034 -0.275736   7.026148 -0.640964   \n",
+       "classical_14.mp3 -36.261150  38.335830 -5.770759  12.254058  0.805707   \n",
+       "...                     ...        ...       ...        ...       ...   \n",
+       "rock_95.mp3      -27.043941  22.451445 -7.234634   8.471853  0.753855   \n",
+       "rock_96.mp3      -37.584858  28.087940 -9.704238   8.447620  0.112760   \n",
+       "rock_97.mp3      -29.620445  26.325895 -5.722825   7.727378  0.207489   \n",
+       "rock_98.mp3      -26.967852   8.714736 -9.511491   5.551820 -0.025604   \n",
+       "rock_99.mp3      -21.929403  17.050608 -5.296691   5.894962  0.390705   \n",
+       "\n",
+       "                     39_min     39_max   39_mean     39_std   39_skew  \n",
+       "filename                                                               \n",
+       "classical_10.mp3 -28.989979  27.533707  0.952658  10.477735 -0.185771  \n",
+       "classical_11.mp3 -22.667439  50.992905  1.600777  10.125545  0.595763  \n",
+       "classical_12.mp3 -25.040886  46.878204  1.844494  11.160392  0.503120  \n",
+       "classical_13.mp3 -24.319565  18.439264 -2.147022   8.171929  0.009566  \n",
+       "classical_14.mp3 -40.597336  32.816467 -0.543406  11.467829 -0.187037  \n",
+       "...                     ...        ...       ...        ...       ...  \n",
+       "rock_95.mp3      -24.712723  23.410387 -4.502398   6.687983  0.238807  \n",
+       "rock_96.mp3      -38.147890  21.814400 -8.249507   7.807756  0.071968  \n",
+       "rock_97.mp3      -29.497524  25.410656 -3.356614   8.170526  0.160330  \n",
+       "rock_98.mp3      -23.020082  13.948639 -2.664985   5.051498 -0.258407  \n",
+       "rock_99.mp3      -20.983192  29.312021 -0.321836   6.571660  0.384794  \n",
        "\n",
        "[320 rows x 201 columns]"
       ]
@@ -1013,16 +1019,16 @@
    "id": "1649ce52",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:01.090945Z",
-     "iopub.status.busy": "2023-02-22T23:03:01.090447Z",
-     "iopub.status.idle": "2023-02-22T23:03:01.125338Z",
-     "shell.execute_reply": "2023-02-22T23:03:01.124530Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.201997Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.201308Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.222303Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.221426Z"
     },
     "papermill": {
-     "duration": 0.167995,
-     "end_time": "2023-02-22T23:03:01.126884",
+     "duration": 0.027584,
+     "end_time": "2023-10-10T20:29:57.223599",
      "exception": false,
-     "start_time": "2023-02-22T23:03:00.958889",
+     "start_time": "2023-10-10T20:29:57.196015",
      "status": "completed"
     },
     "tags": []
@@ -1122,52 +1128,28 @@
        "      <td>0.171462</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>classical_10.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-562.85785</td>\n",
-       "      <td>-96.164795</td>\n",
-       "      <td>-219.259016</td>\n",
-       "      <td>53.561839</td>\n",
-       "      <td>-0.772320</td>\n",
-       "      <td>0.029056</td>\n",
-       "      <td>259.63272</td>\n",
-       "      <td>215.094182</td>\n",
-       "      <td>18.388131</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-27.458416</td>\n",
-       "      <td>29.811110</td>\n",
-       "      <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>0.952658</td>\n",
-       "      <td>10.477735</td>\n",
-       "      <td>-0.185771</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_12.mp3</th>\n",
+       "      <th>classical_100.mp3</th>\n",
        "      <td>classical</td>\n",
-       "      <td>-562.67523</td>\n",
-       "      <td>-148.133560</td>\n",
-       "      <td>-270.975406</td>\n",
-       "      <td>52.191182</td>\n",
-       "      <td>-0.366586</td>\n",
+       "      <td>-536.23737</td>\n",
+       "      <td>-61.608826</td>\n",
+       "      <td>-177.804114</td>\n",
+       "      <td>83.381622</td>\n",
+       "      <td>-2.587179</td>\n",
        "      <td>0.000000</td>\n",
-       "      <td>194.26416</td>\n",
-       "      <td>148.226648</td>\n",
-       "      <td>19.305008</td>\n",
+       "      <td>190.47589</td>\n",
+       "      <td>112.471713</td>\n",
+       "      <td>27.277553</td>\n",
        "      <td>...</td>\n",
-       "      <td>-44.843815</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>46.878204</td>\n",
-       "      <td>1.844494</td>\n",
-       "      <td>11.160392</td>\n",
-       "      <td>0.503120</td>\n",
+       "      <td>-27.335688</td>\n",
+       "      <td>27.610388</td>\n",
+       "      <td>-0.333233</td>\n",
+       "      <td>8.185075</td>\n",
+       "      <td>0.208425</td>\n",
+       "      <td>-38.095375</td>\n",
+       "      <td>31.397882</td>\n",
+       "      <td>-1.494916</td>\n",
+       "      <td>10.917299</td>\n",
+       "      <td>0.020985</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>classical_16.mp3</th>\n",
@@ -1194,28 +1176,52 @@
        "      <td>0.088775</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>classical_19.mp3</th>\n",
+       "      <th>classical_2.mp3</th>\n",
+       "      <td>classical</td>\n",
+       "      <td>-549.40650</td>\n",
+       "      <td>-192.532060</td>\n",
+       "      <td>-293.008970</td>\n",
+       "      <td>27.207027</td>\n",
+       "      <td>-0.426848</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>231.03737</td>\n",
+       "      <td>198.662515</td>\n",
+       "      <td>14.957660</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-25.912935</td>\n",
+       "      <td>24.293318</td>\n",
+       "      <td>0.746096</td>\n",
+       "      <td>8.240027</td>\n",
+       "      <td>-0.022513</td>\n",
+       "      <td>-18.561390</td>\n",
+       "      <td>23.484133</td>\n",
+       "      <td>3.115819</td>\n",
+       "      <td>7.220346</td>\n",
+       "      <td>0.242364</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>classical_20.mp3</th>\n",
        "      <td>classical</td>\n",
-       "      <td>-543.64233</td>\n",
-       "      <td>-106.038220</td>\n",
-       "      <td>-216.909956</td>\n",
-       "      <td>61.317534</td>\n",
-       "      <td>-3.473125</td>\n",
+       "      <td>-605.99150</td>\n",
+       "      <td>-161.119310</td>\n",
+       "      <td>-263.483084</td>\n",
+       "      <td>49.157298</td>\n",
+       "      <td>-0.856221</td>\n",
        "      <td>0.000000</td>\n",
-       "      <td>151.94766</td>\n",
-       "      <td>93.405407</td>\n",
-       "      <td>22.029233</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-27.029383</td>\n",
-       "      <td>30.682745</td>\n",
-       "      <td>3.342260</td>\n",
-       "      <td>8.420860</td>\n",
-       "      <td>0.043171</td>\n",
-       "      <td>-25.900253</td>\n",
-       "      <td>36.766388</td>\n",
-       "      <td>2.389575</td>\n",
-       "      <td>10.099726</td>\n",
-       "      <td>0.140336</td>\n",
+       "      <td>191.92674</td>\n",
+       "      <td>141.393817</td>\n",
+       "      <td>17.754779</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-24.911243</td>\n",
+       "      <td>38.551230</td>\n",
+       "      <td>-2.274261</td>\n",
+       "      <td>9.671005</td>\n",
+       "      <td>0.719436</td>\n",
+       "      <td>-30.311796</td>\n",
+       "      <td>29.272333</td>\n",
+       "      <td>0.289613</td>\n",
+       "      <td>9.590299</td>\n",
+       "      <td>-0.244191</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>...</th>\n",
@@ -1242,76 +1248,52 @@
        "      <td>...</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>rock_64.mp3</th>\n",
+       "      <th>rock_61.mp3</th>\n",
        "      <td>rock</td>\n",
-       "      <td>-522.86610</td>\n",
-       "      <td>-2.023562</td>\n",
-       "      <td>-138.488102</td>\n",
-       "      <td>73.637453</td>\n",
-       "      <td>-0.536163</td>\n",
-       "      <td>-9.035665</td>\n",
-       "      <td>194.30304</td>\n",
-       "      <td>117.368186</td>\n",
-       "      <td>30.024294</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-23.510620</td>\n",
-       "      <td>21.750380</td>\n",
-       "      <td>-3.909715</td>\n",
-       "      <td>7.212336</td>\n",
-       "      <td>0.208070</td>\n",
-       "      <td>-29.665760</td>\n",
-       "      <td>28.453403</td>\n",
-       "      <td>0.261991</td>\n",
-       "      <td>7.573523</td>\n",
-       "      <td>-0.092932</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_68.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-561.14280</td>\n",
-       "      <td>12.340981</td>\n",
-       "      <td>-96.624711</td>\n",
-       "      <td>47.400188</td>\n",
-       "      <td>-0.653529</td>\n",
-       "      <td>-23.055584</td>\n",
-       "      <td>167.53100</td>\n",
-       "      <td>88.403006</td>\n",
-       "      <td>29.370156</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-32.008934</td>\n",
-       "      <td>27.931776</td>\n",
-       "      <td>-2.982000</td>\n",
-       "      <td>9.721937</td>\n",
-       "      <td>0.089433</td>\n",
-       "      <td>-23.004597</td>\n",
-       "      <td>24.202961</td>\n",
-       "      <td>3.406390</td>\n",
-       "      <td>7.585782</td>\n",
-       "      <td>-0.129014</td>\n",
+       "      <td>-581.70320</td>\n",
+       "      <td>-4.784650</td>\n",
+       "      <td>-195.795774</td>\n",
+       "      <td>49.129890</td>\n",
+       "      <td>-0.593109</td>\n",
+       "      <td>0.000000</td>\n",
+       "      <td>277.18048</td>\n",
+       "      <td>218.884291</td>\n",
+       "      <td>32.386435</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-16.274982</td>\n",
+       "      <td>10.830383</td>\n",
+       "      <td>-1.030385</td>\n",
+       "      <td>3.743717</td>\n",
+       "      <td>-0.558987</td>\n",
+       "      <td>-12.881446</td>\n",
+       "      <td>9.897078</td>\n",
+       "      <td>-1.491518</td>\n",
+       "      <td>3.449319</td>\n",
+       "      <td>-0.126638</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>rock_71.mp3</th>\n",
+       "      <th>rock_70.mp3</th>\n",
        "      <td>rock</td>\n",
-       "      <td>-513.19495</td>\n",
-       "      <td>8.192442</td>\n",
-       "      <td>-128.668100</td>\n",
-       "      <td>98.814925</td>\n",
-       "      <td>-1.667229</td>\n",
-       "      <td>-34.499084</td>\n",
-       "      <td>142.19391</td>\n",
-       "      <td>88.050960</td>\n",
-       "      <td>28.383479</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-19.833210</td>\n",
-       "      <td>14.180359</td>\n",
-       "      <td>-2.944553</td>\n",
-       "      <td>4.317564</td>\n",
-       "      <td>0.242967</td>\n",
-       "      <td>-20.309437</td>\n",
-       "      <td>16.341742</td>\n",
-       "      <td>0.126587</td>\n",
-       "      <td>4.020606</td>\n",
-       "      <td>-0.219710</td>\n",
+       "      <td>-560.31934</td>\n",
+       "      <td>-65.886696</td>\n",
+       "      <td>-201.773601</td>\n",
+       "      <td>62.077689</td>\n",
+       "      <td>-0.576726</td>\n",
+       "      <td>-29.625122</td>\n",
+       "      <td>185.52118</td>\n",
+       "      <td>121.034730</td>\n",
+       "      <td>28.852134</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-26.226246</td>\n",
+       "      <td>27.198473</td>\n",
+       "      <td>-3.917270</td>\n",
+       "      <td>8.094776</td>\n",
+       "      <td>0.075448</td>\n",
+       "      <td>-26.580010</td>\n",
+       "      <td>26.222483</td>\n",
+       "      <td>-5.732453</td>\n",
+       "      <td>7.377854</td>\n",
+       "      <td>0.551676</td>\n",
        "    </tr>\n",
        "    <tr>\n",
        "      <th>rock_72.mp3</th>\n",
@@ -1338,28 +1320,52 @@
        "      <td>0.051207</td>\n",
        "    </tr>\n",
        "    <tr>\n",
-       "      <th>rock_94.mp3</th>\n",
+       "      <th>rock_83.mp3</th>\n",
        "      <td>rock</td>\n",
-       "      <td>-531.79425</td>\n",
-       "      <td>39.474583</td>\n",
-       "      <td>-78.520463</td>\n",
-       "      <td>51.256666</td>\n",
-       "      <td>-0.846796</td>\n",
-       "      <td>-15.139265</td>\n",
-       "      <td>177.08032</td>\n",
-       "      <td>79.627048</td>\n",
-       "      <td>33.557076</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-34.662370</td>\n",
-       "      <td>26.375679</td>\n",
-       "      <td>-4.778466</td>\n",
-       "      <td>6.754501</td>\n",
-       "      <td>0.157858</td>\n",
-       "      <td>-22.063726</td>\n",
-       "      <td>29.165360</td>\n",
-       "      <td>1.443975</td>\n",
-       "      <td>6.737420</td>\n",
-       "      <td>-0.092049</td>\n",
+       "      <td>-525.08470</td>\n",
+       "      <td>53.723972</td>\n",
+       "      <td>-179.776997</td>\n",
+       "      <td>88.419631</td>\n",
+       "      <td>-0.274074</td>\n",
+       "      <td>-58.428825</td>\n",
+       "      <td>195.01112</td>\n",
+       "      <td>94.848780</td>\n",
+       "      <td>32.757511</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-30.588310</td>\n",
+       "      <td>33.064934</td>\n",
+       "      <td>3.921451</td>\n",
+       "      <td>7.783732</td>\n",
+       "      <td>0.054672</td>\n",
+       "      <td>-25.112260</td>\n",
+       "      <td>29.217503</td>\n",
+       "      <td>5.763236</td>\n",
+       "      <td>7.981292</td>\n",
+       "      <td>-0.062040</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>rock_88.mp3</th>\n",
+       "      <td>rock</td>\n",
+       "      <td>-539.97880</td>\n",
+       "      <td>44.375150</td>\n",
+       "      <td>-126.955020</td>\n",
+       "      <td>88.140999</td>\n",
+       "      <td>-1.700578</td>\n",
+       "      <td>-19.007393</td>\n",
+       "      <td>201.99960</td>\n",
+       "      <td>99.760978</td>\n",
+       "      <td>32.572320</td>\n",
+       "      <td>...</td>\n",
+       "      <td>-34.726500</td>\n",
+       "      <td>26.706833</td>\n",
+       "      <td>-5.827121</td>\n",
+       "      <td>8.260717</td>\n",
+       "      <td>0.275225</td>\n",
+       "      <td>-31.036520</td>\n",
+       "      <td>27.423218</td>\n",
+       "      <td>-4.715363</td>\n",
+       "      <td>6.544117</td>\n",
+       "      <td>0.184718</td>\n",
        "    </tr>\n",
        "  </tbody>\n",
        "</table>\n",
@@ -1367,61 +1373,61 @@
        "</div>"
       ],
       "text/plain": [
-       "                      label      0_min       0_max      0_mean      0_std  \\\n",
-       "filename                                                                    \n",
-       "classical_1.mp3   classical -530.78436 -163.308350 -302.203167  51.142183   \n",
-       "classical_10.mp3  classical -562.85785  -96.164795 -219.259016  53.561839   \n",
-       "classical_12.mp3  classical -562.67523 -148.133560 -270.975406  52.191182   \n",
-       "classical_16.mp3  classical -602.36770  -92.236810 -246.956152  58.781397   \n",
-       "classical_19.mp3  classical -543.64233 -106.038220 -216.909956  61.317534   \n",
-       "...                     ...        ...         ...         ...        ...   \n",
-       "rock_64.mp3            rock -522.86610   -2.023562 -138.488102  73.637453   \n",
-       "rock_68.mp3            rock -561.14280   12.340981  -96.624711  47.400188   \n",
-       "rock_71.mp3            rock -513.19495    8.192442 -128.668100  98.814925   \n",
-       "rock_72.mp3            rock -521.43176   53.568966  -33.458666  33.954524   \n",
-       "rock_94.mp3            rock -531.79425   39.474583  -78.520463  51.256666   \n",
+       "                       label      0_min       0_max      0_mean      0_std  \\\n",
+       "filename                                                                     \n",
+       "classical_1.mp3    classical -530.78436 -163.308350 -302.203167  51.142183   \n",
+       "classical_100.mp3  classical -536.23737  -61.608826 -177.804114  83.381622   \n",
+       "classical_16.mp3   classical -602.36770  -92.236810 -246.956152  58.781397   \n",
+       "classical_2.mp3    classical -549.40650 -192.532060 -293.008970  27.207027   \n",
+       "classical_20.mp3   classical -605.99150 -161.119310 -263.483084  49.157298   \n",
+       "...                      ...        ...         ...         ...        ...   \n",
+       "rock_61.mp3             rock -581.70320   -4.784650 -195.795774  49.129890   \n",
+       "rock_70.mp3             rock -560.31934  -65.886696 -201.773601  62.077689   \n",
+       "rock_72.mp3             rock -521.43176   53.568966  -33.458666  33.954524   \n",
+       "rock_83.mp3             rock -525.08470   53.723972 -179.776997  88.419631   \n",
+       "rock_88.mp3             rock -539.97880   44.375150 -126.955020  88.140999   \n",
        "\n",
-       "                    0_skew      1_min      1_max      1_mean      1_std  ...  \\\n",
-       "filename                                                                 ...   \n",
-       "classical_1.mp3  -0.468374   0.000000  178.75162  111.332342  24.847562  ...   \n",
-       "classical_10.mp3 -0.772320   0.029056  259.63272  215.094182  18.388131  ...   \n",
-       "classical_12.mp3 -0.366586   0.000000  194.26416  148.226648  19.305008  ...   \n",
-       "classical_16.mp3 -1.276496   0.000000  242.02734  207.742183  15.827642  ...   \n",
-       "classical_19.mp3 -3.473125   0.000000  151.94766   93.405407  22.029233  ...   \n",
-       "...                    ...        ...        ...         ...        ...  ...   \n",
-       "rock_64.mp3      -0.536163  -9.035665  194.30304  117.368186  30.024294  ...   \n",
-       "rock_68.mp3      -0.653529 -23.055584  167.53100   88.403006  29.370156  ...   \n",
-       "rock_71.mp3      -1.667229 -34.499084  142.19391   88.050960  28.383479  ...   \n",
-       "rock_72.mp3      -1.231794   8.941433  163.98274   96.094286  22.254676  ...   \n",
-       "rock_94.mp3      -0.846796 -15.139265  177.08032   79.627048  33.557076  ...   \n",
+       "                     0_skew      1_min      1_max      1_mean      1_std  ...  \\\n",
+       "filename                                                                  ...   \n",
+       "classical_1.mp3   -0.468374   0.000000  178.75162  111.332342  24.847562  ...   \n",
+       "classical_100.mp3 -2.587179   0.000000  190.47589  112.471713  27.277553  ...   \n",
+       "classical_16.mp3  -1.276496   0.000000  242.02734  207.742183  15.827642  ...   \n",
+       "classical_2.mp3   -0.426848   0.000000  231.03737  198.662515  14.957660  ...   \n",
+       "classical_20.mp3  -0.856221   0.000000  191.92674  141.393817  17.754779  ...   \n",
+       "...                     ...        ...        ...         ...        ...  ...   \n",
+       "rock_61.mp3       -0.593109   0.000000  277.18048  218.884291  32.386435  ...   \n",
+       "rock_70.mp3       -0.576726 -29.625122  185.52118  121.034730  28.852134  ...   \n",
+       "rock_72.mp3       -1.231794   8.941433  163.98274   96.094286  22.254676  ...   \n",
+       "rock_83.mp3       -0.274074 -58.428825  195.01112   94.848780  32.757511  ...   \n",
+       "rock_88.mp3       -1.700578 -19.007393  201.99960   99.760978  32.572320  ...   \n",
        "\n",
-       "                     38_min     38_max   38_mean     38_std   38_skew  \\\n",
-       "filename                                                                \n",
-       "classical_1.mp3  -44.098070  47.308060 -3.713503  16.553984  0.230691   \n",
-       "classical_10.mp3 -27.458416  29.811110  0.484271   8.660648 -0.479016   \n",
-       "classical_12.mp3 -44.843815  28.490644 -6.242015  10.546545  0.341848   \n",
-       "classical_16.mp3 -38.999924  20.457050 -3.002113   8.130004 -1.282625   \n",
-       "classical_19.mp3 -27.029383  30.682745  3.342260   8.420860  0.043171   \n",
-       "...                     ...        ...       ...        ...       ...   \n",
-       "rock_64.mp3      -23.510620  21.750380 -3.909715   7.212336  0.208070   \n",
-       "rock_68.mp3      -32.008934  27.931776 -2.982000   9.721937  0.089433   \n",
-       "rock_71.mp3      -19.833210  14.180359 -2.944553   4.317564  0.242967   \n",
-       "rock_72.mp3      -27.532902   7.778494 -7.521854   6.528954 -0.366071   \n",
-       "rock_94.mp3      -34.662370  26.375679 -4.778466   6.754501  0.157858   \n",
+       "                      38_min     38_max   38_mean     38_std   38_skew  \\\n",
+       "filename                                                                 \n",
+       "classical_1.mp3   -44.098070  47.308060 -3.713503  16.553984  0.230691   \n",
+       "classical_100.mp3 -27.335688  27.610388 -0.333233   8.185075  0.208425   \n",
+       "classical_16.mp3  -38.999924  20.457050 -3.002113   8.130004 -1.282625   \n",
+       "classical_2.mp3   -25.912935  24.293318  0.746096   8.240027 -0.022513   \n",
+       "classical_20.mp3  -24.911243  38.551230 -2.274261   9.671005  0.719436   \n",
+       "...                      ...        ...       ...        ...       ...   \n",
+       "rock_61.mp3       -16.274982  10.830383 -1.030385   3.743717 -0.558987   \n",
+       "rock_70.mp3       -26.226246  27.198473 -3.917270   8.094776  0.075448   \n",
+       "rock_72.mp3       -27.532902   7.778494 -7.521854   6.528954 -0.366071   \n",
+       "rock_83.mp3       -30.588310  33.064934  3.921451   7.783732  0.054672   \n",
+       "rock_88.mp3       -34.726500  26.706833 -5.827121   8.260717  0.275225   \n",
        "\n",
-       "                     39_min     39_max   39_mean     39_std   39_skew  \n",
-       "filename                                                               \n",
-       "classical_1.mp3  -46.794480  49.352516 -2.282116  15.285639  0.171462  \n",
-       "classical_10.mp3 -28.989979  27.533707  0.952658  10.477735 -0.185771  \n",
-       "classical_12.mp3 -25.040886  46.878204  1.844494  11.160392  0.503120  \n",
-       "classical_16.mp3 -32.711815  23.339695 -6.099672   8.291237  0.088775  \n",
-       "classical_19.mp3 -25.900253  36.766388  2.389575  10.099726  0.140336  \n",
-       "...                     ...        ...       ...        ...       ...  \n",
-       "rock_64.mp3      -29.665760  28.453403  0.261991   7.573523 -0.092932  \n",
-       "rock_68.mp3      -23.004597  24.202961  3.406390   7.585782 -0.129014  \n",
-       "rock_71.mp3      -20.309437  16.341742  0.126587   4.020606 -0.219710  \n",
-       "rock_72.mp3      -20.847164  18.145725 -2.035525   5.567113  0.051207  \n",
-       "rock_94.mp3      -22.063726  29.165360  1.443975   6.737420 -0.092049  \n",
+       "                      39_min     39_max   39_mean     39_std   39_skew  \n",
+       "filename                                                                \n",
+       "classical_1.mp3   -46.794480  49.352516 -2.282116  15.285639  0.171462  \n",
+       "classical_100.mp3 -38.095375  31.397882 -1.494916  10.917299  0.020985  \n",
+       "classical_16.mp3  -32.711815  23.339695 -6.099672   8.291237  0.088775  \n",
+       "classical_2.mp3   -18.561390  23.484133  3.115819   7.220346  0.242364  \n",
+       "classical_20.mp3  -30.311796  29.272333  0.289613   9.590299 -0.244191  \n",
+       "...                      ...        ...       ...        ...       ...  \n",
+       "rock_61.mp3       -12.881446   9.897078 -1.491518   3.449319 -0.126638  \n",
+       "rock_70.mp3       -26.580010  26.222483 -5.732453   7.377854  0.551676  \n",
+       "rock_72.mp3       -20.847164  18.145725 -2.035525   5.567113  0.051207  \n",
+       "rock_83.mp3       -25.112260  29.217503  5.763236   7.981292 -0.062040  \n",
+       "rock_88.mp3       -31.036520  27.423218 -4.715363   6.544117  0.184718  \n",
        "\n",
        "[80 rows x 201 columns]"
       ]
@@ -1442,16 +1448,16 @@
    "id": "1e904bf3",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:01.479407Z",
-     "iopub.status.busy": "2023-02-22T23:03:01.478846Z",
-     "iopub.status.idle": "2023-02-22T23:03:01.501631Z",
-     "shell.execute_reply": "2023-02-22T23:03:01.500775Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.234538Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.234101Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.254502Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.253465Z"
     },
     "papermill": {
-     "duration": 0.213843,
-     "end_time": "2023-02-22T23:03:01.503226",
+     "duration": 0.027966,
+     "end_time": "2023-10-10T20:29:57.256285",
      "exception": false,
-     "start_time": "2023-02-22T23:03:01.289383",
+     "start_time": "2023-10-10T20:29:57.228319",
      "status": "completed"
     },
     "tags": []
@@ -1460,67 +1466,67 @@
     {
      "data": {
       "text/plain": [
-       "(                       0_min       0_max      0_mean      0_std    0_skew  \\\n",
-       " filename                                                                    \n",
-       " classical_100.mp3 -536.23737  -61.608826 -177.804114  83.381622 -2.587179   \n",
-       " classical_11.mp3  -536.45746 -120.429665 -222.126303  76.246992 -2.402418   \n",
-       " classical_13.mp3  -637.72064 -177.713960 -361.834032  71.310080  0.008325   \n",
-       " classical_14.mp3  -531.04944 -100.790540 -188.970758  58.287371 -3.246618   \n",
-       " classical_15.mp3  -555.12994  -96.139240 -209.245810  45.350121 -3.574710   \n",
-       " ...                      ...         ...         ...        ...       ...   \n",
-       " rock_95.mp3       -553.11010   -5.218835 -193.506047  76.869437 -0.201055   \n",
-       " rock_96.mp3       -541.23600   27.163332 -119.113996  58.420684 -0.957699   \n",
-       " rock_97.mp3       -518.49500   58.526745  -66.267744  65.635619 -0.898026   \n",
-       " rock_98.mp3       -518.64307   53.555115  -45.734517  52.444200 -1.705641   \n",
-       " rock_99.mp3       -544.70310   75.612130  -49.380943  54.045627 -0.863093   \n",
-       " \n",
-       "                        1_min      1_max      1_mean      1_std    1_skew  ...  \\\n",
-       " filename                                                                  ...   \n",
-       " classical_100.mp3   0.000000  190.47589  112.471713  27.277553 -1.318523  ...   \n",
-       " classical_11.mp3    0.000000  159.42575   99.853645  21.916948 -1.176922  ...   \n",
-       " classical_13.mp3    0.000000  257.16284  211.556558  20.347035 -1.050119  ...   \n",
-       " classical_14.mp3    0.000000  157.94792   86.563928  17.911136  0.244244  ...   \n",
-       " classical_15.mp3    0.000000  140.91864  109.309985  14.171102 -2.617227  ...   \n",
-       " ...                      ...        ...         ...        ...       ...  ...   \n",
-       " rock_95.mp3       -89.948746  201.18045  111.724191  36.463584 -0.443224  ...   \n",
-       " rock_96.mp3        -7.415959  210.49246  125.453699  31.908870 -0.547469  ...   \n",
-       " rock_97.mp3       -58.824410  175.20135   99.288265  25.158417 -0.568057  ...   \n",
-       " rock_98.mp3         0.000000  187.04272   96.440874  24.137702 -0.145217  ...   \n",
-       " rock_99.mp3       -32.930650  191.73538   93.971242  33.410220  0.040113  ...   \n",
+       "(                      0_min       0_max      0_mean      0_std    0_skew  \\\n",
+       " filename                                                                   \n",
+       " classical_10.mp3 -562.85785  -96.164795 -219.259016  53.561839 -0.772320   \n",
+       " classical_11.mp3 -536.45746 -120.429665 -222.126303  76.246992 -2.402418   \n",
+       " classical_12.mp3 -562.67523 -148.133560 -270.975406  52.191182 -0.366586   \n",
+       " classical_13.mp3 -637.72064 -177.713960 -361.834032  71.310080  0.008325   \n",
+       " classical_14.mp3 -531.04944 -100.790540 -188.970758  58.287371 -3.246618   \n",
+       " ...                     ...         ...         ...        ...       ...   \n",
+       " rock_95.mp3      -553.11010   -5.218835 -193.506047  76.869437 -0.201055   \n",
+       " rock_96.mp3      -541.23600   27.163332 -119.113996  58.420684 -0.957699   \n",
+       " rock_97.mp3      -518.49500   58.526745  -66.267744  65.635619 -0.898026   \n",
+       " rock_98.mp3      -518.64307   53.555115  -45.734517  52.444200 -1.705641   \n",
+       " rock_99.mp3      -544.70310   75.612130  -49.380943  54.045627 -0.863093   \n",
        " \n",
-       "                       38_min     38_max   38_mean     38_std   38_skew  \\\n",
-       " filename                                                                 \n",
-       " classical_100.mp3 -27.335688  27.610388 -0.333233   8.185075  0.208425   \n",
-       " classical_11.mp3  -31.774948  31.500881 -3.781627   9.191043  0.260886   \n",
-       " classical_13.mp3  -24.728806  18.424034 -0.275736   7.026148 -0.640964   \n",
-       " classical_14.mp3  -36.261150  38.335830 -5.770759  12.254058  0.805707   \n",
-       " classical_15.mp3  -42.808117  24.146545 -7.260053   9.862490  0.097765   \n",
-       " ...                      ...        ...       ...        ...       ...   \n",
-       " rock_95.mp3       -27.043941  22.451445 -7.234634   8.471853  0.753855   \n",
-       " rock_96.mp3       -37.584858  28.087940 -9.704238   8.447620  0.112760   \n",
-       " rock_97.mp3       -29.620445  26.325895 -5.722825   7.727378  0.207489   \n",
-       " rock_98.mp3       -26.967852   8.714736 -9.511491   5.551820 -0.025604   \n",
-       " rock_99.mp3       -21.929403  17.050608 -5.296691   5.894962  0.390705   \n",
+       "                       1_min      1_max      1_mean      1_std    1_skew  ...  \\\n",
+       " filename                                                                 ...   \n",
+       " classical_10.mp3   0.029056  259.63272  215.094182  18.388131 -1.528751  ...   \n",
+       " classical_11.mp3   0.000000  159.42575   99.853645  21.916948 -1.176922  ...   \n",
+       " classical_12.mp3   0.000000  194.26416  148.226648  19.305008 -0.533255  ...   \n",
+       " classical_13.mp3   0.000000  257.16284  211.556558  20.347035 -1.050119  ...   \n",
+       " classical_14.mp3   0.000000  157.94792   86.563928  17.911136  0.244244  ...   \n",
+       " ...                     ...        ...         ...        ...       ...  ...   \n",
+       " rock_95.mp3      -89.948746  201.18045  111.724191  36.463584 -0.443224  ...   \n",
+       " rock_96.mp3       -7.415959  210.49246  125.453699  31.908870 -0.547469  ...   \n",
+       " rock_97.mp3      -58.824410  175.20135   99.288265  25.158417 -0.568057  ...   \n",
+       " rock_98.mp3        0.000000  187.04272   96.440874  24.137702 -0.145217  ...   \n",
+       " rock_99.mp3      -32.930650  191.73538   93.971242  33.410220  0.040113  ...   \n",
        " \n",
-       "                       39_min     39_max   39_mean     39_std   39_skew  \n",
+       "                      38_min     38_max   38_mean     38_std   38_skew  \\\n",
        " filename                                                                \n",
-       " classical_100.mp3 -38.095375  31.397882 -1.494916  10.917299  0.020985  \n",
-       " classical_11.mp3  -22.667439  50.992905  1.600777  10.125545  0.595763  \n",
-       " classical_13.mp3  -24.319565  18.439264 -2.147022   8.171929  0.009566  \n",
-       " classical_14.mp3  -40.597336  32.816467 -0.543406  11.467829 -0.187037  \n",
-       " classical_15.mp3  -31.394999  35.685540 -0.949139  11.141700  0.249279  \n",
-       " ...                      ...        ...       ...        ...       ...  \n",
-       " rock_95.mp3       -24.712723  23.410387 -4.502398   6.687983  0.238807  \n",
-       " rock_96.mp3       -38.147890  21.814400 -8.249507   7.807756  0.071968  \n",
-       " rock_97.mp3       -29.497524  25.410656 -3.356614   8.170526  0.160330  \n",
-       " rock_98.mp3       -23.020082  13.948639 -2.664985   5.051498 -0.258407  \n",
-       " rock_99.mp3       -20.983192  29.312021 -0.321836   6.571660  0.384794  \n",
+       " classical_10.mp3 -27.458416  29.811110  0.484271   8.660648 -0.479016   \n",
+       " classical_11.mp3 -31.774948  31.500881 -3.781627   9.191043  0.260886   \n",
+       " classical_12.mp3 -44.843815  28.490644 -6.242015  10.546545  0.341848   \n",
+       " classical_13.mp3 -24.728806  18.424034 -0.275736   7.026148 -0.640964   \n",
+       " classical_14.mp3 -36.261150  38.335830 -5.770759  12.254058  0.805707   \n",
+       " ...                     ...        ...       ...        ...       ...   \n",
+       " rock_95.mp3      -27.043941  22.451445 -7.234634   8.471853  0.753855   \n",
+       " rock_96.mp3      -37.584858  28.087940 -9.704238   8.447620  0.112760   \n",
+       " rock_97.mp3      -29.620445  26.325895 -5.722825   7.727378  0.207489   \n",
+       " rock_98.mp3      -26.967852   8.714736 -9.511491   5.551820 -0.025604   \n",
+       " rock_99.mp3      -21.929403  17.050608 -5.296691   5.894962  0.390705   \n",
+       " \n",
+       "                      39_min     39_max   39_mean     39_std   39_skew  \n",
+       " filename                                                               \n",
+       " classical_10.mp3 -28.989979  27.533707  0.952658  10.477735 -0.185771  \n",
+       " classical_11.mp3 -22.667439  50.992905  1.600777  10.125545  0.595763  \n",
+       " classical_12.mp3 -25.040886  46.878204  1.844494  11.160392  0.503120  \n",
+       " classical_13.mp3 -24.319565  18.439264 -2.147022   8.171929  0.009566  \n",
+       " classical_14.mp3 -40.597336  32.816467 -0.543406  11.467829 -0.187037  \n",
+       " ...                     ...        ...       ...        ...       ...  \n",
+       " rock_95.mp3      -24.712723  23.410387 -4.502398   6.687983  0.238807  \n",
+       " rock_96.mp3      -38.147890  21.814400 -8.249507   7.807756  0.071968  \n",
+       " rock_97.mp3      -29.497524  25.410656 -3.356614   8.170526  0.160330  \n",
+       " rock_98.mp3      -23.020082  13.948639 -2.664985   5.051498 -0.258407  \n",
+       " rock_99.mp3      -20.983192  29.312021 -0.321836   6.571660  0.384794  \n",
        " \n",
        " [320 rows x 200 columns],\n",
        " array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
        "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
        "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
-       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,\n",
+       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
        "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
        "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
        "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
@@ -1566,16 +1572,16 @@
    "id": "32e5e889",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:01.840481Z",
-     "iopub.status.busy": "2023-02-22T23:03:01.839551Z",
-     "iopub.status.idle": "2023-02-22T23:03:01.851629Z",
-     "shell.execute_reply": "2023-02-22T23:03:01.850671Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.267361Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.266781Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.277169Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.276232Z"
     },
     "papermill": {
-     "duration": 0.183304,
-     "end_time": "2023-02-22T23:03:01.853270",
+     "duration": 0.017882,
+     "end_time": "2023-10-10T20:29:57.279051",
      "exception": false,
-     "start_time": "2023-02-22T23:03:01.669966",
+     "start_time": "2023-10-10T20:29:57.261169",
      "status": "completed"
     },
     "tags": []
@@ -1593,7 +1599,7 @@
     {
      "data": {
       "text/plain": [
-       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,\n",
+       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
        "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,\n",
        "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,\n",
        "       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3])"
@@ -1621,16 +1627,16 @@
    "id": "e165922f",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:02.188289Z",
-     "iopub.status.busy": "2023-02-22T23:03:02.187537Z",
-     "iopub.status.idle": "2023-02-22T23:03:02.201245Z",
-     "shell.execute_reply": "2023-02-22T23:03:02.200038Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.290898Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.290575Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.300558Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.299316Z"
     },
     "papermill": {
-     "duration": 0.180303,
-     "end_time": "2023-02-22T23:03:02.203122",
+     "duration": 0.018174,
+     "end_time": "2023-10-10T20:29:57.302443",
      "exception": false,
-     "start_time": "2023-02-22T23:03:02.022819",
+     "start_time": "2023-10-10T20:29:57.284269",
      "status": "completed"
     },
     "tags": []
@@ -1639,19 +1645,19 @@
     {
      "data": {
       "text/plain": [
-       "array([[ 0.2716719 , -0.51854957,  0.02462224, ..., -0.42571805,\n",
-       "         1.58075037, -0.24619409],\n",
-       "       [ 0.26593809, -1.28254058, -0.46996562, ...,  0.51752832,\n",
-       "         1.23451112,  1.37066005],\n",
-       "       [-2.3721826 , -2.02657428, -2.02895335, ..., -0.62441255,\n",
-       "         0.38018141, -0.27831518],\n",
+       "array([[-0.4346809 , -1.00382224, -0.46537335, ...,  0.27980735,\n",
+       "         1.37909073, -0.85772004],\n",
+       "       [ 0.31629337, -1.32218065, -0.49704394, ...,  0.47491861,\n",
+       "         1.22562585,  1.40610938],\n",
+       "       [-0.42948617, -1.68565954, -1.03660633, ...,  0.54828747,\n",
+       "         1.67655505,  1.13775631],\n",
        "       ...,\n",
-       "       [ 0.73389829,  1.04182424,  1.26924796, ..., -0.99297075,\n",
-       "         0.37956779,  0.14578665],\n",
-       "       [ 0.73004075,  0.97725051,  1.49837664, ..., -0.78223397,\n",
-       "        -0.98440444, -1.03212395],\n",
-       "       [ 0.05112167,  1.26373676,  1.45768646, ..., -0.06828479,\n",
-       "        -0.3196273 ,  0.77720369]])"
+       "       [ 0.82724587,  1.02575192,  1.22449058, ..., -1.0174661 ,\n",
+       "         0.37373553,  0.14481522],\n",
+       "       [ 0.82303394,  0.96052345,  1.45129017, ..., -0.80925654,\n",
+       "        -0.98536595, -1.06811973],\n",
+       "       [ 0.0817414 ,  1.24991451,  1.41101361, ..., -0.10386926,\n",
+       "        -0.32296274,  0.79500701]])"
       ]
      },
      "execution_count": 10,
@@ -1674,16 +1680,16 @@
    "id": "d389fd70",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:02.557761Z",
-     "iopub.status.busy": "2023-02-22T23:03:02.557002Z",
-     "iopub.status.idle": "2023-02-22T23:03:02.708278Z",
-     "shell.execute_reply": "2023-02-22T23:03:02.707666Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.314140Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.313383Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.356956Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.356347Z"
     },
     "papermill": {
-     "duration": 0.329319,
-     "end_time": "2023-02-22T23:03:02.709961",
+     "duration": 0.051607,
+     "end_time": "2023-10-10T20:29:57.358807",
      "exception": false,
-     "start_time": "2023-02-22T23:03:02.380642",
+     "start_time": "2023-10-10T20:29:57.307200",
      "status": "completed"
     },
     "tags": []
@@ -1693,7 +1699,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "0.8560510400118169\n",
+      "0.8559039083956931\n",
       "(320, 50)\n",
       "(80, 50)\n",
       "(320,)\n"
@@ -1718,16 +1724,16 @@
    "id": "aa1d9036",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:03.073199Z",
-     "iopub.status.busy": "2023-02-22T23:03:03.072551Z",
-     "iopub.status.idle": "2023-02-22T23:03:03.151579Z",
-     "shell.execute_reply": "2023-02-22T23:03:03.150910Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.374172Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.373818Z",
+     "iopub.status.idle": "2023-10-10T20:29:57.420690Z",
+     "shell.execute_reply": "2023-10-10T20:29:57.420109Z"
     },
     "papermill": {
-     "duration": 0.247386,
-     "end_time": "2023-02-22T23:03:03.152924",
+     "duration": 0.056577,
+     "end_time": "2023-10-10T20:29:57.422309",
      "exception": false,
-     "start_time": "2023-02-22T23:03:02.905538",
+     "start_time": "2023-10-10T20:29:57.365732",
      "status": "completed"
     },
     "tags": []
@@ -1737,20 +1743,20 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "0.859375\n",
-      "[[ 2.09860828 -1.79503398 -2.27878145 ...  0.17465784  0.10646494\n",
-      "  -1.98265918]\n",
-      " [ 5.10342518 -3.49567443  4.12067361 ...  0.1561153   0.01008825\n",
-      "   0.11303164]\n",
-      " [ 7.23381108  4.74166814 -5.69455448 ...  0.77316073 -0.09462644\n",
-      "  -1.77141412]\n",
+      "0.78125\n",
+      "[[ 2.51466268e+00 -2.15621261e+00 -3.30158585e+00 ...  4.19121104e-01\n",
+      "   1.29879394e+00 -4.20651709e-01]\n",
+      " [ 5.36944848e+00 -3.08147501e+00 -2.42702032e+00 ... -1.12031872e+00\n",
+      "   6.35422293e-03 -2.86513090e-01]\n",
+      " [-4.71341815e+00 -1.57184343e+00 -4.14689505e+00 ... -4.98565924e-01\n",
+      "  -3.20266226e-01  2.67524977e-01]\n",
       " ...\n",
-      " [-8.5199699  -0.3577502  -5.18538872 ...  0.48186354  0.76006202\n",
-      "  -0.52209934]\n",
-      " [ 6.27528738 -1.15052972  0.01747905 ...  0.40997075 -0.62598345\n",
-      "   0.42170153]\n",
-      " [-3.50647208 -6.39204243  2.53547271 ... -0.84007993  0.98100433\n",
-      "  -0.1347382 ]]\n",
+      " [-3.32602874e+00  3.13612558e+00  2.81880947e-01 ... -8.85331612e-01\n",
+      "  -5.94016091e-01  2.01951459e-01]\n",
+      " [-4.31744551e+00 -1.49880110e+00  4.63139496e+00 ... -7.03178147e-01\n",
+      "  -4.77496275e-01 -1.66621655e+00]\n",
+      " [ 1.94703563e+00 -4.04312963e+00  6.67944207e+00 ...  1.31036789e-01\n",
+      "   1.00110120e+00 -1.92368461e+00]]\n",
       "[3 0 3 2 3 0 1 2 0 3 0 0 0 1 2 1 2 3 2 1 1 0 3 0 0 0 3 1 1 3 3 2 3 1 2 1 0\n",
       " 1 0 1 3 0 0 0 0 3 3 3 0 3 3 3 1 2 2 0 1 2 1 2 3 2 1 0]\n"
      ]
@@ -1775,16 +1781,16 @@
    "id": "fc48c86e",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:03.517106Z",
-     "iopub.status.busy": "2023-02-22T23:03:03.516738Z",
-     "iopub.status.idle": "2023-02-22T23:03:05.451445Z",
-     "shell.execute_reply": "2023-02-22T23:03:05.450768Z"
+     "iopub.execute_input": "2023-10-10T20:29:57.441081Z",
+     "iopub.status.busy": "2023-10-10T20:29:57.440621Z",
+     "iopub.status.idle": "2023-10-10T20:29:59.162266Z",
+     "shell.execute_reply": "2023-10-10T20:29:59.161265Z"
     },
     "papermill": {
-     "duration": 2.122823,
-     "end_time": "2023-02-22T23:03:05.452723",
+     "duration": 1.734451,
+     "end_time": "2023-10-10T20:29:59.165225",
      "exception": false,
-     "start_time": "2023-02-22T23:03:03.329900",
+     "start_time": "2023-10-10T20:29:57.430774",
      "status": "completed"
     },
     "tags": []
@@ -1794,10 +1800,10 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "0.702865761689291\n",
-      "{'C': 2, 'gamma': 0.01}\n",
-      "SVC(C=2, gamma=0.01)\n",
-      "0.84375\n"
+      "0.7421568627450981\n",
+      "{'C': 3, 'gamma': 0.01}\n",
+      "SVC(C=3, gamma=0.01)\n",
+      "0.8125\n"
      ]
     }
    ],
@@ -1823,16 +1829,16 @@
    "id": "7cf87469",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:05.808408Z",
-     "iopub.status.busy": "2023-02-22T23:03:05.808109Z",
-     "iopub.status.idle": "2023-02-22T23:03:05.849533Z",
-     "shell.execute_reply": "2023-02-22T23:03:05.848915Z"
+     "iopub.execute_input": "2023-10-10T20:29:59.177207Z",
+     "iopub.status.busy": "2023-10-10T20:29:59.176983Z",
+     "iopub.status.idle": "2023-10-10T20:29:59.207985Z",
+     "shell.execute_reply": "2023-10-10T20:29:59.207100Z"
     },
     "papermill": {
-     "duration": 0.236614,
-     "end_time": "2023-02-22T23:03:05.851130",
+     "duration": 0.03941,
+     "end_time": "2023-10-10T20:29:59.210579",
      "exception": false,
-     "start_time": "2023-02-22T23:03:05.614516",
+     "start_time": "2023-10-10T20:29:59.171169",
      "status": "completed"
     },
     "tags": []
@@ -1842,7 +1848,7 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "0.84375\n"
+      "0.796875\n"
      ]
     }
    ],
@@ -1861,16 +1867,16 @@
    "id": "5a754cd1",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:06.202161Z",
-     "iopub.status.busy": "2023-02-22T23:03:06.201911Z",
-     "iopub.status.idle": "2023-02-22T23:03:06.269327Z",
-     "shell.execute_reply": "2023-02-22T23:03:06.268268Z"
+     "iopub.execute_input": "2023-10-10T20:29:59.221662Z",
+     "iopub.status.busy": "2023-10-10T20:29:59.221450Z",
+     "iopub.status.idle": "2023-10-10T20:29:59.269780Z",
+     "shell.execute_reply": "2023-10-10T20:29:59.268894Z"
     },
     "papermill": {
-     "duration": 0.235398,
-     "end_time": "2023-02-22T23:03:06.271220",
+     "duration": 0.056512,
+     "end_time": "2023-10-10T20:29:59.272289",
      "exception": false,
-     "start_time": "2023-02-22T23:03:06.035822",
+     "start_time": "2023-10-10T20:29:59.215777",
      "status": "completed"
     },
     "tags": []
@@ -1881,86 +1887,86 @@
      "output_type": "stream",
      "text": [
       "0.75\n",
-      "[[5.63969115e-01 2.92668736e-01 1.09575889e-01 3.37862602e-02]\n",
-      " [9.95461821e-01 2.65426861e-03 1.38448633e-03 4.99423995e-04]\n",
-      " [9.60632899e-01 2.35069921e-02 1.28051150e-02 3.05499384e-03]\n",
-      " [8.91369951e-01 6.56639134e-02 1.40617104e-02 2.89044256e-02]\n",
-      " [9.99833424e-01 2.95404469e-05 1.16388884e-04 2.06468531e-05]\n",
-      " [9.79167160e-01 1.22443766e-02 5.27746835e-03 3.31099522e-03]\n",
-      " [9.96613784e-01 1.31158052e-04 5.68006744e-04 2.68705093e-03]\n",
-      " [9.85072769e-01 1.56817539e-03 8.55290799e-03 4.80614733e-03]\n",
-      " [8.20719395e-01 4.42933456e-02 8.73982040e-02 4.75890552e-02]\n",
-      " [9.83618698e-01 9.64883933e-03 4.63752998e-03 2.09493284e-03]\n",
-      " [9.89985388e-01 2.74283138e-03 4.78273394e-03 2.48904635e-03]\n",
-      " [9.57013715e-01 2.99616177e-02 9.60793177e-03 3.41673555e-03]\n",
-      " [6.97624274e-01 2.60588578e-02 2.05692120e-01 7.06247483e-02]\n",
-      " [8.62118722e-01 9.74254909e-02 3.51929376e-02 5.26284914e-03]\n",
-      " [3.43021372e-01 3.36548721e-01 2.84967698e-01 3.54622088e-02]\n",
-      " [9.68515136e-01 1.08045181e-02 1.68466469e-02 3.83369867e-03]\n",
-      " [9.91229786e-01 6.52044878e-03 1.27155277e-03 9.78212608e-04]\n",
-      " [9.96902340e-01 2.14848602e-03 6.01517998e-04 3.47656089e-04]\n",
-      " [6.74504459e-01 2.48881185e-01 5.48922272e-02 2.17221292e-02]\n",
-      " [1.09427395e-02 6.18181391e-01 2.54456366e-01 1.16419504e-01]\n",
-      " [6.22510771e-01 1.71876115e-01 1.86965909e-01 1.86472049e-02]\n",
-      " [2.67338137e-02 9.13749846e-01 2.96791496e-02 2.98371903e-02]\n",
-      " [1.96316382e-02 7.14327536e-01 2.22195971e-01 4.38448547e-02]\n",
-      " [4.72778310e-03 6.34335182e-01 2.41801801e-01 1.19135234e-01]\n",
-      " [4.02825479e-02 7.01364995e-01 2.26391063e-01 3.19613946e-02]\n",
-      " [6.97637853e-03 6.51519898e-01 2.44669035e-01 9.68346885e-02]\n",
-      " [5.55668071e-04 9.59286950e-01 5.92026089e-03 3.42371207e-02]\n",
-      " [2.77878186e-02 8.90391006e-01 5.83339505e-02 2.34872248e-02]\n",
-      " [7.73063199e-01 1.60218631e-01 4.64788157e-02 2.02393543e-02]\n",
-      " [2.44126037e-02 5.69261959e-01 2.78912347e-01 1.27413090e-01]\n",
-      " [1.01460952e-02 5.81052043e-01 2.00092212e-01 2.08709650e-01]\n",
-      " [1.79031976e-03 9.47802670e-01 1.20232811e-02 3.83837293e-02]\n",
-      " [4.37347166e-02 2.10213702e-01 2.89847736e-01 4.56203845e-01]\n",
-      " [9.62530887e-02 6.49370260e-01 1.69859308e-01 8.45173435e-02]\n",
-      " [2.45924902e-01 8.97037505e-02 5.61886499e-01 1.02484849e-01]\n",
-      " [2.91394630e-03 9.63476029e-01 2.37224992e-02 9.88752580e-03]\n",
-      " [2.29721594e-01 5.53967459e-01 1.21019646e-01 9.52913004e-02]\n",
-      " [1.51561689e-03 9.89175508e-01 4.36776703e-03 4.94110830e-03]\n",
-      " [1.04573677e-03 9.41173740e-01 3.34799855e-02 2.43005381e-02]\n",
-      " [2.12381697e-03 9.86331403e-01 8.19835224e-03 3.34642745e-03]\n",
-      " [3.98790086e-01 4.90515271e-01 7.71432980e-02 3.35513451e-02]\n",
-      " [7.69975664e-02 7.08219854e-01 1.45330829e-01 6.94517512e-02]\n",
-      " [1.39218583e-03 8.88444865e-01 9.46175087e-02 1.55454404e-02]\n",
-      " [2.39912461e-03 5.26495387e-03 1.13754979e-01 8.78580942e-01]\n",
-      " [6.36289841e-02 1.87693165e-01 6.52665963e-01 9.60118880e-02]\n",
-      " [1.29186950e-02 1.43213159e-01 7.77736291e-01 6.61318541e-02]\n",
-      " [1.07546257e-02 4.91085387e-01 4.13901241e-01 8.42587468e-02]\n",
-      " [1.25098200e-03 4.70038784e-03 3.78114571e-01 6.15934060e-01]\n",
-      " [1.12446465e-02 1.36079536e-02 2.68825520e-01 7.06321880e-01]\n",
-      " [1.28173017e-02 1.15541106e-02 2.47583371e-01 7.28045217e-01]\n",
-      " [1.02476783e-02 2.46643458e-02 7.88345653e-01 1.76742323e-01]\n",
-      " [1.51840243e-02 7.21824893e-01 9.01130358e-02 1.72878047e-01]\n",
-      " [1.95356568e-02 6.07055910e-02 2.73987746e-01 6.45771006e-01]\n",
-      " [1.00779162e-02 1.62825495e-02 4.84625082e-01 4.89014452e-01]\n",
-      " [1.61510456e-03 1.05209988e-02 9.62426120e-01 2.54377765e-02]\n",
-      " [3.32620747e-02 4.53931420e-03 7.16606270e-01 2.45592341e-01]\n",
-      " [3.94313607e-03 2.27489999e-02 7.10363895e-01 2.62943969e-01]\n",
-      " [1.79412315e-02 1.38389815e-02 8.15656555e-01 1.52563232e-01]\n",
-      " [2.23885518e-03 3.01167230e-03 7.07614495e-01 2.87134978e-01]\n",
-      " [2.14960862e-02 9.13932981e-03 7.01627537e-01 2.67737046e-01]\n",
-      " [2.92807172e-03 4.57562045e-02 7.27815266e-01 2.23500458e-01]\n",
-      " [5.82566751e-04 1.26241646e-02 6.18444873e-01 3.68348395e-01]\n",
-      " [1.29756276e-02 5.57585272e-02 7.96555584e-01 1.34710262e-01]\n",
-      " [1.93902203e-03 1.84186917e-02 9.38940019e-01 4.07022673e-02]\n",
-      " [2.54992162e-02 3.06105502e-01 5.34159506e-01 1.34235776e-01]\n",
-      " [3.71175899e-03 2.78830195e-03 3.90745561e-01 6.02754378e-01]\n",
-      " [1.48263728e-03 7.11741339e-03 5.07731904e-01 4.83668046e-01]\n",
-      " [8.28590208e-04 1.11997949e-02 3.57894760e-02 9.52182139e-01]\n",
-      " [1.16047286e-03 1.29317493e-02 5.11132954e-02 9.34794482e-01]\n",
-      " [2.22481411e-01 5.39676508e-02 4.58606844e-01 2.64944094e-01]\n",
-      " [1.05544534e-03 1.40755897e-01 4.50530201e-01 4.07658456e-01]\n",
-      " [1.03465513e-03 3.64249840e-03 4.28549723e-02 9.52467874e-01]\n",
-      " [8.19273255e-03 1.23528986e-01 6.60430506e-02 8.02235230e-01]\n",
-      " [9.66280944e-04 1.03781554e-02 6.97353752e-01 2.91301811e-01]\n",
-      " [3.60192689e-03 3.36837271e-02 2.02638004e-01 7.60076342e-01]\n",
-      " [2.81093594e-03 4.40217511e-03 7.78084141e-02 9.14978475e-01]\n",
-      " [1.89182574e-02 1.11047296e-02 2.33951599e-01 7.36025414e-01]\n",
-      " [9.48157678e-03 3.86792466e-01 2.06744525e-01 3.96981432e-01]\n",
-      " [1.01985223e-03 6.78334362e-03 1.95467521e-02 9.72650052e-01]\n",
-      " [9.86246658e-04 2.39032615e-03 3.10603803e-01 6.86019624e-01]]\n"
+      "[[3.80912063e-01 4.82919652e-01 9.85214848e-02 3.76468003e-02]\n",
+      " [9.98695097e-01 6.31049704e-04 3.29020824e-04 3.44832778e-04]\n",
+      " [7.36266115e-01 2.08135786e-01 3.08713900e-02 2.47267089e-02]\n",
+      " [9.92107881e-01 4.88540640e-03 1.46965938e-03 1.53705282e-03]\n",
+      " [9.95185286e-01 1.80748647e-04 1.08320567e-03 3.55075956e-03]\n",
+      " [9.80406429e-01 4.01129372e-03 1.18218425e-02 3.76043463e-03]\n",
+      " [9.11421727e-01 5.61353333e-02 2.31412354e-02 9.30170476e-03]\n",
+      " [9.95054225e-01 2.58986422e-03 1.31981443e-03 1.03609627e-03]\n",
+      " [7.86094573e-01 4.61973283e-03 1.46800123e-01 6.24855717e-02]\n",
+      " [9.90948622e-01 3.55729078e-03 3.10620131e-03 2.38788546e-03]\n",
+      " [9.98288118e-01 9.33456938e-04 5.76541747e-04 2.01883361e-04]\n",
+      " [9.99209353e-01 3.05959781e-04 3.35511812e-04 1.49175764e-04]\n",
+      " [9.90505840e-01 1.71720185e-03 2.82030284e-03 4.95665556e-03]\n",
+      " [9.58006492e-01 2.81210475e-02 6.62275509e-03 7.24970528e-03]\n",
+      " [8.15419665e-01 1.47546102e-01 1.45722448e-02 2.24619875e-02]\n",
+      " [6.40781237e-01 1.67037300e-01 1.56105931e-01 3.60755316e-02]\n",
+      " [9.99704874e-01 1.46132720e-04 1.03874709e-04 4.51188740e-05]\n",
+      " [9.87992560e-01 9.85448561e-03 1.44616128e-03 7.06792747e-04]\n",
+      " [9.68442566e-01 1.30183429e-02 1.47145547e-02 3.82453634e-03]\n",
+      " [9.97597318e-01 1.49425506e-03 3.60393318e-04 5.48033821e-04]\n",
+      " [9.99817340e-01 7.07439595e-05 7.89523468e-05 3.29635251e-05]\n",
+      " [7.40548619e-01 1.93147660e-01 4.86705399e-02 1.76331813e-02]\n",
+      " [5.46358653e-03 9.48155165e-01 3.88303278e-02 7.55092040e-03]\n",
+      " [6.93645706e-03 7.04185725e-01 1.91956439e-01 9.69213790e-02]\n",
+      " [7.54082420e-01 1.74918772e-01 4.24096836e-02 2.85891248e-02]\n",
+      " [6.71844628e-01 1.90984894e-01 1.25222882e-01 1.19475962e-02]\n",
+      " [9.78682202e-02 8.14440589e-01 6.77954387e-02 1.98957517e-02]\n",
+      " [2.67557505e-01 1.83899883e-01 3.27445968e-01 2.21096644e-01]\n",
+      " [3.74884314e-04 9.44525404e-01 6.47642757e-03 4.86232845e-02]\n",
+      " [7.01170418e-01 2.25402258e-01 5.02633402e-02 2.31639835e-02]\n",
+      " [7.09566525e-03 8.80644199e-01 7.73881454e-02 3.48719899e-02]\n",
+      " [2.48796897e-03 4.91326690e-01 6.62526685e-02 4.39932673e-01]\n",
+      " [2.59830866e-03 9.10155104e-01 1.21605028e-02 7.50860849e-02]\n",
+      " [1.19395410e-02 9.45201823e-01 3.27464466e-02 1.01121891e-02]\n",
+      " [4.40334634e-02 8.54861701e-01 6.06035992e-02 4.05012361e-02]\n",
+      " [4.88431768e-01 4.30502616e-02 3.75551021e-01 9.29669495e-02]\n",
+      " [6.96287734e-03 9.77190086e-01 1.00740652e-02 5.77297169e-03]\n",
+      " [5.48040762e-03 8.41655395e-01 7.07918425e-02 8.20723552e-02]\n",
+      " [1.01150220e-03 7.95574856e-01 1.73377553e-02 1.86075886e-01]\n",
+      " [9.19839445e-02 7.39411604e-01 1.02113037e-01 6.64914148e-02]\n",
+      " [2.35401286e-02 6.17916731e-01 2.08761482e-01 1.49781658e-01]\n",
+      " [3.72109733e-03 9.82810078e-01 9.05550342e-03 4.41332078e-03]\n",
+      " [1.45472374e-03 9.39792811e-01 5.25338921e-02 6.21857267e-03]\n",
+      " [4.04598939e-02 2.43914518e-01 2.89510817e-01 4.26114771e-01]\n",
+      " [3.84918061e-03 4.86344098e-03 6.48282347e-01 3.43005031e-01]\n",
+      " [4.27868060e-03 8.45365051e-03 8.47482036e-01 1.39785633e-01]\n",
+      " [7.04160925e-02 8.79452817e-01 2.84676081e-02 2.16634820e-02]\n",
+      " [9.08417555e-03 4.72441898e-01 4.40548839e-01 7.79250868e-02]\n",
+      " [1.34552901e-03 1.67821231e-02 2.62985419e-01 7.18886929e-01]\n",
+      " [1.19071800e-03 1.82314153e-03 8.57575175e-01 1.39410965e-01]\n",
+      " [8.05070967e-03 1.59416974e-02 6.07230449e-01 3.68777143e-01]\n",
+      " [1.81435348e-03 4.27986188e-01 5.35101250e-01 3.50982082e-02]\n",
+      " [1.12166547e-01 1.19301801e-01 3.96312133e-01 3.72219520e-01]\n",
+      " [5.12312418e-04 2.88372924e-03 9.50257986e-01 4.63459726e-02]\n",
+      " [1.73558211e-03 8.00339752e-03 1.86767450e-01 8.03493570e-01]\n",
+      " [5.06983704e-04 8.34130437e-01 1.22451421e-01 4.29111580e-02]\n",
+      " [1.27980769e-02 8.22165530e-03 8.09084193e-01 1.69896075e-01]\n",
+      " [4.41959343e-03 3.95974889e-02 6.90132944e-01 2.65849974e-01]\n",
+      " [2.67944164e-03 5.00574781e-02 7.48920432e-01 1.98342648e-01]\n",
+      " [3.51787074e-02 1.17672267e-01 6.83713699e-01 1.63435326e-01]\n",
+      " [7.02938677e-04 9.54674258e-03 2.87579938e-01 7.02170381e-01]\n",
+      " [1.21049078e-01 1.78826344e-01 2.76662544e-01 4.23462034e-01]\n",
+      " [1.43666852e-02 3.77313102e-02 8.88026928e-01 5.98750768e-02]\n",
+      " [4.62334624e-03 1.21723877e-02 9.00828490e-01 8.23757766e-02]\n",
+      " [7.99078715e-03 6.21737555e-02 7.09032167e-01 2.20803291e-01]\n",
+      " [1.28861552e-02 9.48482830e-02 2.46873258e-01 6.45392304e-01]\n",
+      " [4.13239983e-04 5.76197056e-03 3.00543861e-02 9.63770403e-01]\n",
+      " [1.96419929e-03 6.54361019e-02 2.90574475e-01 6.42025224e-01]\n",
+      " [1.68115518e-02 4.67009927e-01 2.00577964e-01 3.15600557e-01]\n",
+      " [5.22503725e-03 6.22120779e-02 4.12234616e-01 5.20328269e-01]\n",
+      " [3.12117877e-03 3.20361827e-02 1.52730993e-01 8.12111646e-01]\n",
+      " [3.90408642e-03 7.27792629e-01 1.54150568e-01 1.14152717e-01]\n",
+      " [2.18257178e-04 3.17944125e-03 8.65883614e-01 1.30718687e-01]\n",
+      " [3.04376537e-02 2.13526226e-02 3.06695380e-01 6.41514343e-01]\n",
+      " [4.33716745e-03 4.29931512e-01 5.78609106e-02 5.07870410e-01]\n",
+      " [7.40887737e-03 9.42427181e-01 2.52891459e-02 2.48747956e-02]\n",
+      " [7.71170681e-04 1.09014050e-03 6.79981335e-02 9.30140555e-01]\n",
+      " [9.73290281e-04 3.45995961e-03 3.30529078e-02 9.62513842e-01]\n",
+      " [8.08830674e-04 5.20843803e-03 2.98570366e-01 6.95412366e-01]\n",
+      " [2.34979538e-02 3.62172050e-02 3.25031347e-01 6.15253494e-01]]\n"
      ]
     }
    ],
@@ -1978,122 +1984,32 @@
    "id": "bbd99cb8",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:06.627188Z",
-     "iopub.status.busy": "2023-02-22T23:03:06.626970Z",
-     "iopub.status.idle": "2023-02-22T23:03:06.637783Z",
-     "shell.execute_reply": "2023-02-22T23:03:06.636973Z"
+     "iopub.execute_input": "2023-10-10T20:29:59.284845Z",
+     "iopub.status.busy": "2023-10-10T20:29:59.284598Z",
+     "iopub.status.idle": "2023-10-10T20:29:59.288730Z",
+     "shell.execute_reply": "2023-10-10T20:29:59.287939Z"
     },
     "papermill": {
-     "duration": 0.191268,
-     "end_time": "2023-02-22T23:03:06.639436",
+     "duration": 0.013431,
+     "end_time": "2023-10-10T20:29:59.291504",
      "exception": false,
-     "start_time": "2023-02-22T23:03:06.448168",
+     "start_time": "2023-10-10T20:29:59.278073",
      "status": "completed"
     },
     "tags": []
    },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([[5.63969115e-01, 2.92668736e-01, 1.09575889e-01, 3.37862602e-02],\n",
-       "       [9.95461821e-01, 2.65426861e-03, 1.38448633e-03, 4.99423995e-04],\n",
-       "       [9.60632899e-01, 2.35069921e-02, 1.28051150e-02, 3.05499384e-03],\n",
-       "       [8.91369951e-01, 6.56639134e-02, 1.40617104e-02, 2.89044256e-02],\n",
-       "       [9.99833424e-01, 2.95404469e-05, 1.16388884e-04, 2.06468531e-05],\n",
-       "       [9.79167160e-01, 1.22443766e-02, 5.27746835e-03, 3.31099522e-03],\n",
-       "       [9.96613784e-01, 1.31158052e-04, 5.68006744e-04, 2.68705093e-03],\n",
-       "       [9.85072769e-01, 1.56817539e-03, 8.55290799e-03, 4.80614733e-03],\n",
-       "       [8.20719395e-01, 4.42933456e-02, 8.73982040e-02, 4.75890552e-02],\n",
-       "       [9.83618698e-01, 9.64883933e-03, 4.63752998e-03, 2.09493284e-03],\n",
-       "       [9.89985388e-01, 2.74283138e-03, 4.78273394e-03, 2.48904635e-03],\n",
-       "       [9.57013715e-01, 2.99616177e-02, 9.60793177e-03, 3.41673555e-03],\n",
-       "       [6.97624274e-01, 2.60588578e-02, 2.05692120e-01, 7.06247483e-02],\n",
-       "       [8.62118722e-01, 9.74254909e-02, 3.51929376e-02, 5.26284914e-03],\n",
-       "       [3.43021372e-01, 3.36548721e-01, 2.84967698e-01, 3.54622088e-02],\n",
-       "       [9.68515136e-01, 1.08045181e-02, 1.68466469e-02, 3.83369867e-03],\n",
-       "       [9.91229786e-01, 6.52044878e-03, 1.27155277e-03, 9.78212608e-04],\n",
-       "       [9.96902340e-01, 2.14848602e-03, 6.01517998e-04, 3.47656089e-04],\n",
-       "       [6.74504459e-01, 2.48881185e-01, 5.48922272e-02, 2.17221292e-02],\n",
-       "       [1.09427395e-02, 6.18181391e-01, 2.54456366e-01, 1.16419504e-01],\n",
-       "       [6.22510771e-01, 1.71876115e-01, 1.86965909e-01, 1.86472049e-02],\n",
-       "       [2.67338137e-02, 9.13749846e-01, 2.96791496e-02, 2.98371903e-02],\n",
-       "       [1.96316382e-02, 7.14327536e-01, 2.22195971e-01, 4.38448547e-02],\n",
-       "       [4.72778310e-03, 6.34335182e-01, 2.41801801e-01, 1.19135234e-01],\n",
-       "       [4.02825479e-02, 7.01364995e-01, 2.26391063e-01, 3.19613946e-02],\n",
-       "       [6.97637853e-03, 6.51519898e-01, 2.44669035e-01, 9.68346885e-02],\n",
-       "       [5.55668071e-04, 9.59286950e-01, 5.92026089e-03, 3.42371207e-02],\n",
-       "       [2.77878186e-02, 8.90391006e-01, 5.83339505e-02, 2.34872248e-02],\n",
-       "       [7.73063199e-01, 1.60218631e-01, 4.64788157e-02, 2.02393543e-02],\n",
-       "       [2.44126037e-02, 5.69261959e-01, 2.78912347e-01, 1.27413090e-01],\n",
-       "       [1.01460952e-02, 5.81052043e-01, 2.00092212e-01, 2.08709650e-01],\n",
-       "       [1.79031976e-03, 9.47802670e-01, 1.20232811e-02, 3.83837293e-02],\n",
-       "       [4.37347166e-02, 2.10213702e-01, 2.89847736e-01, 4.56203845e-01],\n",
-       "       [9.62530887e-02, 6.49370260e-01, 1.69859308e-01, 8.45173435e-02],\n",
-       "       [2.45924902e-01, 8.97037505e-02, 5.61886499e-01, 1.02484849e-01],\n",
-       "       [2.91394630e-03, 9.63476029e-01, 2.37224992e-02, 9.88752580e-03],\n",
-       "       [2.29721594e-01, 5.53967459e-01, 1.21019646e-01, 9.52913004e-02],\n",
-       "       [1.51561689e-03, 9.89175508e-01, 4.36776703e-03, 4.94110830e-03],\n",
-       "       [1.04573677e-03, 9.41173740e-01, 3.34799855e-02, 2.43005381e-02],\n",
-       "       [2.12381697e-03, 9.86331403e-01, 8.19835224e-03, 3.34642745e-03],\n",
-       "       [3.98790086e-01, 4.90515271e-01, 7.71432980e-02, 3.35513451e-02],\n",
-       "       [7.69975664e-02, 7.08219854e-01, 1.45330829e-01, 6.94517512e-02],\n",
-       "       [1.39218583e-03, 8.88444865e-01, 9.46175087e-02, 1.55454404e-02],\n",
-       "       [2.39912461e-03, 5.26495387e-03, 1.13754979e-01, 8.78580942e-01],\n",
-       "       [6.36289841e-02, 1.87693165e-01, 6.52665963e-01, 9.60118880e-02],\n",
-       "       [1.29186950e-02, 1.43213159e-01, 7.77736291e-01, 6.61318541e-02],\n",
-       "       [1.07546257e-02, 4.91085387e-01, 4.13901241e-01, 8.42587468e-02],\n",
-       "       [1.25098200e-03, 4.70038784e-03, 3.78114571e-01, 6.15934060e-01],\n",
-       "       [1.12446465e-02, 1.36079536e-02, 2.68825520e-01, 7.06321880e-01],\n",
-       "       [1.28173017e-02, 1.15541106e-02, 2.47583371e-01, 7.28045217e-01],\n",
-       "       [1.02476783e-02, 2.46643458e-02, 7.88345653e-01, 1.76742323e-01],\n",
-       "       [1.51840243e-02, 7.21824893e-01, 9.01130358e-02, 1.72878047e-01],\n",
-       "       [1.95356568e-02, 6.07055910e-02, 2.73987746e-01, 6.45771006e-01],\n",
-       "       [1.00779162e-02, 1.62825495e-02, 4.84625082e-01, 4.89014452e-01],\n",
-       "       [1.61510456e-03, 1.05209988e-02, 9.62426120e-01, 2.54377765e-02],\n",
-       "       [3.32620747e-02, 4.53931420e-03, 7.16606270e-01, 2.45592341e-01],\n",
-       "       [3.94313607e-03, 2.27489999e-02, 7.10363895e-01, 2.62943969e-01],\n",
-       "       [1.79412315e-02, 1.38389815e-02, 8.15656555e-01, 1.52563232e-01],\n",
-       "       [2.23885518e-03, 3.01167230e-03, 7.07614495e-01, 2.87134978e-01],\n",
-       "       [2.14960862e-02, 9.13932981e-03, 7.01627537e-01, 2.67737046e-01],\n",
-       "       [2.92807172e-03, 4.57562045e-02, 7.27815266e-01, 2.23500458e-01],\n",
-       "       [5.82566751e-04, 1.26241646e-02, 6.18444873e-01, 3.68348395e-01],\n",
-       "       [1.29756276e-02, 5.57585272e-02, 7.96555584e-01, 1.34710262e-01],\n",
-       "       [1.93902203e-03, 1.84186917e-02, 9.38940019e-01, 4.07022673e-02],\n",
-       "       [2.54992162e-02, 3.06105502e-01, 5.34159506e-01, 1.34235776e-01],\n",
-       "       [3.71175899e-03, 2.78830195e-03, 3.90745561e-01, 6.02754378e-01],\n",
-       "       [1.48263728e-03, 7.11741339e-03, 5.07731904e-01, 4.83668046e-01],\n",
-       "       [8.28590208e-04, 1.11997949e-02, 3.57894760e-02, 9.52182139e-01],\n",
-       "       [1.16047286e-03, 1.29317493e-02, 5.11132954e-02, 9.34794482e-01],\n",
-       "       [2.22481411e-01, 5.39676508e-02, 4.58606844e-01, 2.64944094e-01],\n",
-       "       [1.05544534e-03, 1.40755897e-01, 4.50530201e-01, 4.07658456e-01],\n",
-       "       [1.03465513e-03, 3.64249840e-03, 4.28549723e-02, 9.52467874e-01],\n",
-       "       [8.19273255e-03, 1.23528986e-01, 6.60430506e-02, 8.02235230e-01],\n",
-       "       [9.66280944e-04, 1.03781554e-02, 6.97353752e-01, 2.91301811e-01],\n",
-       "       [3.60192689e-03, 3.36837271e-02, 2.02638004e-01, 7.60076342e-01],\n",
-       "       [2.81093594e-03, 4.40217511e-03, 7.78084141e-02, 9.14978475e-01],\n",
-       "       [1.89182574e-02, 1.11047296e-02, 2.33951599e-01, 7.36025414e-01],\n",
-       "       [9.48157678e-03, 3.86792466e-01, 2.06744525e-01, 3.96981432e-01],\n",
-       "       [1.01985223e-03, 6.78334362e-03, 1.95467521e-02, 9.72650052e-01],\n",
-       "       [9.86246658e-04, 2.39032615e-03, 3.10603803e-01, 6.86019624e-01]])"
-      ]
-     },
-     "execution_count": 16,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
-    "svc_path = BASE_PATH / \"out\" / \"SVC\"/ \"clf.pickle\"\n",
-    "svc_path.parent.mkdir(parents=True, exist_ok=True)\n",
-    "\n",
-    "with open(svc_path, \"wb\") as file:\n",
-    "    pickle.dump(clf, file)\n",
-    "\n",
-    "with open(svc_path, \"rb\") as file:\n",
-    "    loaded = pickle.load(file)\n",
+    "# svc_path = BASE_PATH / \"out\" / \"SVC\"/ \"clf.pickle\"\n",
+    "# svc_path.parent.mkdir(parents=True, exist_ok=True)\n",
+    "# \n",
+    "# with open(svc_path, \"wb\") as file:\n",
+    "#     pickle.dump(clf, file)\n",
+    "# \n",
+    "# with open(svc_path, \"rb\") as file:\n",
+    "#     loaded = pickle.load(file)\n",
     "\n",
-    "loaded.predict_proba(X_test_pca)"
+    "# loaded.predict_proba(X_test_pca)"
    ]
   },
   {
@@ -2102,16 +2018,16 @@
    "id": "af3c36d2",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:06.999779Z",
-     "iopub.status.busy": "2023-02-22T23:03:06.999414Z",
-     "iopub.status.idle": "2023-02-22T23:03:07.102856Z",
-     "shell.execute_reply": "2023-02-22T23:03:07.102108Z"
+     "iopub.execute_input": "2023-10-10T20:29:59.308349Z",
+     "iopub.status.busy": "2023-10-10T20:29:59.308060Z",
+     "iopub.status.idle": "2023-10-10T20:29:59.373037Z",
+     "shell.execute_reply": "2023-10-10T20:29:59.372087Z"
     },
     "papermill": {
-     "duration": 0.29437,
-     "end_time": "2023-02-22T23:03:07.104411",
+     "duration": 0.077343,
+     "end_time": "2023-10-10T20:29:59.375697",
      "exception": false,
-     "start_time": "2023-02-22T23:03:06.810041",
+     "start_time": "2023-10-10T20:29:59.298354",
      "status": "completed"
     },
     "tags": []
@@ -2121,88 +2037,88 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "                        label       pred1       pred2       pred3       pred4\n",
-      "filename                                                                     \n",
-      "classical_1.mp3     classical   classical  electronic         pop        rock\n",
-      "classical_10.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_12.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_16.mp3    classical   classical  electronic        rock         pop\n",
-      "classical_19.mp3    classical   classical         pop  electronic        rock\n",
-      "classical_2.mp3     classical   classical  electronic        rock         pop\n",
-      "classical_20.mp3    classical   classical        rock         pop  electronic\n",
-      "classical_24.mp3    classical   classical         pop        rock  electronic\n",
-      "classical_26.mp3    classical   classical         pop        rock  electronic\n",
-      "classical_45.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_53.mp3    classical   classical         pop        rock  electronic\n",
-      "classical_60.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_69.mp3    classical   classical         pop        rock  electronic\n",
-      "classical_81.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_83.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_87.mp3    classical   classical         pop  electronic        rock\n",
-      "classical_89.mp3    classical   classical  electronic        rock         pop\n",
-      "classical_93.mp3    classical   classical  electronic         pop        rock\n",
-      "electronic_12.mp3  electronic   classical  electronic         pop        rock\n",
-      "electronic_20.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_24.mp3  electronic   classical         pop  electronic        rock\n",
-      "electronic_25.mp3  electronic  electronic        rock         pop   classical\n",
-      "electronic_27.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_28.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_29.mp3  electronic  electronic         pop   classical        rock\n",
-      "electronic_30.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_43.mp3  electronic  electronic        rock         pop   classical\n",
-      "electronic_46.mp3  electronic  electronic         pop   classical        rock\n",
-      "electronic_47.mp3  electronic   classical  electronic         pop        rock\n",
-      "electronic_50.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_55.mp3  electronic  electronic        rock         pop   classical\n",
-      "electronic_59.mp3  electronic  electronic        rock         pop   classical\n",
-      "electronic_60.mp3  electronic        rock         pop  electronic   classical\n",
-      "electronic_62.mp3  electronic  electronic         pop   classical        rock\n",
-      "electronic_65.mp3  electronic         pop   classical        rock  electronic\n",
-      "electronic_69.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_70.mp3  electronic  electronic   classical         pop        rock\n",
-      "electronic_79.mp3  electronic  electronic        rock         pop   classical\n",
-      "electronic_86.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_87.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_89.mp3  electronic  electronic   classical         pop        rock\n",
-      "electronic_97.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_98.mp3  electronic  electronic         pop        rock   classical\n",
-      "pop_12.mp3                pop        rock         pop  electronic   classical\n",
-      "pop_20.mp3                pop         pop  electronic        rock   classical\n",
-      "pop_22.mp3                pop         pop  electronic        rock   classical\n",
-      "pop_28.mp3                pop  electronic         pop        rock   classical\n",
-      "pop_35.mp3                pop        rock         pop  electronic   classical\n",
-      "pop_36.mp3                pop        rock         pop  electronic   classical\n",
-      "pop_38.mp3                pop        rock         pop  electronic   classical\n",
-      "pop_41.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_45.mp3                pop  electronic        rock         pop   classical\n",
-      "pop_46.mp3                pop        rock         pop  electronic   classical\n",
-      "pop_53.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_55.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_56.mp3                pop         pop        rock   classical  electronic\n",
-      "pop_63.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_72.mp3                pop         pop        rock   classical  electronic\n",
-      "pop_73.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_74.mp3                pop         pop        rock   classical  electronic\n",
-      "pop_80.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_85.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_92.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_97.mp3                pop         pop        rock  electronic   classical\n",
-      "rock_10.mp3              rock         pop  electronic        rock   classical\n",
-      "rock_11.mp3              rock        rock         pop   classical  electronic\n",
-      "rock_14.mp3              rock         pop        rock  electronic   classical\n",
-      "rock_23.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_24.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_33.mp3              rock         pop        rock   classical  electronic\n",
-      "rock_36.mp3              rock         pop        rock  electronic   classical\n",
-      "rock_39.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_43.mp3              rock        rock  electronic         pop   classical\n",
-      "rock_48.mp3              rock         pop        rock  electronic   classical\n",
-      "rock_52.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_64.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_68.mp3              rock        rock         pop   classical  electronic\n",
-      "rock_71.mp3              rock        rock  electronic         pop   classical\n",
-      "rock_72.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_94.mp3              rock        rock         pop  electronic   classical\n"
+      "                         label       pred1       pred2       pred3       pred4\n",
+      "filename                                                                      \n",
+      "classical_1.mp3      classical  electronic   classical         pop        rock\n",
+      "classical_100.mp3    classical   classical  electronic        rock         pop\n",
+      "classical_16.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_2.mp3      classical   classical  electronic        rock         pop\n",
+      "classical_20.mp3     classical   classical        rock         pop  electronic\n",
+      "classical_24.mp3     classical   classical         pop        rock  electronic\n",
+      "classical_33.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_35.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_38.mp3     classical   classical         pop        rock  electronic\n",
+      "classical_42.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_46.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_48.mp3     classical   classical         pop  electronic        rock\n",
+      "classical_51.mp3     classical   classical        rock         pop  electronic\n",
+      "classical_59.mp3     classical   classical  electronic        rock         pop\n",
+      "classical_64.mp3     classical   classical  electronic        rock         pop\n",
+      "classical_68.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_7.mp3      classical   classical  electronic         pop        rock\n",
+      "classical_80.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_87.mp3     classical   classical         pop  electronic        rock\n",
+      "classical_93.mp3     classical   classical  electronic        rock         pop\n",
+      "classical_96.mp3     classical   classical         pop  electronic        rock\n",
+      "classical_99.mp3     classical   classical  electronic         pop        rock\n",
+      "electronic_100.mp3  electronic  electronic         pop        rock   classical\n",
+      "electronic_14.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_19.mp3   electronic   classical  electronic         pop        rock\n",
+      "electronic_24.mp3   electronic   classical  electronic         pop        rock\n",
+      "electronic_32.mp3   electronic  electronic   classical         pop        rock\n",
+      "electronic_41.mp3   electronic         pop   classical        rock  electronic\n",
+      "electronic_43.mp3   electronic  electronic        rock         pop   classical\n",
+      "electronic_47.mp3   electronic   classical  electronic         pop        rock\n",
+      "electronic_52.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_54.mp3   electronic  electronic        rock         pop   classical\n",
+      "electronic_59.mp3   electronic  electronic        rock         pop   classical\n",
+      "electronic_6.mp3    electronic  electronic         pop        rock   classical\n",
+      "electronic_61.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_66.mp3   electronic   classical         pop        rock  electronic\n",
+      "electronic_73.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_8.mp3    electronic  electronic        rock         pop   classical\n",
+      "electronic_81.mp3   electronic  electronic        rock         pop   classical\n",
+      "electronic_90.mp3   electronic  electronic         pop   classical        rock\n",
+      "electronic_92.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_93.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_98.mp3   electronic  electronic         pop        rock   classical\n",
+      "pop_100.mp3                pop        rock         pop  electronic   classical\n",
+      "pop_14.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_17.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_19.mp3                 pop  electronic   classical         pop        rock\n",
+      "pop_28.mp3                 pop  electronic         pop        rock   classical\n",
+      "pop_31.mp3                 pop        rock         pop  electronic   classical\n",
+      "pop_50.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_53.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_54.mp3                 pop         pop  electronic        rock   classical\n",
+      "pop_61.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_66.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_68.mp3                 pop        rock         pop  electronic   classical\n",
+      "pop_71.mp3                 pop  electronic         pop        rock   classical\n",
+      "pop_72.mp3                 pop         pop        rock   classical  electronic\n",
+      "pop_8.mp3                  pop         pop        rock  electronic   classical\n",
+      "pop_80.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_83.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_87.mp3                 pop        rock         pop  electronic   classical\n",
+      "pop_93.mp3                 pop        rock         pop  electronic   classical\n",
+      "pop_96.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_99.mp3                 pop         pop        rock  electronic   classical\n",
+      "rock_17.mp3               rock         pop        rock  electronic   classical\n",
+      "rock_20.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_22.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_26.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_29.mp3               rock  electronic        rock         pop   classical\n",
+      "rock_34.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_37.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_41.mp3               rock  electronic         pop        rock   classical\n",
+      "rock_48.mp3               rock         pop        rock  electronic   classical\n",
+      "rock_5.mp3                rock        rock         pop   classical  electronic\n",
+      "rock_58.mp3               rock        rock  electronic         pop   classical\n",
+      "rock_61.mp3               rock  electronic         pop        rock   classical\n",
+      "rock_70.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_72.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_83.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_88.mp3               rock        rock         pop  electronic   classical\n"
      ]
     }
    ],
@@ -2241,16 +2157,16 @@
    "id": "4a32007a",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:07.475035Z",
-     "iopub.status.busy": "2023-02-22T23:03:07.474479Z",
-     "iopub.status.idle": "2023-02-22T23:03:07.481194Z",
-     "shell.execute_reply": "2023-02-22T23:03:07.480580Z"
+     "iopub.execute_input": "2023-10-10T20:29:59.404777Z",
+     "iopub.status.busy": "2023-10-10T20:29:59.404554Z",
+     "iopub.status.idle": "2023-10-10T20:29:59.409685Z",
+     "shell.execute_reply": "2023-10-10T20:29:59.409125Z"
     },
     "papermill": {
-     "duration": 0.192373,
-     "end_time": "2023-02-22T23:03:07.482795",
+     "duration": 0.022785,
+     "end_time": "2023-10-10T20:29:59.411911",
      "exception": false,
-     "start_time": "2023-02-22T23:03:07.290422",
+     "start_time": "2023-10-10T20:29:59.389126",
      "status": "completed"
     },
     "tags": []
@@ -2271,16 +2187,16 @@
    "id": "99782035",
    "metadata": {
     "execution": {
-     "iopub.execute_input": "2023-02-22T23:03:07.879278Z",
-     "iopub.status.busy": "2023-02-22T23:03:07.878970Z",
-     "iopub.status.idle": "2023-02-22T23:03:07.882063Z",
-     "shell.execute_reply": "2023-02-22T23:03:07.881460Z"
+     "iopub.execute_input": "2023-10-10T20:29:59.438539Z",
+     "iopub.status.busy": "2023-10-10T20:29:59.438119Z",
+     "iopub.status.idle": "2023-10-10T20:29:59.440743Z",
+     "shell.execute_reply": "2023-10-10T20:29:59.440281Z"
     },
     "papermill": {
-     "duration": 0.213895,
-     "end_time": "2023-02-22T23:03:07.883621",
+     "duration": 0.018895,
+     "end_time": "2023-10-10T20:29:59.443247",
      "exception": false,
-     "start_time": "2023-02-22T23:03:07.669726",
+     "start_time": "2023-10-10T20:29:59.424352",
      "status": "completed"
     },
     "tags": []
@@ -2310,30 +2226,30 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.9"
+   "version": "3.10.13"
   },
   "papermill": {
    "default_parameters": {},
-   "duration": 11.734686,
-   "end_time": "2023-02-22T23:03:08.479957",
+   "duration": 4.35191,
+   "end_time": "2023-10-10T20:29:59.873795",
    "environment_variables": {},
    "exception": null,
    "input_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/5_ml_model.ipynb",
    "output_path": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/5_ml_model.ipynb",
    "parameters": {
     "INPUT_PATHS": {
-     "features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/input/features.csv",
+     "aggregated_features": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/input/features.csv",
      "split": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/input/split.csv"
     },
     "OUTPUT_PATHS": {
-     "clf": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/ml_model.pickle",
-     "submission": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/test_result.csv"
+     "clf": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/output/ml_model.pickle",
+     "submission": "/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/output/test_result.csv"
     }
    },
-   "start_time": "2023-02-22T23:02:56.745271",
+   "start_time": "2023-10-10T20:29:55.521885",
    "version": "2.4.0"
   }
  },
  "nbformat": 4,
  "nbformat_minor": 5
-}
+}
\ No newline at end of file
diff --git a/notebooks/ismir_presentation.ipynb b/notebooks/ismir_presentation.ipynb
deleted file mode 100644
index 62ff314a62b0d7920d2467e81211d983e6f0b9dc..0000000000000000000000000000000000000000
--- a/notebooks/ismir_presentation.ipynb
+++ /dev/null
@@ -1,3508 +0,0 @@
-{
- "cells": [
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Musicology data Usecase presentation"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "outputs": [],
-   "source": [
-    "# TODO: add metadata tables and upload them\n",
-    "# TODO: add experiment management"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import requests as rq\n",
-    "import yaml\n",
-    "import logging\n",
-    "import concurrent.futures\n",
-    "import zipfile"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# local package imports\n",
-    "from dbrepo_ismir.dbrepo import DBRepoConnector\n",
-    "from dbrepo_ismir.invenio import InvenioManager\n",
-    "from dbrepo_ismir.invenio import InvenioConnector\n",
-    "from dbrepo_ismir.ml import AudioMachineLearningUtils\n",
-    "from dbrepo_ismir.ml import AudioFile\n",
-    "from definitions import BASE_PATH"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "LOG = logging.getLogger(__name__)\n",
-    "logging.basicConfig(level=logging.INFO)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# create directories\n",
-    "RESPONSE_PATH = BASE_PATH / \"out\" / \"responses\"\n",
-    "RESPONSE_PATH.mkdir(exist_ok=True, parents=True)\n",
-    "(BASE_PATH / \"out\" / \"music\").mkdir(exist_ok=True, parents=True)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# load configuration\n",
-    "\n",
-    "with open(BASE_PATH / \"config\" / \"config.yml\", \"r\") as file:\n",
-    "    config: dict = yaml.safe_load(file)\n",
-    "\n",
-    "with open(BASE_PATH / \"config\" / \"credentials.yml\", \"r\") as file:\n",
-    "    credentials: dict = yaml.safe_load(file)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "dbrepo_connector = DBRepoConnector(\n",
-    "    credentials[\"dbrepo\"][\"username\"],\n",
-    "    credentials[\"dbrepo\"][\"password\"],\n",
-    "    config[\"dbrepo\"][\"host\"],\n",
-    "    config[\"dbrepo\"][\"container-id\"],\n",
-    "    config[\"dbrepo\"][\"database-id\"]\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "invenio_connector = InvenioConnector(\n",
-    "    credentials[\"invenio\"][\"token\"],\n",
-    "    config[\"invenio\"][\"host\"]\n",
-    ")\n",
-    "\n",
-    "invenio_manager = InvenioManager(\n",
-    "    credentials[\"invenio\"][\"token\"]\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "outputs": [],
-   "source": [
-    "machine_learning_utils = AudioMachineLearningUtils()"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# unzip music files to data dir\n",
-    "(BASE_PATH / \"data\" / \"mp3\").mkdir(parents=True, exist_ok=True)\n",
-    "\n",
-    "with zipfile.ZipFile(BASE_PATH / \"resource\" / \"emotifymusic.zip\", \"r\") as zfile:\n",
-    "    zfile.extractall(path=BASE_PATH / \"data\" / \"mp3\")"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Upload / Download from invenio"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 23,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "<Response [201]>"
-     },
-     "execution_count": 23,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "with open(BASE_PATH / \"resource\" / \"record_metadata.yml\", \"r\") as file:\n",
-    "    record_metadata = yaml.safe_load(file)\n",
-    "\n",
-    "invenio_manager.create_record(record_metadata)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "INFO:dbrepo_ismir.invenio:Picked up 400 files\n",
-      "INFO:dbrepo_ismir.invenio:Uploading 400 to https://test.researchdata.tuwien.ac.at\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/1.mp3 as classical_1.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/10.mp3 as classical_10.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/100.mp3 as classical_100.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/11.mp3 as classical_11.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/12.mp3 as classical_12.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/13.mp3 as classical_13.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/14.mp3 as classical_14.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/15.mp3 as classical_15.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_10.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/16.mp3 as classical_16.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_1.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/17.mp3 as classical_17.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_15.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/18.mp3 as classical_18.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_16.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/19.mp3 as classical_19.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_100.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/2.mp3 as classical_2.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_14.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/20.mp3 as classical_20.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_13.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/21.mp3 as classical_21.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_11.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/22.mp3 as classical_22.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_17.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/23.mp3 as classical_23.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_19.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/24.mp3 as classical_24.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_18.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/25.mp3 as classical_25.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_22.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/26.mp3 as classical_26.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_20.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/27.mp3 as classical_27.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_23.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/28.mp3 as classical_28.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_2.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/29.mp3 as classical_29.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_21.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/3.mp3 as classical_3.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_24.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/30.mp3 as classical_30.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_12.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/31.mp3 as classical_31.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_25.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/32.mp3 as classical_32.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_29.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/33.mp3 as classical_33.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_27.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/34.mp3 as classical_34.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_26.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/35.mp3 as classical_35.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_32.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/36.mp3 as classical_36.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_34.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/37.mp3 as classical_37.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_3.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/38.mp3 as classical_38.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_28.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/39.mp3 as classical_39.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_33.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/4.mp3 as classical_4.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_31.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/40.mp3 as classical_40.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_37.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/41.mp3 as classical_41.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_38.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/42.mp3 as classical_42.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_36.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/43.mp3 as classical_43.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_30.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/44.mp3 as classical_44.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_39.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/45.mp3 as classical_45.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_41.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/46.mp3 as classical_46.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_35.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/47.mp3 as classical_47.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_42.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/48.mp3 as classical_48.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_4.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/49.mp3 as classical_49.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_46.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/5.mp3 as classical_5.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_43.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/50.mp3 as classical_50.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_40.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/51.mp3 as classical_51.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_5.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/52.mp3 as classical_52.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_44.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/53.mp3 as classical_53.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_47.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/54.mp3 as classical_54.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_51.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/55.mp3 as classical_55.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_49.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/56.mp3 as classical_56.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_52.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/57.mp3 as classical_57.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_55.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/58.mp3 as classical_58.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_54.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/59.mp3 as classical_59.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_48.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/6.mp3 as classical_6.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_57.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/60.mp3 as classical_60.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_45.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/61.mp3 as classical_61.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_56.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/62.mp3 as classical_62.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_59.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/63.mp3 as classical_63.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_50.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/64.mp3 as classical_64.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_61.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/65.mp3 as classical_65.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_53.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/66.mp3 as classical_66.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_6.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/67.mp3 as classical_67.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_62.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/68.mp3 as classical_68.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_63.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/69.mp3 as classical_69.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_66.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/7.mp3 as classical_7.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_58.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/70.mp3 as classical_70.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_60.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/71.mp3 as classical_71.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_64.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/72.mp3 as classical_72.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_68.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/73.mp3 as classical_73.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_70.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/74.mp3 as classical_74.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_67.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/75.mp3 as classical_75.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_65.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/76.mp3 as classical_76.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_69.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/77.mp3 as classical_77.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_72.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/78.mp3 as classical_78.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_73.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/79.mp3 as classical_79.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_71.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/8.mp3 as classical_8.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_74.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/80.mp3 as classical_80.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_75.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/81.mp3 as classical_81.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_7.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/82.mp3 as classical_82.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_76.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/83.mp3 as classical_83.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_78.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/84.mp3 as classical_84.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_81.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/85.mp3 as classical_85.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_77.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/86.mp3 as classical_86.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_82.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/87.mp3 as classical_87.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_80.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/88.mp3 as classical_88.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_8.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/89.mp3 as classical_89.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_79.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/9.mp3 as classical_9.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_83.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/90.mp3 as classical_90.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_88.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/91.mp3 as classical_91.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_84.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/92.mp3 as classical_92.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_89.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/93.mp3 as classical_93.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_87.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/94.mp3 as classical_94.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_86.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/95.mp3 as classical_95.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_85.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/96.mp3 as classical_96.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_91.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/97.mp3 as classical_97.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_90.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/98.mp3 as classical_98.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_9.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/99.mp3 as classical_99.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_93.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/1.mp3 as electronic_1.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_92.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/10.mp3 as electronic_10.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_95.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/100.mp3 as electronic_100.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_96.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/11.mp3 as electronic_11.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_99.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/12.mp3 as electronic_12.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_98.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/13.mp3 as electronic_13.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_97.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/14.mp3 as electronic_14.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_10.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/15.mp3 as electronic_15.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_1.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/16.mp3 as electronic_16.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_11.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/17.mp3 as electronic_17.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of classical_94.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/18.mp3 as electronic_18.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_13.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/19.mp3 as electronic_19.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_12.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/2.mp3 as electronic_2.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_17.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/20.mp3 as electronic_20.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_16.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/21.mp3 as electronic_21.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_100.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/22.mp3 as electronic_22.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_18.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/23.mp3 as electronic_23.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_15.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/24.mp3 as electronic_24.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_2.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/25.mp3 as electronic_25.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_21.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/26.mp3 as electronic_26.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_14.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/27.mp3 as electronic_27.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_23.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/28.mp3 as electronic_28.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_22.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/29.mp3 as electronic_29.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_25.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/3.mp3 as electronic_3.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_26.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/30.mp3 as electronic_30.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_24.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/31.mp3 as electronic_31.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_19.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/32.mp3 as electronic_32.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_20.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/33.mp3 as electronic_33.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_27.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/34.mp3 as electronic_34.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_28.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/35.mp3 as electronic_35.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_29.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/36.mp3 as electronic_36.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_30.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/37.mp3 as electronic_37.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_3.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/38.mp3 as electronic_38.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_31.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/39.mp3 as electronic_39.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_34.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/4.mp3 as electronic_4.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_37.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/40.mp3 as electronic_40.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_33.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/41.mp3 as electronic_41.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_38.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/42.mp3 as electronic_42.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_32.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/43.mp3 as electronic_43.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_36.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/44.mp3 as electronic_44.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_40.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/45.mp3 as electronic_45.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_41.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/46.mp3 as electronic_46.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_42.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_35.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/47.mp3 as electronic_47.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/48.mp3 as electronic_48.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_39.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/49.mp3 as electronic_49.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_46.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/5.mp3 as electronic_5.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_44.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/50.mp3 as electronic_50.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_43.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/51.mp3 as electronic_51.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_4.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/52.mp3 as electronic_52.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_45.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/53.mp3 as electronic_53.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_48.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/54.mp3 as electronic_54.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_47.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/55.mp3 as electronic_55.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_53.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/56.mp3 as electronic_56.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_5.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/57.mp3 as electronic_57.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_50.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/58.mp3 as electronic_58.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_55.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/59.mp3 as electronic_59.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_56.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/6.mp3 as electronic_6.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_52.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/60.mp3 as electronic_60.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_51.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/61.mp3 as electronic_61.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_57.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/62.mp3 as electronic_62.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_49.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/63.mp3 as electronic_63.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_58.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/64.mp3 as electronic_64.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_54.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/65.mp3 as electronic_65.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_6.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/66.mp3 as electronic_66.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_63.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/67.mp3 as electronic_67.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_60.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/68.mp3 as electronic_68.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_59.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/69.mp3 as electronic_69.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_65.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/7.mp3 as electronic_7.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_67.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/70.mp3 as electronic_70.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_68.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/71.mp3 as electronic_71.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_7.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/72.mp3 as electronic_72.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_66.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/73.mp3 as electronic_73.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_70.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/74.mp3 as electronic_74.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_69.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/75.mp3 as electronic_75.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_71.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/76.mp3 as electronic_76.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_73.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/77.mp3 as electronic_77.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_75.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/78.mp3 as electronic_78.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_74.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/79.mp3 as electronic_79.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_72.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/8.mp3 as electronic_8.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_77.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/80.mp3 as electronic_80.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_76.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/81.mp3 as electronic_81.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_78.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/82.mp3 as electronic_82.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_79.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/83.mp3 as electronic_83.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_8.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/84.mp3 as electronic_84.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_81.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/85.mp3 as electronic_85.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_83.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/86.mp3 as electronic_86.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_80.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/87.mp3 as electronic_87.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_84.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/88.mp3 as electronic_88.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_85.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/89.mp3 as electronic_89.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_87.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/9.mp3 as electronic_9.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_82.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/90.mp3 as electronic_90.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_86.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/91.mp3 as electronic_91.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_88.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/92.mp3 as electronic_92.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_89.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/93.mp3 as electronic_93.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_9.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/94.mp3 as electronic_94.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_90.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/95.mp3 as electronic_95.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_92.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/96.mp3 as electronic_96.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_91.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/97.mp3 as electronic_97.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_93.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/98.mp3 as electronic_98.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_94.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/99.mp3 as electronic_99.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_95.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/1.mp3 as pop_1.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_97.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/10.mp3 as pop_10.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_99.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/100.mp3 as pop_100.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_96.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/11.mp3 as pop_11.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_98.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/12.mp3 as pop_12.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_10.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/13.mp3 as pop_13.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_11.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/14.mp3 as pop_14.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_12.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/15.mp3 as pop_15.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_13.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/16.mp3 as pop_16.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_15.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/17.mp3 as pop_17.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_16.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/18.mp3 as pop_18.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_17.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/19.mp3 as pop_19.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_18.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/2.mp3 as pop_2.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_19.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/20.mp3 as pop_20.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_2.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/21.mp3 as pop_21.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_20.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/22.mp3 as pop_22.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_21.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/23.mp3 as pop_23.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_22.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/24.mp3 as pop_24.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_23.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/25.mp3 as pop_25.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_24.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/26.mp3 as pop_26.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_25.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/27.mp3 as pop_27.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_26.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/28.mp3 as pop_28.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_27.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/29.mp3 as pop_29.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_28.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/3.mp3 as pop_3.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_29.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/30.mp3 as pop_30.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_3.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/31.mp3 as pop_31.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_30.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/32.mp3 as pop_32.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_31.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/33.mp3 as pop_33.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_32.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/34.mp3 as pop_34.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_33.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/35.mp3 as pop_35.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/36.mp3 as pop_36.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_34.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/37.mp3 as pop_37.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_35.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/38.mp3 as pop_38.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_1.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/39.mp3 as pop_39.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_62.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_39.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/4.mp3 as pop_4.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of electronic_61.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/40.mp3 as pop_40.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/41.mp3 as pop_41.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_100.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/42.mp3 as pop_42.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_4.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/43.mp3 as pop_43.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_14.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/44.mp3 as pop_44.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_42.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/45.mp3 as pop_45.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_43.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/46.mp3 as pop_46.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_44.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/47.mp3 as pop_47.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_45.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/48.mp3 as pop_48.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_46.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/49.mp3 as pop_49.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_47.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/5.mp3 as pop_5.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_48.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/50.mp3 as pop_50.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_49.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/51.mp3 as pop_51.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_5.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/52.mp3 as pop_52.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_50.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/53.mp3 as pop_53.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_51.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/54.mp3 as pop_54.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_52.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/55.mp3 as pop_55.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_53.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/56.mp3 as pop_56.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_54.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/57.mp3 as pop_57.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_55.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/58.mp3 as pop_58.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_56.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/59.mp3 as pop_59.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_57.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/6.mp3 as pop_6.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_58.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/60.mp3 as pop_60.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_59.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/61.mp3 as pop_61.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_6.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/62.mp3 as pop_62.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_60.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/63.mp3 as pop_63.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_61.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/64.mp3 as pop_64.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_62.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/65.mp3 as pop_65.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_63.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/66.mp3 as pop_66.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_64.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/67.mp3 as pop_67.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_65.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/68.mp3 as pop_68.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_66.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/69.mp3 as pop_69.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_68.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/7.mp3 as pop_7.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_67.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/70.mp3 as pop_70.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_37.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/71.mp3 as pop_71.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_38.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/72.mp3 as pop_72.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_7.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/73.mp3 as pop_73.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_69.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/74.mp3 as pop_74.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_70.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/75.mp3 as pop_75.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_71.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/76.mp3 as pop_76.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_72.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/77.mp3 as pop_77.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_73.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/78.mp3 as pop_78.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_74.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/79.mp3 as pop_79.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_41.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/8.mp3 as pop_8.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_77.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/80.mp3 as pop_80.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_75.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/81.mp3 as pop_81.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_76.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/82.mp3 as pop_82.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_40.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/83.mp3 as pop_83.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_79.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/84.mp3 as pop_84.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_8.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/85.mp3 as pop_85.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_80.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/86.mp3 as pop_86.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_83.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/87.mp3 as pop_87.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_78.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/88.mp3 as pop_88.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_85.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/89.mp3 as pop_89.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_81.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/9.mp3 as pop_9.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_84.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/90.mp3 as pop_90.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_87.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/91.mp3 as pop_91.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_82.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/92.mp3 as pop_92.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_89.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/93.mp3 as pop_93.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_88.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/94.mp3 as pop_94.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_90.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/95.mp3 as pop_95.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_86.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/96.mp3 as pop_96.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_91.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/97.mp3 as pop_97.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_9.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/98.mp3 as pop_98.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/99.mp3 as pop_99.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_94.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/1.mp3 as rock_1.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_96.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/10.mp3 as rock_10.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_92.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/100.mp3 as rock_100.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_98.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/11.mp3 as rock_11.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_95.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/12.mp3 as rock_12.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_93.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/13.mp3 as rock_13.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_97.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/14.mp3 as rock_14.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of pop_99.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/15.mp3 as rock_15.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_1.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/16.mp3 as rock_16.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_10.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/17.mp3 as rock_17.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_11.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/18.mp3 as rock_18.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_13.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/19.mp3 as rock_19.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_12.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/2.mp3 as rock_2.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_100.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/20.mp3 as rock_20.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_18.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/21.mp3 as rock_21.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_17.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/22.mp3 as rock_22.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_20.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/23.mp3 as rock_23.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_14.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/24.mp3 as rock_24.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_15.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_16.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/25.mp3 as rock_25.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/26.mp3 as rock_26.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_19.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/27.mp3 as rock_27.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_2.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_22.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/28.mp3 as rock_28.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/29.mp3 as rock_29.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_24.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/3.mp3 as rock_3.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_21.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/30.mp3 as rock_30.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_23.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/31.mp3 as rock_31.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_26.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/32.mp3 as rock_32.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_25.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/33.mp3 as rock_33.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_27.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/34.mp3 as rock_34.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_29.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/35.mp3 as rock_35.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_31.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/36.mp3 as rock_36.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_30.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/37.mp3 as rock_37.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_35.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/38.mp3 as rock_38.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_34.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/39.mp3 as rock_39.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_28.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/4.mp3 as rock_4.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_32.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/40.mp3 as rock_40.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_36.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/41.mp3 as rock_41.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_3.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/42.mp3 as rock_42.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_37.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/43.mp3 as rock_43.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_33.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/44.mp3 as rock_44.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_38.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/45.mp3 as rock_45.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_40.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/46.mp3 as rock_46.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_4.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/47.mp3 as rock_47.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_44.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/48.mp3 as rock_48.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_45.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/49.mp3 as rock_49.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_41.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/5.mp3 as rock_5.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_42.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/50.mp3 as rock_50.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_39.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/51.mp3 as rock_51.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_43.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/52.mp3 as rock_52.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_47.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/53.mp3 as rock_53.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_46.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/54.mp3 as rock_54.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_48.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/55.mp3 as rock_55.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_5.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/56.mp3 as rock_56.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_50.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/57.mp3 as rock_57.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_54.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/58.mp3 as rock_58.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_52.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/59.mp3 as rock_59.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_56.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/6.mp3 as rock_6.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_51.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/60.mp3 as rock_60.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_49.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/61.mp3 as rock_61.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_53.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/62.mp3 as rock_62.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_6.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/63.mp3 as rock_63.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_59.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/64.mp3 as rock_64.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_57.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/65.mp3 as rock_65.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_60.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/66.mp3 as rock_66.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_58.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/67.mp3 as rock_67.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_61.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/68.mp3 as rock_68.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_55.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/69.mp3 as rock_69.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_62.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/7.mp3 as rock_7.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_66.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/70.mp3 as rock_70.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_63.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/71.mp3 as rock_71.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_68.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/72.mp3 as rock_72.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_7.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/73.mp3 as rock_73.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_64.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/74.mp3 as rock_74.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_65.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/75.mp3 as rock_75.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_70.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/76.mp3 as rock_76.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_67.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/77.mp3 as rock_77.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_69.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/78.mp3 as rock_78.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_71.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/79.mp3 as rock_79.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_73.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/8.mp3 as rock_8.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_72.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/80.mp3 as rock_80.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_74.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/81.mp3 as rock_81.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_79.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/82.mp3 as rock_82.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_78.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/83.mp3 as rock_83.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_75.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/84.mp3 as rock_84.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_80.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/85.mp3 as rock_85.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_8.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/86.mp3 as rock_86.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_77.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/87.mp3 as rock_87.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_76.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/88.mp3 as rock_88.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_81.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/89.mp3 as rock_89.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_86.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/9.mp3 as rock_9.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_82.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/90.mp3 as rock_90.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_84.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/91.mp3 as rock_91.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_85.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/92.mp3 as rock_92.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_92.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/93.mp3 as rock_93.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_91.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/94.mp3 as rock_94.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_93.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/95.mp3 as rock_95.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_94.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/96.mp3 as rock_96.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_95.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/97.mp3 as rock_97.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_96.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/98.mp3 as rock_98.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_97.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/99.mp3 as rock_99.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_98.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_99.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_87.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_83.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_88.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_89.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_90.mp3\n",
-      "INFO:dbrepo_ismir.invenio:Finished upload  of rock_9.mp3\n"
-     ]
-    }
-   ],
-   "source": [
-    "invenio_manager.upload_record(\n",
-    "    BASE_PATH / \"data\" / \"mp3\",\n",
-    "    \".*\",\n",
-    "    \"**/*.*\"\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# !!! Beware publishing of record is not reversible !!!\n",
-    "\n",
-    "publish_response = invenio_manager.publish_record()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 26,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "'https://test.researchdata.tuwien.ac.at/records/h6d02-vmm08'"
-     },
-     "execution_count": 26,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "try:\n",
-    "    dro_url = publish_response.json()[\"links\"][\"self_doi\"]\n",
-    "except NameError as e:\n",
-    "    dro_url = \"https://test.researchdata.tuwien.ac.at/records/h6d02-vmm08\"\n",
-    "    \n",
-    "record_id = dro_url.split('/')[-1]\n",
-    "\n",
-    "# Could continue with invenio_manager instead of invenio_manager_published\n",
-    "# given the newly created record was also published with above cell\n",
-    "invenio_manager_published = InvenioManager(\n",
-    "    invenio_connector.token, \n",
-    "    record_id=record_id\n",
-    ")\n",
-    "\n",
-    "dro_url"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Download data:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 29,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "filename = \"electronic_1.mp3\"\n",
-    "\n",
-    "# get record description\n",
-    "response = rq.get(\n",
-    "    f\"{invenio_connector.host}/api/records/{record_id}\",\n",
-    "    headers=invenio_connector.headers,\n",
-    ")\n",
-    "\n",
-    "# get list of files \n",
-    "response = rq.get(\n",
-    "    f\"{invenio_connector.host}/api/records/{record_id}/files\",\n",
-    "    headers=invenio_connector.headers,\n",
-    ")\n",
-    "\n",
-    "# get metadata of file\n",
-    "response = rq.get(\n",
-    "    f\"{invenio_connector.host}/api/records/{record_id}/files/{filename}\",\n",
-    "    headers=invenio_connector.headers\n",
-    ")\n",
-    "\n",
-    "# download a file\n",
-    "response = rq.get(\n",
-    "    f\"{invenio_connector.host}/api/records/{record_id}/files/{filename}/content\",\n",
-    "    headers=invenio_connector.headers\n",
-    ")\n",
-    "\n",
-    "with open(BASE_PATH / \"out\" / filename, \"wb\") as file:\n",
-    "    file.write(response.content)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Download all Files"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 30,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "invenio_manager_published.download_record(BASE_PATH / \"out\" / \"music\")"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Feature Extraction of Downloaded files from Invenio"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 34,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "[PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/1.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/10.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/100.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/11.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/12.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/13.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/14.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/15.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/16.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/17.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/18.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/19.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/2.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/20.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/21.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/22.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/23.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/24.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/25.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/26.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/27.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/28.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/29.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/3.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/30.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/31.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/32.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/33.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/34.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/35.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/36.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/37.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/38.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/39.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/4.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/40.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/41.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/42.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/43.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/44.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/45.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/46.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/47.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/48.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/49.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/5.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/50.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/51.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/52.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/53.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/54.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/55.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/56.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/57.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/58.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/59.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/6.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/60.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/61.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/62.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/63.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/64.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/65.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/66.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/67.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/68.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/69.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/7.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/70.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/71.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/72.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/73.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/74.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/75.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/76.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/77.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/78.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/79.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/8.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/80.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/81.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/82.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/83.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/84.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/85.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/86.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/87.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/88.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/89.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/9.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/90.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/91.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/92.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/93.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/94.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/95.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/96.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/97.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/98.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/classical/99.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/1.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/10.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/100.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/11.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/12.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/13.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/14.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/15.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/16.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/17.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/18.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/19.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/2.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/20.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/21.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/22.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/23.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/24.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/25.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/26.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/27.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/28.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/29.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/3.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/30.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/31.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/32.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/33.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/34.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/35.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/36.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/37.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/38.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/39.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/4.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/40.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/41.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/42.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/43.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/44.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/45.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/46.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/47.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/48.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/49.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/5.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/50.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/51.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/52.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/53.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/54.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/55.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/56.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/57.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/58.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/59.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/6.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/60.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/61.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/62.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/63.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/64.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/65.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/66.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/67.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/68.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/69.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/7.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/70.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/71.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/72.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/73.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/74.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/75.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/76.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/77.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/78.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/79.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/8.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/80.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/81.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/82.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/83.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/84.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/85.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/86.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/87.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/88.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/89.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/9.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/90.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/91.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/92.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/93.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/94.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/95.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/96.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/97.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/98.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/electronic/99.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/1.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/10.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/100.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/11.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/12.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/13.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/14.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/15.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/16.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/17.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/18.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/19.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/2.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/20.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/21.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/22.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/23.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/24.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/25.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/26.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/27.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/28.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/29.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/3.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/30.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/31.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/32.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/33.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/34.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/35.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/36.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/37.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/38.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/39.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/4.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/40.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/41.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/42.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/43.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/44.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/45.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/46.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/47.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/48.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/49.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/5.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/50.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/51.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/52.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/53.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/54.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/55.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/56.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/57.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/58.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/59.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/6.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/60.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/61.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/62.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/63.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/64.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/65.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/66.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/67.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/68.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/69.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/7.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/70.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/71.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/72.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/73.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/74.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/75.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/76.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/77.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/78.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/79.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/8.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/80.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/81.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/82.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/83.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/84.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/85.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/86.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/87.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/88.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/89.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/9.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/90.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/91.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/92.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/93.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/94.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/95.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/96.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/97.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/98.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/pop/99.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/1.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/10.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/100.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/11.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/12.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/13.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/14.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/15.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/16.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/17.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/18.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/19.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/2.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/20.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/21.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/22.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/23.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/24.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/25.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/26.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/27.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/28.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/29.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/3.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/30.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/31.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/32.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/33.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/34.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/35.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/36.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/37.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/38.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/39.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/4.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/40.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/41.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/42.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/43.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/44.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/45.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/46.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/47.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/48.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/49.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/5.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/50.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/51.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/52.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/53.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/54.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/55.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/56.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/57.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/58.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/59.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/6.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/60.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/61.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/62.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/63.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/64.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/65.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/66.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/67.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/68.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/69.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/7.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/70.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/71.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/72.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/73.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/74.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/75.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/76.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/77.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/78.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/79.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/8.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/80.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/81.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/82.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/83.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/84.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/85.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/86.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/87.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/88.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/89.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/9.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/90.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/91.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/92.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/93.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/94.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/95.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/96.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/97.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/98.mp3'),\n PosixPath('/home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/data/mp3/rock/99.mp3')]"
-     },
-     "execution_count": 34,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "import pathlib\n",
-    "import matplotlib.pyplot as plt\n",
-    "import pandas as pd\n",
-    "from contextlib import contextmanager,redirect_stderr,redirect_stdout\n",
-    "from os import devnull\n",
-    "from typing import Any\n",
-    "from root import BASE_PATH\n",
-    "import os\n",
-    "\n",
-    "MP3_PATH = BASE_PATH / \"data\" / \"mp3\"\n",
-    "WAV_PATH = BASE_PATH / \"data\" / \"wav\"\n",
-    "MFCC_PATH = BASE_PATH / \"out\" / \"mfcc\"\n",
-    "MFCC_PATH.mkdir(parents=True, exist_ok=True)\n",
-    "mp3_filepaths = [path for path in sorted(MP3_PATH.glob('**/*.mp3'))]\n",
-    "\n",
-    "mp3_filepaths"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 35,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import librosa\n",
-    "import librosa.display"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 33,
-   "metadata": {},
-   "outputs": [
-    {
-     "ename": "NameError",
-     "evalue": "name 'os' is not defined",
-     "output_type": "error",
-     "traceback": [
-      "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
-      "\u001B[0;31mNameError\u001B[0m                                 Traceback (most recent call last)",
-      "Cell \u001B[0;32mIn[33], line 12\u001B[0m\n\u001B[1;32m     10\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m input_path \u001B[38;5;129;01min\u001B[39;00m mp3_filepaths:\n\u001B[1;32m     11\u001B[0m     output_path \u001B[38;5;241m=\u001B[39m (WAV_PATH \u001B[38;5;241m/\u001B[39m input_path\u001B[38;5;241m.\u001B[39mrelative_to(MP3_PATH))\u001B[38;5;241m.\u001B[39mwith_suffix(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m.wav\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m---> 12\u001B[0m     \u001B[43mconvert_file\u001B[49m\u001B[43m(\u001B[49m\u001B[43minput_path\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43moutput_path\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m     15\u001B[0m \u001B[38;5;66;03m# Pick up all files in data dir with .wav suffix\u001B[39;00m\n\u001B[1;32m     16\u001B[0m wav_filepaths \u001B[38;5;241m=\u001B[39m [path \u001B[38;5;28;01mfor\u001B[39;00m path \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28msorted\u001B[39m((BASE_PATH \u001B[38;5;241m/\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mdata\u001B[39m\u001B[38;5;124m\"\u001B[39m)\u001B[38;5;241m.\u001B[39mglob(\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m**/*.wav\u001B[39m\u001B[38;5;124m'\u001B[39m)) ]\n",
-      "Cell \u001B[0;32mIn[33], line 8\u001B[0m, in \u001B[0;36mconvert_file\u001B[0;34m(input_path, output_path)\u001B[0m\n\u001B[1;32m      6\u001B[0m output_path\u001B[38;5;241m.\u001B[39mparent\u001B[38;5;241m.\u001B[39mmkdir(exist_ok\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m, parents\u001B[38;5;241m=\u001B[39m\u001B[38;5;28;01mTrue\u001B[39;00m)\n\u001B[1;32m      7\u001B[0m \u001B[38;5;66;03m# convert using mpg123\u001B[39;00m\n\u001B[0;32m----> 8\u001B[0m \u001B[43mos\u001B[49m\u001B[38;5;241m.\u001B[39msystem(\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmpg123 -q -w \u001B[39m\u001B[38;5;132;01m{\u001B[39;00moutput_path\u001B[38;5;241m.\u001B[39mas_posix()\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m \u001B[39m\u001B[38;5;132;01m{\u001B[39;00minput_path\u001B[38;5;241m.\u001B[39mas_posix()\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m\"\u001B[39m)\n",
-      "\u001B[0;31mNameError\u001B[0m: name 'os' is not defined"
-     ]
-    }
-   ],
-   "source": [
-    "# convert mp3 files to wav\n",
-    "# mpg123 required\n",
-    "\n",
-    "def convert_file(input_path: pathlib.Path, output_path: pathlib.Path) -> None:\n",
-    "    # Make sure subdir exists\n",
-    "    output_path.parent.mkdir(exist_ok=True, parents=True)\n",
-    "    # convert using mpg123\n",
-    "    os.system(f\"mpg123 -q -w {output_path.as_posix()} {input_path.as_posix()}\")\n",
-    "\n",
-    "for input_path in mp3_filepaths:\n",
-    "    output_path = (WAV_PATH / input_path.relative_to(MP3_PATH)).with_suffix(\".wav\")\n",
-    "    convert_file(input_path, output_path)\n",
-    "\n",
-    "\n",
-    "# Pick up all files in data dir with .wav suffix\n",
-    "wav_filepaths = [path for path in sorted((BASE_PATH / \"data\").glob('**/*.wav')) ]\n",
-    "\n",
-    "len(mp3_filepaths)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [
-    "# new mfcc df creation:\n",
-    "\n",
-    "audiofiles: list[AudioFile] = [\n",
-    "    AudioFile(\n",
-    "        MP3_PATH,\n",
-    "        filepath,\n",
-    "        filepath.parent.name\n",
-    "    ) for filepath in MP3_PATH.glob(\"**/*\")\n",
-    "]\n",
-    "\n",
-    "mfcc_df = machine_learning_utils.generate_multiple_mfcc_features(\n",
-    "    audiofiles\n",
-    ")\n",
-    "\n"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "              filename  sample      genre  filenumber           0           1  \\\n0     classical_12.mp3       0  classical          12 -562.675171    0.000000   \n1     classical_12.mp3       1  classical          12 -377.158630  140.093323   \n2     classical_12.mp3       2  classical          12 -258.835602  152.421295   \n3     classical_12.mp3       3  classical          12 -240.433258  145.206360   \n4     classical_12.mp3       4  classical          12 -265.707764  132.303268   \n...                ...     ...        ...         ...         ...         ...   \n2581       rock_99.mp3    2581       rock          99   21.787605   85.580826   \n2582       rock_99.mp3    2582       rock          99   15.572616   77.452782   \n2583       rock_99.mp3    2583       rock          99   13.339417   82.475601   \n2584       rock_99.mp3    2584       rock          99   13.213579   92.493988   \n2585       rock_99.mp3    2585       rock          99  -10.291037  103.562256   \n\n              2          3          4          5  ...         30         31  \\\n0      0.000000   0.000000   0.000000   0.000000  ...   0.000000   0.000000   \n1     11.552977   6.869974   2.597836 -12.081018  ...   3.403205  10.121262   \n2     -1.228345  13.090727  -5.023252  -4.367101  ...   0.327813  11.534899   \n3     -4.461696  11.758677 -10.757431   1.254790  ...  -6.263988  11.113757   \n4     -7.728113   9.628896 -20.384869  -1.778922  ... -21.676682   5.254867   \n...         ...        ...        ...        ...  ...        ...        ...   \n2581 -46.306671  18.197096  -2.197520  15.667412  ... -16.796026  -4.496211   \n2582 -34.896511  23.128643  -2.260536  10.366127  ... -21.933458 -12.466309   \n2583 -30.214211  25.814865  -4.943372  10.197868  ... -16.537088  -9.494637   \n2584 -31.854889  29.340508  -3.183558   8.847383  ... -13.900535  -6.496171   \n2585 -25.215910  27.055992  -3.575981   8.064964  ... -15.524373  -4.153163   \n\n             32        33        34        35         36         37  \\\n0      0.000000  0.000000  0.000000  0.000000   0.000000   0.000000   \n1     11.495217 -1.086922 -7.269203  1.892457  -4.588193  -5.652980   \n2     19.050909 -0.327993 -7.341021  3.830878 -10.513655 -14.950528   \n3     20.267780 -2.154666 -5.127759  2.469068 -12.121831 -21.083326   \n4     18.119230 -5.845078 -6.094512 -2.550637  -7.051765 -23.662018   \n...         ...       ...       ...       ...        ...        ...   \n2581  -5.669511  1.081637 -2.461577  2.990703   4.621572  -0.688445   \n2582  -6.501689  8.830140 -1.279472  0.076493  -0.084034   2.975086   \n2583  -5.872965  6.031368  0.235092 -0.736026  -3.343213   2.876546   \n2584  -5.673679  0.987822 -2.714684  1.725184  -1.239075   2.953235   \n2585  -2.979839  3.092370 -1.781236  0.628403   2.387391   1.865388   \n\n             38         39  \n0      0.000000   0.000000  \n1     -2.624125   8.233236  \n2     -1.946501   9.361112  \n3     -7.469269  10.618135  \n4    -17.173141   5.203885  \n...         ...        ...  \n2581 -12.773129  -2.747378  \n2582 -14.551804 -13.077312  \n2583 -16.325350 -10.109643  \n2584 -19.870598  -3.944447  \n2585 -19.182354   3.445506  \n\n[1027268 rows x 44 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>sample</th>\n      <th>genre</th>\n      <th>filenumber</th>\n      <th>0</th>\n      <th>1</th>\n      <th>2</th>\n      <th>3</th>\n      <th>4</th>\n      <th>5</th>\n      <th>...</th>\n      <th>30</th>\n      <th>31</th>\n      <th>32</th>\n      <th>33</th>\n      <th>34</th>\n      <th>35</th>\n      <th>36</th>\n      <th>37</th>\n      <th>38</th>\n      <th>39</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>classical_12.mp3</td>\n      <td>0</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-562.675171</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>classical_12.mp3</td>\n      <td>1</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-377.158630</td>\n      <td>140.093323</td>\n      <td>11.552977</td>\n      <td>6.869974</td>\n      <td>2.597836</td>\n      <td>-12.081018</td>\n      <td>...</td>\n      <td>3.403205</td>\n      <td>10.121262</td>\n      <td>11.495217</td>\n      <td>-1.086922</td>\n      <td>-7.269203</td>\n      <td>1.892457</td>\n      <td>-4.588193</td>\n      <td>-5.652980</td>\n      <td>-2.624125</td>\n      <td>8.233236</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>classical_12.mp3</td>\n      <td>2</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-258.835602</td>\n      <td>152.421295</td>\n      <td>-1.228345</td>\n      <td>13.090727</td>\n      <td>-5.023252</td>\n      <td>-4.367101</td>\n      <td>...</td>\n      <td>0.327813</td>\n      <td>11.534899</td>\n      <td>19.050909</td>\n      <td>-0.327993</td>\n      <td>-7.341021</td>\n      <td>3.830878</td>\n      <td>-10.513655</td>\n      <td>-14.950528</td>\n      <td>-1.946501</td>\n      <td>9.361112</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>classical_12.mp3</td>\n      <td>3</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-240.433258</td>\n      <td>145.206360</td>\n      <td>-4.461696</td>\n      <td>11.758677</td>\n      <td>-10.757431</td>\n      <td>1.254790</td>\n      <td>...</td>\n      <td>-6.263988</td>\n      <td>11.113757</td>\n      <td>20.267780</td>\n      <td>-2.154666</td>\n      <td>-5.127759</td>\n      <td>2.469068</td>\n      <td>-12.121831</td>\n      <td>-21.083326</td>\n      <td>-7.469269</td>\n      <td>10.618135</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>classical_12.mp3</td>\n      <td>4</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-265.707764</td>\n      <td>132.303268</td>\n      <td>-7.728113</td>\n      <td>9.628896</td>\n      <td>-20.384869</td>\n      <td>-1.778922</td>\n      <td>...</td>\n      <td>-21.676682</td>\n      <td>5.254867</td>\n      <td>18.119230</td>\n      <td>-5.845078</td>\n      <td>-6.094512</td>\n      <td>-2.550637</td>\n      <td>-7.051765</td>\n      <td>-23.662018</td>\n      <td>-17.173141</td>\n      <td>5.203885</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>2581</th>\n      <td>rock_99.mp3</td>\n      <td>2581</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>21.787605</td>\n      <td>85.580826</td>\n      <td>-46.306671</td>\n      <td>18.197096</td>\n      <td>-2.197520</td>\n      <td>15.667412</td>\n      <td>...</td>\n      <td>-16.796026</td>\n      <td>-4.496211</td>\n      <td>-5.669511</td>\n      <td>1.081637</td>\n      <td>-2.461577</td>\n      <td>2.990703</td>\n      <td>4.621572</td>\n      <td>-0.688445</td>\n      <td>-12.773129</td>\n      <td>-2.747378</td>\n    </tr>\n    <tr>\n      <th>2582</th>\n      <td>rock_99.mp3</td>\n      <td>2582</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>15.572616</td>\n      <td>77.452782</td>\n      <td>-34.896511</td>\n      <td>23.128643</td>\n      <td>-2.260536</td>\n      <td>10.366127</td>\n      <td>...</td>\n      <td>-21.933458</td>\n      <td>-12.466309</td>\n      <td>-6.501689</td>\n      <td>8.830140</td>\n      <td>-1.279472</td>\n      <td>0.076493</td>\n      <td>-0.084034</td>\n      <td>2.975086</td>\n      <td>-14.551804</td>\n      <td>-13.077312</td>\n    </tr>\n    <tr>\n      <th>2583</th>\n      <td>rock_99.mp3</td>\n      <td>2583</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>13.339417</td>\n      <td>82.475601</td>\n      <td>-30.214211</td>\n      <td>25.814865</td>\n      <td>-4.943372</td>\n      <td>10.197868</td>\n      <td>...</td>\n      <td>-16.537088</td>\n      <td>-9.494637</td>\n      <td>-5.872965</td>\n      <td>6.031368</td>\n      <td>0.235092</td>\n      <td>-0.736026</td>\n      <td>-3.343213</td>\n      <td>2.876546</td>\n      <td>-16.325350</td>\n      <td>-10.109643</td>\n    </tr>\n    <tr>\n      <th>2584</th>\n      <td>rock_99.mp3</td>\n      <td>2584</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>13.213579</td>\n      <td>92.493988</td>\n      <td>-31.854889</td>\n      <td>29.340508</td>\n      <td>-3.183558</td>\n      <td>8.847383</td>\n      <td>...</td>\n      <td>-13.900535</td>\n      <td>-6.496171</td>\n      <td>-5.673679</td>\n      <td>0.987822</td>\n      <td>-2.714684</td>\n      <td>1.725184</td>\n      <td>-1.239075</td>\n      <td>2.953235</td>\n      <td>-19.870598</td>\n      <td>-3.944447</td>\n    </tr>\n    <tr>\n      <th>2585</th>\n      <td>rock_99.mp3</td>\n      <td>2585</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>-10.291037</td>\n      <td>103.562256</td>\n      <td>-25.215910</td>\n      <td>27.055992</td>\n      <td>-3.575981</td>\n      <td>8.064964</td>\n      <td>...</td>\n      <td>-15.524373</td>\n      <td>-4.153163</td>\n      <td>-2.979839</td>\n      <td>3.092370</td>\n      <td>-1.781236</td>\n      <td>0.628403</td>\n      <td>2.387391</td>\n      <td>1.865388</td>\n      <td>-19.182354</td>\n      <td>3.445506</td>\n    </tr>\n  </tbody>\n</table>\n<p>1027268 rows × 44 columns</p>\n</div>"
-     },
-     "execution_count": 16,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "mfccs: list[pd.DataFrame] = []\n",
-    "audios: dict[str, Any] = {}\n",
-    "\n",
-    "@contextmanager\n",
-    "def suppress_stdout_stderr():\n",
-    "    \"\"\"A context manager that redirects stdout and stderr to devnull\"\"\"\n",
-    "    with open(devnull, 'w') as fnull:\n",
-    "        with redirect_stderr(fnull) as err, redirect_stdout(fnull) as out:\n",
-    "            yield err, out\n",
-    "\n",
-    "\n",
-    "def write_mfcc(filepath: pathlib.Path, mfccs: list[pd.DataFrame]):\n",
-    "    # Load mp3 -> Signal x, Sampling Rate sr\n",
-    "    x, sr = librosa.load(filepath, sr=22050)\n",
-    "    mfcc = librosa.feature.mfcc(x, sr = sr, n_mfcc=40)\n",
-    "    \n",
-    "    df = pd.DataFrame(mfcc).transpose()\n",
-    "    df['filename'] = f\"{filepath.parent.name}_{filepath.name}\"\n",
-    "    df['sample'] = range(len(mfcc[0]))\n",
-    "    df['genre'] = filepath.parent.name\n",
-    "    df['filenumber'] = int(filepath.name.split('_')[0].split('.')[0])\n",
-    "    mfccs.append(df)\n",
-    "    \n",
-    "    audios[f\"{filepath.parent.name}_{filepath.name}\"] = x\n",
-    "    \n",
-    "    \n",
-    "args = [(filepath, mfccs) for filepath in mp3_filepaths]\n",
-    "\n",
-    "with suppress_stdout_stderr():\n",
-    "    with concurrent.futures.ThreadPoolExecutor(6) as executor:\n",
-    "        executor.map(lambda p: write_mfcc(*p), args)\n",
-    "\n",
-    "mfcc_df = pd.concat(mfccs)\n",
-    "\n",
-    "columns = list(mfcc_df.columns)\n",
-    "columns_new = columns[-4:] + columns[:-4]\n",
-    "mfcc_df = mfcc_df[columns_new]\n",
-    "\n",
-    "\n",
-    "mfcc_df.to_csv(MFCC_PATH / \"mfcc.csv\")\n",
-    "mfcc_df.to_pickle(MFCC_PATH / \"mfcc.pickle\")\n",
-    "\n",
-    "\n",
-    "mfcc_df"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "              filename  sample      genre  filenumber           0           1  \\\n0     classical_12.mp3       0  classical          12 -562.675171    0.000000   \n1     classical_12.mp3       1  classical          12 -377.158630  140.093323   \n2     classical_12.mp3       2  classical          12 -258.835602  152.421295   \n3     classical_12.mp3       3  classical          12 -240.433258  145.206360   \n4     classical_12.mp3       4  classical          12 -265.707764  132.303268   \n...                ...     ...        ...         ...         ...         ...   \n2581       rock_99.mp3    2581       rock          99   21.787605   85.580826   \n2582       rock_99.mp3    2582       rock          99   15.572616   77.452782   \n2583       rock_99.mp3    2583       rock          99   13.339417   82.475601   \n2584       rock_99.mp3    2584       rock          99   13.213579   92.493988   \n2585       rock_99.mp3    2585       rock          99  -10.291037  103.562256   \n\n              2          3          4          5  ...         30         31  \\\n0      0.000000   0.000000   0.000000   0.000000  ...   0.000000   0.000000   \n1     11.552977   6.869974   2.597836 -12.081018  ...   3.403205  10.121262   \n2     -1.228345  13.090727  -5.023252  -4.367101  ...   0.327813  11.534899   \n3     -4.461696  11.758677 -10.757431   1.254790  ...  -6.263988  11.113757   \n4     -7.728113   9.628896 -20.384869  -1.778922  ... -21.676682   5.254867   \n...         ...        ...        ...        ...  ...        ...        ...   \n2581 -46.306671  18.197096  -2.197520  15.667412  ... -16.796026  -4.496211   \n2582 -34.896511  23.128643  -2.260536  10.366127  ... -21.933458 -12.466309   \n2583 -30.214211  25.814865  -4.943372  10.197868  ... -16.537088  -9.494637   \n2584 -31.854889  29.340508  -3.183558   8.847383  ... -13.900535  -6.496171   \n2585 -25.215910  27.055992  -3.575981   8.064964  ... -15.524373  -4.153163   \n\n             32        33        34        35         36         37  \\\n0      0.000000  0.000000  0.000000  0.000000   0.000000   0.000000   \n1     11.495217 -1.086922 -7.269203  1.892457  -4.588193  -5.652980   \n2     19.050909 -0.327993 -7.341021  3.830878 -10.513655 -14.950528   \n3     20.267780 -2.154666 -5.127759  2.469068 -12.121831 -21.083326   \n4     18.119230 -5.845078 -6.094512 -2.550637  -7.051765 -23.662018   \n...         ...       ...       ...       ...        ...        ...   \n2581  -5.669511  1.081637 -2.461577  2.990703   4.621572  -0.688445   \n2582  -6.501689  8.830140 -1.279472  0.076493  -0.084034   2.975086   \n2583  -5.872965  6.031368  0.235092 -0.736026  -3.343213   2.876546   \n2584  -5.673679  0.987822 -2.714684  1.725184  -1.239075   2.953235   \n2585  -2.979839  3.092370 -1.781236  0.628403   2.387391   1.865388   \n\n             38         39  \n0      0.000000   0.000000  \n1     -2.624125   8.233236  \n2     -1.946501   9.361112  \n3     -7.469269  10.618135  \n4    -17.173141   5.203885  \n...         ...        ...  \n2581 -12.773129  -2.747378  \n2582 -14.551804 -13.077312  \n2583 -16.325350 -10.109643  \n2584 -19.870598  -3.944447  \n2585 -19.182354   3.445506  \n\n[1027268 rows x 44 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>sample</th>\n      <th>genre</th>\n      <th>filenumber</th>\n      <th>0</th>\n      <th>1</th>\n      <th>2</th>\n      <th>3</th>\n      <th>4</th>\n      <th>5</th>\n      <th>...</th>\n      <th>30</th>\n      <th>31</th>\n      <th>32</th>\n      <th>33</th>\n      <th>34</th>\n      <th>35</th>\n      <th>36</th>\n      <th>37</th>\n      <th>38</th>\n      <th>39</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>classical_12.mp3</td>\n      <td>0</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-562.675171</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>classical_12.mp3</td>\n      <td>1</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-377.158630</td>\n      <td>140.093323</td>\n      <td>11.552977</td>\n      <td>6.869974</td>\n      <td>2.597836</td>\n      <td>-12.081018</td>\n      <td>...</td>\n      <td>3.403205</td>\n      <td>10.121262</td>\n      <td>11.495217</td>\n      <td>-1.086922</td>\n      <td>-7.269203</td>\n      <td>1.892457</td>\n      <td>-4.588193</td>\n      <td>-5.652980</td>\n      <td>-2.624125</td>\n      <td>8.233236</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>classical_12.mp3</td>\n      <td>2</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-258.835602</td>\n      <td>152.421295</td>\n      <td>-1.228345</td>\n      <td>13.090727</td>\n      <td>-5.023252</td>\n      <td>-4.367101</td>\n      <td>...</td>\n      <td>0.327813</td>\n      <td>11.534899</td>\n      <td>19.050909</td>\n      <td>-0.327993</td>\n      <td>-7.341021</td>\n      <td>3.830878</td>\n      <td>-10.513655</td>\n      <td>-14.950528</td>\n      <td>-1.946501</td>\n      <td>9.361112</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>classical_12.mp3</td>\n      <td>3</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-240.433258</td>\n      <td>145.206360</td>\n      <td>-4.461696</td>\n      <td>11.758677</td>\n      <td>-10.757431</td>\n      <td>1.254790</td>\n      <td>...</td>\n      <td>-6.263988</td>\n      <td>11.113757</td>\n      <td>20.267780</td>\n      <td>-2.154666</td>\n      <td>-5.127759</td>\n      <td>2.469068</td>\n      <td>-12.121831</td>\n      <td>-21.083326</td>\n      <td>-7.469269</td>\n      <td>10.618135</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>classical_12.mp3</td>\n      <td>4</td>\n      <td>classical</td>\n      <td>12</td>\n      <td>-265.707764</td>\n      <td>132.303268</td>\n      <td>-7.728113</td>\n      <td>9.628896</td>\n      <td>-20.384869</td>\n      <td>-1.778922</td>\n      <td>...</td>\n      <td>-21.676682</td>\n      <td>5.254867</td>\n      <td>18.119230</td>\n      <td>-5.845078</td>\n      <td>-6.094512</td>\n      <td>-2.550637</td>\n      <td>-7.051765</td>\n      <td>-23.662018</td>\n      <td>-17.173141</td>\n      <td>5.203885</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>2581</th>\n      <td>rock_99.mp3</td>\n      <td>2581</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>21.787605</td>\n      <td>85.580826</td>\n      <td>-46.306671</td>\n      <td>18.197096</td>\n      <td>-2.197520</td>\n      <td>15.667412</td>\n      <td>...</td>\n      <td>-16.796026</td>\n      <td>-4.496211</td>\n      <td>-5.669511</td>\n      <td>1.081637</td>\n      <td>-2.461577</td>\n      <td>2.990703</td>\n      <td>4.621572</td>\n      <td>-0.688445</td>\n      <td>-12.773129</td>\n      <td>-2.747378</td>\n    </tr>\n    <tr>\n      <th>2582</th>\n      <td>rock_99.mp3</td>\n      <td>2582</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>15.572616</td>\n      <td>77.452782</td>\n      <td>-34.896511</td>\n      <td>23.128643</td>\n      <td>-2.260536</td>\n      <td>10.366127</td>\n      <td>...</td>\n      <td>-21.933458</td>\n      <td>-12.466309</td>\n      <td>-6.501689</td>\n      <td>8.830140</td>\n      <td>-1.279472</td>\n      <td>0.076493</td>\n      <td>-0.084034</td>\n      <td>2.975086</td>\n      <td>-14.551804</td>\n      <td>-13.077312</td>\n    </tr>\n    <tr>\n      <th>2583</th>\n      <td>rock_99.mp3</td>\n      <td>2583</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>13.339417</td>\n      <td>82.475601</td>\n      <td>-30.214211</td>\n      <td>25.814865</td>\n      <td>-4.943372</td>\n      <td>10.197868</td>\n      <td>...</td>\n      <td>-16.537088</td>\n      <td>-9.494637</td>\n      <td>-5.872965</td>\n      <td>6.031368</td>\n      <td>0.235092</td>\n      <td>-0.736026</td>\n      <td>-3.343213</td>\n      <td>2.876546</td>\n      <td>-16.325350</td>\n      <td>-10.109643</td>\n    </tr>\n    <tr>\n      <th>2584</th>\n      <td>rock_99.mp3</td>\n      <td>2584</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>13.213579</td>\n      <td>92.493988</td>\n      <td>-31.854889</td>\n      <td>29.340508</td>\n      <td>-3.183558</td>\n      <td>8.847383</td>\n      <td>...</td>\n      <td>-13.900535</td>\n      <td>-6.496171</td>\n      <td>-5.673679</td>\n      <td>0.987822</td>\n      <td>-2.714684</td>\n      <td>1.725184</td>\n      <td>-1.239075</td>\n      <td>2.953235</td>\n      <td>-19.870598</td>\n      <td>-3.944447</td>\n    </tr>\n    <tr>\n      <th>2585</th>\n      <td>rock_99.mp3</td>\n      <td>2585</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>-10.291037</td>\n      <td>103.562256</td>\n      <td>-25.215910</td>\n      <td>27.055992</td>\n      <td>-3.575981</td>\n      <td>8.064964</td>\n      <td>...</td>\n      <td>-15.524373</td>\n      <td>-4.153163</td>\n      <td>-2.979839</td>\n      <td>3.092370</td>\n      <td>-1.781236</td>\n      <td>0.628403</td>\n      <td>2.387391</td>\n      <td>1.865388</td>\n      <td>-19.182354</td>\n      <td>3.445506</td>\n    </tr>\n  </tbody>\n</table>\n<p>1027268 rows × 44 columns</p>\n</div>"
-     },
-     "execution_count": 17,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "mfcc_df = pd.read_pickle(MFCC_PATH / \"mfcc.pickle\")\n",
-    "\n",
-    "mfcc_df"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 43,
-   "outputs": [],
-   "source": [
-    "import git\n",
-    "import datetime\n",
-    "\n",
-    "repo = git.Repo(BASE_PATH)\n",
-    "branch = repo.head.reference\n",
-    "branch_name = branch.name\n",
-    "commit_sha = branch.repo.commit().hexsha\n"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "raw_mfcc_table = dbrepo_connector.create_table_if_not_exists(\n",
-    "    mfcc_df,\n",
-    "    \"raw_mfccs\",\n",
-    "    f\"Contains the raw mfcc features created by the repo {repo_id} on the commit {commit_sha} executed on {datetime.datetime.now()}. \"\n",
-    "    f\"The files used for Mfcc generation are located in {dro_url}.\"\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "dbrepo_connector.upload_data(mfcc_df, raw_mfcc_table[\"id\"])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "         filename  sample genre  filenumber           0           1  \\\n0     rock_99.mp3       0  rock          99 -544.703064    0.000000   \n1     rock_99.mp3       1  rock          99 -314.351959   79.454163   \n2     rock_99.mp3       2  rock          99  -95.725487   62.870975   \n3     rock_99.mp3       3  rock          99  -32.967800   64.183823   \n4     rock_99.mp3       4  rock          99  -57.435410   74.732780   \n...           ...     ...   ...         ...         ...         ...   \n2581  rock_99.mp3    2581  rock          99   21.787605   85.580826   \n2582  rock_99.mp3    2582  rock          99   15.572616   77.452782   \n2583  rock_99.mp3    2583  rock          99   13.339417   82.475601   \n2584  rock_99.mp3    2584  rock          99   13.213579   92.493988   \n2585  rock_99.mp3    2585  rock          99  -10.291037  103.562256   \n\n              2          3          4          5  ...         30         31  \\\n0      0.000000   0.000000   0.000000   0.000000  ...   0.000000   0.000000   \n1     40.786179  42.943565  17.910450  36.948647  ...  -6.425640  -5.075531   \n2     22.900814  37.672192  25.649731  37.942169  ...  -4.761521  -2.742242   \n3     14.466274  40.246658  28.057013  37.012337  ...  -0.716160   2.391909   \n4      7.515693  51.356144  28.807529  34.490242  ...  -0.548289   6.551604   \n...         ...        ...        ...        ...  ...        ...        ...   \n2581 -46.306671  18.197096  -2.197520  15.667412  ... -16.796026  -4.496211   \n2582 -34.896511  23.128643  -2.260536  10.366127  ... -21.933458 -12.466309   \n2583 -30.214211  25.814865  -4.943372  10.197868  ... -16.537088  -9.494637   \n2584 -31.854889  29.340508  -3.183558   8.847383  ... -13.900535  -6.496171   \n2585 -25.215910  27.055992  -3.575981   8.064964  ... -15.524373  -4.153163   \n\n            32        33         34        35        36        37         38  \\\n0     0.000000  0.000000   0.000000  0.000000  0.000000  0.000000   0.000000   \n1    -1.146745  0.952471  -3.022435  3.063828 -2.753643  0.315048   0.078572   \n2    -3.275497  3.458089 -15.416247  1.444466  0.090877  6.199932  -4.442922   \n3    -2.070962  3.593476 -15.645985  1.241058  2.785069  7.497619  -5.391083   \n4    -0.266161  4.137842 -12.027081  0.342362 -0.084035  4.941658  -7.381403   \n...        ...       ...        ...       ...       ...       ...        ...   \n2581 -5.669511  1.081637  -2.461577  2.990703  4.621572 -0.688445 -12.773129   \n2582 -6.501689  8.830140  -1.279472  0.076493 -0.084034  2.975086 -14.551804   \n2583 -5.872965  6.031368   0.235092 -0.736026 -3.343213  2.876546 -16.325350   \n2584 -5.673679  0.987822  -2.714684  1.725184 -1.239075  2.953235 -19.870598   \n2585 -2.979839  3.092370  -1.781236  0.628403  2.387391  1.865388 -19.182354   \n\n             39  \n0      0.000000  \n1     -5.648582  \n2     -3.913424  \n3     -3.487692  \n4     -4.312478  \n...         ...  \n2581  -2.747378  \n2582 -13.077312  \n2583 -10.109643  \n2584  -3.944447  \n2585   3.445506  \n\n[2586 rows x 44 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>sample</th>\n      <th>genre</th>\n      <th>filenumber</th>\n      <th>0</th>\n      <th>1</th>\n      <th>2</th>\n      <th>3</th>\n      <th>4</th>\n      <th>5</th>\n      <th>...</th>\n      <th>30</th>\n      <th>31</th>\n      <th>32</th>\n      <th>33</th>\n      <th>34</th>\n      <th>35</th>\n      <th>36</th>\n      <th>37</th>\n      <th>38</th>\n      <th>39</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>rock_99.mp3</td>\n      <td>0</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>-544.703064</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>rock_99.mp3</td>\n      <td>1</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>-314.351959</td>\n      <td>79.454163</td>\n      <td>40.786179</td>\n      <td>42.943565</td>\n      <td>17.910450</td>\n      <td>36.948647</td>\n      <td>...</td>\n      <td>-6.425640</td>\n      <td>-5.075531</td>\n      <td>-1.146745</td>\n      <td>0.952471</td>\n      <td>-3.022435</td>\n      <td>3.063828</td>\n      <td>-2.753643</td>\n      <td>0.315048</td>\n      <td>0.078572</td>\n      <td>-5.648582</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>rock_99.mp3</td>\n      <td>2</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>-95.725487</td>\n      <td>62.870975</td>\n      <td>22.900814</td>\n      <td>37.672192</td>\n      <td>25.649731</td>\n      <td>37.942169</td>\n      <td>...</td>\n      <td>-4.761521</td>\n      <td>-2.742242</td>\n      <td>-3.275497</td>\n      <td>3.458089</td>\n      <td>-15.416247</td>\n      <td>1.444466</td>\n      <td>0.090877</td>\n      <td>6.199932</td>\n      <td>-4.442922</td>\n      <td>-3.913424</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>rock_99.mp3</td>\n      <td>3</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>-32.967800</td>\n      <td>64.183823</td>\n      <td>14.466274</td>\n      <td>40.246658</td>\n      <td>28.057013</td>\n      <td>37.012337</td>\n      <td>...</td>\n      <td>-0.716160</td>\n      <td>2.391909</td>\n      <td>-2.070962</td>\n      <td>3.593476</td>\n      <td>-15.645985</td>\n      <td>1.241058</td>\n      <td>2.785069</td>\n      <td>7.497619</td>\n      <td>-5.391083</td>\n      <td>-3.487692</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>rock_99.mp3</td>\n      <td>4</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>-57.435410</td>\n      <td>74.732780</td>\n      <td>7.515693</td>\n      <td>51.356144</td>\n      <td>28.807529</td>\n      <td>34.490242</td>\n      <td>...</td>\n      <td>-0.548289</td>\n      <td>6.551604</td>\n      <td>-0.266161</td>\n      <td>4.137842</td>\n      <td>-12.027081</td>\n      <td>0.342362</td>\n      <td>-0.084035</td>\n      <td>4.941658</td>\n      <td>-7.381403</td>\n      <td>-4.312478</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>2581</th>\n      <td>rock_99.mp3</td>\n      <td>2581</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>21.787605</td>\n      <td>85.580826</td>\n      <td>-46.306671</td>\n      <td>18.197096</td>\n      <td>-2.197520</td>\n      <td>15.667412</td>\n      <td>...</td>\n      <td>-16.796026</td>\n      <td>-4.496211</td>\n      <td>-5.669511</td>\n      <td>1.081637</td>\n      <td>-2.461577</td>\n      <td>2.990703</td>\n      <td>4.621572</td>\n      <td>-0.688445</td>\n      <td>-12.773129</td>\n      <td>-2.747378</td>\n    </tr>\n    <tr>\n      <th>2582</th>\n      <td>rock_99.mp3</td>\n      <td>2582</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>15.572616</td>\n      <td>77.452782</td>\n      <td>-34.896511</td>\n      <td>23.128643</td>\n      <td>-2.260536</td>\n      <td>10.366127</td>\n      <td>...</td>\n      <td>-21.933458</td>\n      <td>-12.466309</td>\n      <td>-6.501689</td>\n      <td>8.830140</td>\n      <td>-1.279472</td>\n      <td>0.076493</td>\n      <td>-0.084034</td>\n      <td>2.975086</td>\n      <td>-14.551804</td>\n      <td>-13.077312</td>\n    </tr>\n    <tr>\n      <th>2583</th>\n      <td>rock_99.mp3</td>\n      <td>2583</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>13.339417</td>\n      <td>82.475601</td>\n      <td>-30.214211</td>\n      <td>25.814865</td>\n      <td>-4.943372</td>\n      <td>10.197868</td>\n      <td>...</td>\n      <td>-16.537088</td>\n      <td>-9.494637</td>\n      <td>-5.872965</td>\n      <td>6.031368</td>\n      <td>0.235092</td>\n      <td>-0.736026</td>\n      <td>-3.343213</td>\n      <td>2.876546</td>\n      <td>-16.325350</td>\n      <td>-10.109643</td>\n    </tr>\n    <tr>\n      <th>2584</th>\n      <td>rock_99.mp3</td>\n      <td>2584</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>13.213579</td>\n      <td>92.493988</td>\n      <td>-31.854889</td>\n      <td>29.340508</td>\n      <td>-3.183558</td>\n      <td>8.847383</td>\n      <td>...</td>\n      <td>-13.900535</td>\n      <td>-6.496171</td>\n      <td>-5.673679</td>\n      <td>0.987822</td>\n      <td>-2.714684</td>\n      <td>1.725184</td>\n      <td>-1.239075</td>\n      <td>2.953235</td>\n      <td>-19.870598</td>\n      <td>-3.944447</td>\n    </tr>\n    <tr>\n      <th>2585</th>\n      <td>rock_99.mp3</td>\n      <td>2585</td>\n      <td>rock</td>\n      <td>99</td>\n      <td>-10.291037</td>\n      <td>103.562256</td>\n      <td>-25.215910</td>\n      <td>27.055992</td>\n      <td>-3.575981</td>\n      <td>8.064964</td>\n      <td>...</td>\n      <td>-15.524373</td>\n      <td>-4.153163</td>\n      <td>-2.979839</td>\n      <td>3.092370</td>\n      <td>-1.781236</td>\n      <td>0.628403</td>\n      <td>2.387391</td>\n      <td>1.865388</td>\n      <td>-19.182354</td>\n      <td>3.445506</td>\n    </tr>\n  </tbody>\n</table>\n<p>2586 rows × 44 columns</p>\n</div>"
-     },
-     "execution_count": 18,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "example_mfcc = mfcc_df[mfcc_df[\"filename\"] == \"rock_99.mp3\"].sort_values(\"sample\").iloc[:, :]\n",
-    "# librosa.display.specshow(mfccs, sr=sr, x_axis='time')\n",
-    "\n",
-    "example_mfcc"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 19,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "[<matplotlib.lines.Line2D at 0x7fcda2fad150>]"
-     },
-     "execution_count": 19,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "text/plain": "<Figure size 640x480 with 1 Axes>",
-      "image/png": "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sXbtWtMxu3fvxiWXXILCwkJ06tQJV155JWpra03HLF26FMcffzzy8/PRu3dvPPTQQ0HfWug4te3ll1+e0o8nT55sOobals+0adMwevRodOzYEcXFxTjrrLOwZs0a0zGqxoFZs2bhyCOPRF5eHgYNGoQXXngh6NsLFZm2HT9+fErfveaaa0zHZGTb6kQK06dP13Nzc/XnnntOX7FihX7VVVfpnTp10isqKsKuWqS599579cMOO0zftm1b4t+OHTsSv19zzTV679699ZkzZ+oLFizQx44dqx9zzDGJ35uamvRhw4bpEydO1BctWqS/++67erdu3fSpU6eGcTuh8u677+p33XWX/vrrr+sA9DfeeMP0+4MPPqgXFRXpb775pr5kyRL9hz/8od6/f399//79iWMmT56sH3HEEfrcuXP1zz77TB80aJB+0UUXJX6vqqrSS0pK9EsuuURfvny5/sorr+jt2rXTn3766XTdZig4te1ll12mT5482dSPd+/ebTqG2pbPpEmT9Oeff15fvny5vnjxYv20007T+/Tpo9fW1iaOUTEOfPvtt3pBQYF+88036ytXrtQfe+wxPSsrS3///ffTer/pRKZtTzjhBP2qq64y9d2qqqrE75natiSocDj66KP1KVOmJP5ubm7We/bsqU+bNi3EWkWfe++9Vz/iiCO4v1VWVuo5OTn6a6+9lvhu1apVOgB9zpw5uq63TCCxWEwvLy9PHPPkk0/qhYWFen19faB1jzLWyTQej+ulpaX673//+8R3lZWVel5env7KK6/ouq7rK1eu1AHoX331VeKY9957T9c0Td+yZYuu67r+xBNP6J07dza17e23364PHjw44DuKDiJB5cwzzxSeQ20rz/bt23UA+qeffqrrurpx4LbbbtMPO+ww07UuuOACfdKkSUHfUmSwtq2utwgqv/jFL4TnZGrbkunHQkNDAxYuXIiJEycmvovFYpg4cSLmzJkTYs0yg7Vr16Jnz54YMGAALrnkEmzatAkAsHDhQjQ2NpradciQIejTp0+iXefMmYPhw4ejpKQkccykSZNQXV2NFStWpPdGIsyGDRtQXl5uasuioiKMGTPG1JadOnXCUUcdlThm4sSJiMVimDdvXuKYcePGITc3N3HMpEmTsGbNGuzZsydNdxNNZs2aheLiYgwePBjXXnstdu3alfiN2laeqqoqAECXLl0AqBsH5syZYyrDOKYtjdHWtjX45z//iW7dumHYsGGYOnUq9u3bl/gtU9s245MSqmbnzp1obm42PUgAKCkpwerVq0OqVWYwZswYvPDCCxg8eDC2bduG3/zmNzj++OOxfPlylJeXIzc3F506dTKdU1JSgvLycgBAeXk5t92N34gWjLbgtRXblsXFxabfs7Oz0aVLF9Mx/fv3TynD+K1z586B1D/qTJ48GWeffTb69++P9evX484778Spp56KOXPmICsri9pWkng8jhtvvBHHHnsshg0bBgDKxgHRMdXV1di/fz/atWsXxC1FBl7bAsDFF1+Mvn37omfPnli6dCluv/12rFmzBq+//jqAzG1bElQIZZx66qmJz4cffjjGjBmDvn374l//+lerHziI1sOFF16Y+Dx8+HAcfvjhGDhwIGbNmoWTTjopxJplFlOmTMHy5cvx+eefh12VVoeoba+++urE5+HDh6NHjx446aSTsH79egwcODDd1VQGmX4sdOvWDVlZWSle6BUVFSgtLQ2pVplJp06dcMghh2DdunUoLS1FQ0MDKisrTcew7VpaWsptd+M3ogWjLez6aGlpKbZv3276vampCbt376b2dsmAAQPQrVs3rFu3DgC1rQzXX3893nnnHXzyySfo1atX4ntV44DomMLCwla/KBK1LY8xY8YAgKnvZmLbkqBiITc3F6NGjcLMmTMT38XjccycORNlZWUh1izzqK2txfr169GjRw+MGjUKOTk5pnZds2YNNm3alGjXsrIyLFu2zDQJzJgxA4WFhRg6dGja6x9V+vfvj9LSUlNbVldXY968eaa2rKysxMKFCxPHfPzxx4jH44nBq6ysDLNnz0ZjY2PimBkzZmDw4MFtwjQhy/fff49du3ahR48eAKht7dB1Hddffz3eeOMNfPzxxynmL1XjQFlZmakM45jWPEY7tS2PxYsXA4Cp72Zk24bmxhthpk+frufl5ekvvPCCvnLlSv3qq6/WO3XqZPKUJlK55ZZb9FmzZukbNmzQv/jiC33ixIl6t27d9O3bt+u63rItsU+fPvrHH3+sL1iwQC8rK9PLysoS5xtb50455RR98eLF+vvvv6937969TW5Prqmp0RctWqQvWrRIB6D/6U9/0hctWqR/9913uq63bE/u1KmT/tZbb+lLly7VzzzzTO725JEjR+rz5s3TP//8c/3ggw82baGtrKzUS0pK9J/85Cf68uXL9enTp+sFBQWtfgutXdvW1NTov/zlL/U5c+boGzZs0D/66CP9yCOP1A8++GC9rq4uUQa1LZ9rr71WLyoq0mfNmmXaIrtv377EMSrGAWML7a233qqvWrVKf/zxx0PfQhs0Tm27bt06/b777tMXLFigb9iwQX/rrbf0AQMG6OPGjUuUkaltS4KKgMcee0zv06ePnpubqx999NH63Llzw65S5Lngggv0Hj166Lm5ufpBBx2kX3DBBfq6desSv+/fv1+/7rrr9M6dO+sFBQX6j370I33btm2mMjZu3Kifeuqpert27fRu3brpt9xyi97Y2JjuWwmdTz75RAeQ8u+yyy7Tdb1li/Ldd9+tl5SU6Hl5efpJJ52kr1mzxlTGrl279Isuukjv0KGDXlhYqF9xxRV6TU2N6ZglS5boxx13nJ6Xl6cfdNBB+oMPPpiuWwwNu7bdt2+ffsopp+jdu3fXc3Jy9L59++pXXXVVyiKF2pYPr10B6M8//3ziGFXjwCeffKKPGDFCz83N1QcMGGC6RmvEqW03bdqkjxs3Tu/SpYuel5enDxo0SL/11ltNcVR0PTPbVtN1XU+f/oYgCIIgCEIe8lEhCIIgCCKykKBCEARBEERkIUGFIAiCIIjIQoIKQRAEQRCRhQQVgiAIgiAiCwkqBEEQBEFEFhJUCIIgCIKILCSoEARBEAQRWUhQIQiCIAgispCgQhAEQRBEZCFBhSAIgiCIyEKCCkEQBEEQkeX/Ay0WTdrMr8SpAAAAAElFTkSuQmCC\n"
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "plt.plot(example_mfcc[39])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "<librosa.display.AdaptiveWaveplot at 0x7fcda6af3d00>"
-     },
-     "execution_count": 20,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "text/plain": "<Figure size 640x480 with 1 Axes>",
-      "image/png": "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7t3CnDlzgmqptJbztWLFCiE2NlaYMWOG2zLNM2fOOLfhe6vRe++9JyxevFjYtWuXcPDgQWHx4sVCZmamMGHCBOc2PFfixFYb8Vw1WrBggbBw4UJh9+7dwu7du4V//OMfQmhoqDB//nznNsF6rsrKypyfzwCEF154Qdi8ebNw5MgRQRAE4dVXXxUuvfRS5/aOpdJjx44VtmzZIixdulRo1aqV6FJpMz/fm23wIgiN/yjt2rUTIiMjhSFDhgi//PKL82e33367MGrUKLftt27dKowYMUKIiooS2rRpIzzzzDNe+/zwww+FLl26CJGRkULPnj2Fr7/+2uxfwxJaz1X79u0FAF5frlauXCn069dPiIyMFDp06CC8/fbbFvwm1tByvm6//XbRc+V5TvnearwoDRgwQIiLixNatGgh9OjRQ3j66aeFc+fOue2T58qbWPAiCDxXgtAYvHTv3l2IjY0VEhIShCFDhggfffSR1z6D8VytXLlS9PPn9ttvFwRBEGbNmiW0b9/e7TmHDx8WrrjiCiEmJkZITU0VHnroIaG2ttZrv2Z+vocIgiAYN45DREREZK5mmfNCREREgYvBCxEREQUUBi9EREQUUBi8EBERUUBh8EJEREQBhcELERERBRQGL0RERBRQGLwQERFRQGHwQkS2MnHiRIwfP97fh0FENhbu7wMgouYjJCRE9uezZs3Cyy+/DBb+JiI5DF6IyDKnTp1y/v/ixYvx2GOPYe/evc7H4uLiEBcX549DI6IAwmkjIrJMRkaG8ysxMREhISFuj8XFxXlNG1188cW499578cADDyA5ORnp6emYN28eKioqMGnSJMTHx6NTp0745ptv3F5rx44duOKKKxAXF4f09HTceuutKCwstPg3JiIzMHghItt75513kJqainXr1uHee+/FPffcg9/97ncYPnw4Nm3ahLFjx+LWW29FZWUlAKC4uBiXXnop+vfvjw0bNmDp0qXIz8/HjTfe6OffhIiMwOCFiGyvb9++mDlzJjp37owZM2YgOjoaqampmDJlCjp37ozHHnsMZ86cwbZt2wAAr732Gvr374+nn34a3bp1Q//+/TF//nysXLkS+/bt8/NvQ0S+Ys4LEdlenz59nP8fFhaGli1bonfv3s7H0tPTAQAFBQUAgK1bt2LlypWi+TMHDx5Ely5dTD5iIjITgxcisr2IiAi370NCQtwec6xiamhoAACUl5fjmmuuwbPPPuu1r9atW5t4pERkBQYvRBR0BgwYgE8++QTZ2dkID+fHHFGwYc4LEQWdqVOnoqioCLfccgvWr1+PgwcP4ttvv8WkSZNQX1/v78MjIh8xeCGioJOZmYk1a9agvr4eY8eORe/evfHAAw8gKSkJoaH82CMKdCECS1kSERFRAOEtCBEREQUUBi9EREQUUBi8EBERUUBh8EJEREQBhcELERERBRQGL0RERBRQGLwQERFRQGHwQkRERAGFwQsREREFFAYvREREFFAYvBAREVFA+X8SWEQR1OyhQQAAAABJRU5ErkJggg==\n"
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "audio = audios[\"rock_50.mp3\"]\n",
-    "\n",
-    "librosa.display.waveshow(audio)"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Machine Learning analysis of MFCC Features"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Base: https://www.kaggle.com/code/anmour/svm-using-mfcc-features/notebook\n",
-    "\n",
-    "import pandas as pd\n",
-    "import numpy as np\n",
-    "import os\n",
-    "import pickle\n",
-    "\n",
-    "from sklearn.model_selection import GridSearchCV\n",
-    "from sklearn.model_selection import train_test_split\n",
-    "from sklearn.metrics import accuracy_score\n",
-    "from sklearn.preprocessing import StandardScaler\n",
-    "from sklearn.decomposition import PCA\n",
-    "\n",
-    "from sklearn.svm import SVC\n",
-    "from root import BASE_PATH\n",
-    "\n",
-    "meta_columns = [\"filename\", \"sample\", \"genre\", \"filenumber\"]\n",
-    "# 22 / 73"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "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>genre</th>\n",
-       "      <th>0_min</th>\n",
-       "      <th>0_max</th>\n",
-       "      <th>0_mean</th>\n",
-       "      <th>0_std</th>\n",
-       "      <th>0_skew</th>\n",
-       "      <th>1_min</th>\n",
-       "      <th>1_max</th>\n",
-       "      <th>1_mean</th>\n",
-       "      <th>1_std</th>\n",
-       "      <th>...</th>\n",
-       "      <th>38_min</th>\n",
-       "      <th>38_max</th>\n",
-       "      <th>38_mean</th>\n",
-       "      <th>38_std</th>\n",
-       "      <th>38_skew</th>\n",
-       "      <th>39_min</th>\n",
-       "      <th>39_max</th>\n",
-       "      <th>39_mean</th>\n",
-       "      <th>39_std</th>\n",
-       "      <th>39_skew</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>filename</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>classical_1.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-530.784302</td>\n",
-       "      <td>-163.308640</td>\n",
-       "      <td>-302.203217</td>\n",
-       "      <td>51.141998</td>\n",
-       "      <td>-0.468354</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>178.750244</td>\n",
-       "      <td>111.332512</td>\n",
-       "      <td>24.847670</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-44.103783</td>\n",
-       "      <td>47.302727</td>\n",
-       "      <td>-3.713539</td>\n",
-       "      <td>16.553630</td>\n",
-       "      <td>0.230696</td>\n",
-       "      <td>-46.790031</td>\n",
-       "      <td>49.353710</td>\n",
-       "      <td>-2.282033</td>\n",
-       "      <td>15.285611</td>\n",
-       "      <td>0.171425</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_10.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-562.857056</td>\n",
-       "      <td>-96.162895</td>\n",
-       "      <td>-219.258865</td>\n",
-       "      <td>53.561945</td>\n",
-       "      <td>-0.772325</td>\n",
-       "      <td>0.029843</td>\n",
-       "      <td>259.636963</td>\n",
-       "      <td>215.093994</td>\n",
-       "      <td>18.388213</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-27.458200</td>\n",
-       "      <td>29.808735</td>\n",
-       "      <td>0.484320</td>\n",
-       "      <td>8.660671</td>\n",
-       "      <td>-0.479001</td>\n",
-       "      <td>-28.984264</td>\n",
-       "      <td>27.534916</td>\n",
-       "      <td>0.952575</td>\n",
-       "      <td>10.477753</td>\n",
-       "      <td>-0.185726</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_100.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-536.237244</td>\n",
-       "      <td>-61.609112</td>\n",
-       "      <td>-177.803986</td>\n",
-       "      <td>83.381454</td>\n",
-       "      <td>-2.587178</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>190.474884</td>\n",
-       "      <td>112.471695</td>\n",
-       "      <td>27.277388</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-27.338915</td>\n",
-       "      <td>27.608841</td>\n",
-       "      <td>-0.333135</td>\n",
-       "      <td>8.185168</td>\n",
-       "      <td>0.208413</td>\n",
-       "      <td>-38.094074</td>\n",
-       "      <td>31.399227</td>\n",
-       "      <td>-1.494779</td>\n",
-       "      <td>10.917259</td>\n",
-       "      <td>0.020986</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_11.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-536.457520</td>\n",
-       "      <td>-120.430145</td>\n",
-       "      <td>-222.126129</td>\n",
-       "      <td>76.246935</td>\n",
-       "      <td>-2.402427</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>159.434616</td>\n",
-       "      <td>99.853493</td>\n",
-       "      <td>21.916783</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-31.773474</td>\n",
-       "      <td>31.498913</td>\n",
-       "      <td>-3.781701</td>\n",
-       "      <td>9.191031</td>\n",
-       "      <td>0.260900</td>\n",
-       "      <td>-22.666813</td>\n",
-       "      <td>50.993847</td>\n",
-       "      <td>1.600794</td>\n",
-       "      <td>10.125588</td>\n",
-       "      <td>0.595789</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_12.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-562.675171</td>\n",
-       "      <td>-148.132309</td>\n",
-       "      <td>-270.974976</td>\n",
-       "      <td>52.190831</td>\n",
-       "      <td>-0.366585</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>194.266327</td>\n",
-       "      <td>148.226334</td>\n",
-       "      <td>19.304869</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-44.846069</td>\n",
-       "      <td>28.488243</td>\n",
-       "      <td>-6.241872</td>\n",
-       "      <td>10.546620</td>\n",
-       "      <td>0.341796</td>\n",
-       "      <td>-25.048683</td>\n",
-       "      <td>46.877155</td>\n",
-       "      <td>1.844356</td>\n",
-       "      <td>11.160211</td>\n",
-       "      <td>0.503148</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>...</th>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_95.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-553.109985</td>\n",
-       "      <td>-5.219127</td>\n",
-       "      <td>-193.506073</td>\n",
-       "      <td>76.869574</td>\n",
-       "      <td>-0.201062</td>\n",
-       "      <td>-89.950394</td>\n",
-       "      <td>201.183289</td>\n",
-       "      <td>111.724190</td>\n",
-       "      <td>36.463682</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-27.043680</td>\n",
-       "      <td>22.443615</td>\n",
-       "      <td>-7.234814</td>\n",
-       "      <td>8.471876</td>\n",
-       "      <td>0.753810</td>\n",
-       "      <td>-24.716900</td>\n",
-       "      <td>23.410700</td>\n",
-       "      <td>-4.502257</td>\n",
-       "      <td>6.688022</td>\n",
-       "      <td>0.238779</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_96.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-541.236084</td>\n",
-       "      <td>27.163366</td>\n",
-       "      <td>-119.113907</td>\n",
-       "      <td>58.420538</td>\n",
-       "      <td>-0.957677</td>\n",
-       "      <td>-7.415216</td>\n",
-       "      <td>210.489319</td>\n",
-       "      <td>125.453644</td>\n",
-       "      <td>31.908835</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-37.584599</td>\n",
-       "      <td>28.085239</td>\n",
-       "      <td>-9.704237</td>\n",
-       "      <td>8.447570</td>\n",
-       "      <td>0.112745</td>\n",
-       "      <td>-38.150497</td>\n",
-       "      <td>21.813221</td>\n",
-       "      <td>-8.249475</td>\n",
-       "      <td>7.807696</td>\n",
-       "      <td>0.071979</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_97.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-518.497375</td>\n",
-       "      <td>58.526649</td>\n",
-       "      <td>-66.267700</td>\n",
-       "      <td>65.635605</td>\n",
-       "      <td>-0.898028</td>\n",
-       "      <td>-58.824471</td>\n",
-       "      <td>175.198486</td>\n",
-       "      <td>99.288246</td>\n",
-       "      <td>25.158395</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-29.620762</td>\n",
-       "      <td>26.325855</td>\n",
-       "      <td>-5.722816</td>\n",
-       "      <td>7.727353</td>\n",
-       "      <td>0.207499</td>\n",
-       "      <td>-29.497421</td>\n",
-       "      <td>25.410231</td>\n",
-       "      <td>-3.356631</td>\n",
-       "      <td>8.170547</td>\n",
-       "      <td>0.160343</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_98.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-518.643066</td>\n",
-       "      <td>53.555084</td>\n",
-       "      <td>-45.734737</td>\n",
-       "      <td>52.443934</td>\n",
-       "      <td>-1.705686</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>187.040344</td>\n",
-       "      <td>96.440956</td>\n",
-       "      <td>24.137639</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-26.963133</td>\n",
-       "      <td>8.714615</td>\n",
-       "      <td>-9.511550</td>\n",
-       "      <td>5.551747</td>\n",
-       "      <td>-0.025625</td>\n",
-       "      <td>-23.019743</td>\n",
-       "      <td>13.949155</td>\n",
-       "      <td>-2.664933</td>\n",
-       "      <td>5.051528</td>\n",
-       "      <td>-0.258403</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_99.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-544.703064</td>\n",
-       "      <td>75.608696</td>\n",
-       "      <td>-49.380920</td>\n",
-       "      <td>54.045598</td>\n",
-       "      <td>-0.863099</td>\n",
-       "      <td>-32.928108</td>\n",
-       "      <td>191.734619</td>\n",
-       "      <td>93.971260</td>\n",
-       "      <td>33.410192</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-21.929461</td>\n",
-       "      <td>17.050976</td>\n",
-       "      <td>-5.296696</td>\n",
-       "      <td>5.894940</td>\n",
-       "      <td>0.390704</td>\n",
-       "      <td>-20.984795</td>\n",
-       "      <td>29.312206</td>\n",
-       "      <td>-0.321817</td>\n",
-       "      <td>6.571661</td>\n",
-       "      <td>0.384814</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>400 rows × 201 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "                       genre       0_min       0_max      0_mean      0_std  \\\n",
-       "filename                                                                      \n",
-       "classical_1.mp3    classical -530.784302 -163.308640 -302.203217  51.141998   \n",
-       "classical_10.mp3   classical -562.857056  -96.162895 -219.258865  53.561945   \n",
-       "classical_100.mp3  classical -536.237244  -61.609112 -177.803986  83.381454   \n",
-       "classical_11.mp3   classical -536.457520 -120.430145 -222.126129  76.246935   \n",
-       "classical_12.mp3   classical -562.675171 -148.132309 -270.974976  52.190831   \n",
-       "...                      ...         ...         ...         ...        ...   \n",
-       "rock_95.mp3             rock -553.109985   -5.219127 -193.506073  76.869574   \n",
-       "rock_96.mp3             rock -541.236084   27.163366 -119.113907  58.420538   \n",
-       "rock_97.mp3             rock -518.497375   58.526649  -66.267700  65.635605   \n",
-       "rock_98.mp3             rock -518.643066   53.555084  -45.734737  52.443934   \n",
-       "rock_99.mp3             rock -544.703064   75.608696  -49.380920  54.045598   \n",
-       "\n",
-       "                     0_skew      1_min       1_max      1_mean      1_std  \\\n",
-       "filename                                                                    \n",
-       "classical_1.mp3   -0.468354   0.000000  178.750244  111.332512  24.847670   \n",
-       "classical_10.mp3  -0.772325   0.029843  259.636963  215.093994  18.388213   \n",
-       "classical_100.mp3 -2.587178   0.000000  190.474884  112.471695  27.277388   \n",
-       "classical_11.mp3  -2.402427   0.000000  159.434616   99.853493  21.916783   \n",
-       "classical_12.mp3  -0.366585   0.000000  194.266327  148.226334  19.304869   \n",
-       "...                     ...        ...         ...         ...        ...   \n",
-       "rock_95.mp3       -0.201062 -89.950394  201.183289  111.724190  36.463682   \n",
-       "rock_96.mp3       -0.957677  -7.415216  210.489319  125.453644  31.908835   \n",
-       "rock_97.mp3       -0.898028 -58.824471  175.198486   99.288246  25.158395   \n",
-       "rock_98.mp3       -1.705686   0.000000  187.040344   96.440956  24.137639   \n",
-       "rock_99.mp3       -0.863099 -32.928108  191.734619   93.971260  33.410192   \n",
-       "\n",
-       "                   ...     38_min     38_max   38_mean     38_std   38_skew  \\\n",
-       "filename           ...                                                        \n",
-       "classical_1.mp3    ... -44.103783  47.302727 -3.713539  16.553630  0.230696   \n",
-       "classical_10.mp3   ... -27.458200  29.808735  0.484320   8.660671 -0.479001   \n",
-       "classical_100.mp3  ... -27.338915  27.608841 -0.333135   8.185168  0.208413   \n",
-       "classical_11.mp3   ... -31.773474  31.498913 -3.781701   9.191031  0.260900   \n",
-       "classical_12.mp3   ... -44.846069  28.488243 -6.241872  10.546620  0.341796   \n",
-       "...                ...        ...        ...       ...        ...       ...   \n",
-       "rock_95.mp3        ... -27.043680  22.443615 -7.234814   8.471876  0.753810   \n",
-       "rock_96.mp3        ... -37.584599  28.085239 -9.704237   8.447570  0.112745   \n",
-       "rock_97.mp3        ... -29.620762  26.325855 -5.722816   7.727353  0.207499   \n",
-       "rock_98.mp3        ... -26.963133   8.714615 -9.511550   5.551747 -0.025625   \n",
-       "rock_99.mp3        ... -21.929461  17.050976 -5.296696   5.894940  0.390704   \n",
-       "\n",
-       "                      39_min     39_max   39_mean     39_std   39_skew  \n",
-       "filename                                                                \n",
-       "classical_1.mp3   -46.790031  49.353710 -2.282033  15.285611  0.171425  \n",
-       "classical_10.mp3  -28.984264  27.534916  0.952575  10.477753 -0.185726  \n",
-       "classical_100.mp3 -38.094074  31.399227 -1.494779  10.917259  0.020986  \n",
-       "classical_11.mp3  -22.666813  50.993847  1.600794  10.125588  0.595789  \n",
-       "classical_12.mp3  -25.048683  46.877155  1.844356  11.160211  0.503148  \n",
-       "...                      ...        ...       ...        ...       ...  \n",
-       "rock_95.mp3       -24.716900  23.410700 -4.502257   6.688022  0.238779  \n",
-       "rock_96.mp3       -38.150497  21.813221 -8.249475   7.807696  0.071979  \n",
-       "rock_97.mp3       -29.497421  25.410231 -3.356631   8.170547  0.160343  \n",
-       "rock_98.mp3       -23.019743  13.949155 -2.664933   5.051528 -0.258403  \n",
-       "rock_99.mp3       -20.984795  29.312206 -0.321817   6.571661  0.384814  \n",
-       "\n",
-       "[400 rows x 201 columns]"
-      ]
-     },
-     "execution_count": 10,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# Aggregate mfccs\n",
-    "\n",
-    "mfcc_raw: pd.DataFrame = pd.read_pickle(BASE_PATH / \"out\" / \"mfcc\" / \"mfcc.pickle\").set_index('filename')\n",
-    "\n",
-    "\n",
-    "# Aggregate from n rows per file to 1 (calculate min, max, etc. for each feature)\n",
-    "\n",
-    "mfcc_aggregated = mfcc_raw.drop(meta_columns, axis=1, errors='ignore').groupby(mfcc_raw.index).agg(['min', 'max', 'mean', 'std', 'skew'])\n",
-    "mfcc_meta = pd.DataFrame(mfcc_raw['genre'].groupby(mfcc_raw.index).last())\n",
-    "mfcc_meta.columns = pd.MultiIndex.from_arrays([['genre'], ['']])\n",
-    "mfcc_merged: pd.DataFrame = pd.merge(mfcc_meta, mfcc_aggregated, left_index=True, right_index=True)\n",
-    "\n",
-    "\n",
-    "one_level_cols = ['_'.join([str(el) for el in col]) for col in mfcc_merged.columns[1:]]\n",
-    "one_level_cols.insert(0, \"genre\")\n",
-    "\n",
-    "mfcc_merged.columns = pd.Index(one_level_cols)\n",
-    "mfcc_merged"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "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/container/1/database/1/table HTTP/1.1\" 200 None\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [200]>\n"
-     ]
-    }
-   ],
-   "source": [
-    "# upload aggregated dataframe to dbrepo\n",
-    "table_name = dbrepo_config[\"tables\"][\"aggregated_mfcc\"][\"name\"]\n",
-    "\n",
-    "# Retrieve table or create new one \n",
-    "table = dbrepo_connector.create_table_if_not_exists(\n",
-    "    mfcc_merged.reset_index(), \n",
-    "    dbrepo_config[\"tables\"][\"aggregated_mfcc\"][\"name\"], \n",
-    "    dbrepo_config[\"tables\"][\"aggregated_mfcc\"][\"description\"]\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "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 /server-middleware/upload HTTP/1.1\" 201 None\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [201]>\n",
-      "DEBUG:dbrepo_ismir.dbrepo:Upload location: /tmp/028df20f43b26e551a4b68e4a1cfa305\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/container/1/database/1/table/11/data/import HTTP/1.1\" 202 0\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [202]>\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "11"
-      ]
-     },
-     "execution_count": 12,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "dbrepo_connector.upload_data(mfcc_merged.reset_index(), table[\"id\"])\n",
-    "\n",
-    "table[\"id\"]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "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/container/1/database/1/table HTTP/1.1\" 200 None\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [200]>\n",
-      "DEBUG:dbrepo_ismir.dbrepo:{'name': 'Train_set', 'description': 'descr', 'columns': [{'name': 'filename', 'type': 'text', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': 'genre', 'type': 'text', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}]}\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/container/1/database/1/table HTTP/1.1\" 201 None\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [201]>\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/container/1/database/1/table HTTP/1.1\" 200 None\n",
-      "DEBUG:dbrepo_ismir.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 /server-middleware/upload HTTP/1.1\" 201 None\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [201]>\n",
-      "DEBUG:dbrepo_ismir.dbrepo:Upload location: /tmp/e961f22c4cd2d2dfd66f9441cf473d07\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/container/1/database/1/table/12/data/import HTTP/1.1\" 202 0\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [202]>\n"
-     ]
-    },
-    {
-     "data": {
-      "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>genre</th>\n",
-       "      <th>0_min</th>\n",
-       "      <th>0_max</th>\n",
-       "      <th>0_mean</th>\n",
-       "      <th>0_std</th>\n",
-       "      <th>0_skew</th>\n",
-       "      <th>1_min</th>\n",
-       "      <th>1_max</th>\n",
-       "      <th>1_mean</th>\n",
-       "      <th>1_std</th>\n",
-       "      <th>...</th>\n",
-       "      <th>38_min</th>\n",
-       "      <th>38_max</th>\n",
-       "      <th>38_mean</th>\n",
-       "      <th>38_std</th>\n",
-       "      <th>38_skew</th>\n",
-       "      <th>39_min</th>\n",
-       "      <th>39_max</th>\n",
-       "      <th>39_mean</th>\n",
-       "      <th>39_std</th>\n",
-       "      <th>39_skew</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>filename</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>classical_1.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-530.784302</td>\n",
-       "      <td>-163.308640</td>\n",
-       "      <td>-302.203217</td>\n",
-       "      <td>51.141998</td>\n",
-       "      <td>-0.468354</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>178.750244</td>\n",
-       "      <td>111.332512</td>\n",
-       "      <td>24.847670</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-44.103783</td>\n",
-       "      <td>47.302727</td>\n",
-       "      <td>-3.713539</td>\n",
-       "      <td>16.553630</td>\n",
-       "      <td>0.230696</td>\n",
-       "      <td>-46.790031</td>\n",
-       "      <td>49.353710</td>\n",
-       "      <td>-2.282033</td>\n",
-       "      <td>15.285611</td>\n",
-       "      <td>0.171425</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_10.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-562.857056</td>\n",
-       "      <td>-96.162895</td>\n",
-       "      <td>-219.258865</td>\n",
-       "      <td>53.561945</td>\n",
-       "      <td>-0.772325</td>\n",
-       "      <td>0.029843</td>\n",
-       "      <td>259.636963</td>\n",
-       "      <td>215.093994</td>\n",
-       "      <td>18.388213</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-27.458200</td>\n",
-       "      <td>29.808735</td>\n",
-       "      <td>0.484320</td>\n",
-       "      <td>8.660671</td>\n",
-       "      <td>-0.479001</td>\n",
-       "      <td>-28.984264</td>\n",
-       "      <td>27.534916</td>\n",
-       "      <td>0.952575</td>\n",
-       "      <td>10.477753</td>\n",
-       "      <td>-0.185726</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_100.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-536.237244</td>\n",
-       "      <td>-61.609112</td>\n",
-       "      <td>-177.803986</td>\n",
-       "      <td>83.381454</td>\n",
-       "      <td>-2.587178</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>190.474884</td>\n",
-       "      <td>112.471695</td>\n",
-       "      <td>27.277388</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-27.338915</td>\n",
-       "      <td>27.608841</td>\n",
-       "      <td>-0.333135</td>\n",
-       "      <td>8.185168</td>\n",
-       "      <td>0.208413</td>\n",
-       "      <td>-38.094074</td>\n",
-       "      <td>31.399227</td>\n",
-       "      <td>-1.494779</td>\n",
-       "      <td>10.917259</td>\n",
-       "      <td>0.020986</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_11.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-536.457520</td>\n",
-       "      <td>-120.430145</td>\n",
-       "      <td>-222.126129</td>\n",
-       "      <td>76.246935</td>\n",
-       "      <td>-2.402427</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>159.434616</td>\n",
-       "      <td>99.853493</td>\n",
-       "      <td>21.916783</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-31.773474</td>\n",
-       "      <td>31.498913</td>\n",
-       "      <td>-3.781701</td>\n",
-       "      <td>9.191031</td>\n",
-       "      <td>0.260900</td>\n",
-       "      <td>-22.666813</td>\n",
-       "      <td>50.993847</td>\n",
-       "      <td>1.600794</td>\n",
-       "      <td>10.125588</td>\n",
-       "      <td>0.595789</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_12.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-562.675171</td>\n",
-       "      <td>-148.132309</td>\n",
-       "      <td>-270.974976</td>\n",
-       "      <td>52.190831</td>\n",
-       "      <td>-0.366585</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>194.266327</td>\n",
-       "      <td>148.226334</td>\n",
-       "      <td>19.304869</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-44.846069</td>\n",
-       "      <td>28.488243</td>\n",
-       "      <td>-6.241872</td>\n",
-       "      <td>10.546620</td>\n",
-       "      <td>0.341796</td>\n",
-       "      <td>-25.048683</td>\n",
-       "      <td>46.877155</td>\n",
-       "      <td>1.844356</td>\n",
-       "      <td>11.160211</td>\n",
-       "      <td>0.503148</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>...</th>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_95.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-553.109985</td>\n",
-       "      <td>-5.219127</td>\n",
-       "      <td>-193.506073</td>\n",
-       "      <td>76.869574</td>\n",
-       "      <td>-0.201062</td>\n",
-       "      <td>-89.950394</td>\n",
-       "      <td>201.183289</td>\n",
-       "      <td>111.724190</td>\n",
-       "      <td>36.463682</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-27.043680</td>\n",
-       "      <td>22.443615</td>\n",
-       "      <td>-7.234814</td>\n",
-       "      <td>8.471876</td>\n",
-       "      <td>0.753810</td>\n",
-       "      <td>-24.716900</td>\n",
-       "      <td>23.410700</td>\n",
-       "      <td>-4.502257</td>\n",
-       "      <td>6.688022</td>\n",
-       "      <td>0.238779</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_96.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-541.236084</td>\n",
-       "      <td>27.163366</td>\n",
-       "      <td>-119.113907</td>\n",
-       "      <td>58.420538</td>\n",
-       "      <td>-0.957677</td>\n",
-       "      <td>-7.415216</td>\n",
-       "      <td>210.489319</td>\n",
-       "      <td>125.453644</td>\n",
-       "      <td>31.908835</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-37.584599</td>\n",
-       "      <td>28.085239</td>\n",
-       "      <td>-9.704237</td>\n",
-       "      <td>8.447570</td>\n",
-       "      <td>0.112745</td>\n",
-       "      <td>-38.150497</td>\n",
-       "      <td>21.813221</td>\n",
-       "      <td>-8.249475</td>\n",
-       "      <td>7.807696</td>\n",
-       "      <td>0.071979</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_97.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-518.497375</td>\n",
-       "      <td>58.526649</td>\n",
-       "      <td>-66.267700</td>\n",
-       "      <td>65.635605</td>\n",
-       "      <td>-0.898028</td>\n",
-       "      <td>-58.824471</td>\n",
-       "      <td>175.198486</td>\n",
-       "      <td>99.288246</td>\n",
-       "      <td>25.158395</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-29.620762</td>\n",
-       "      <td>26.325855</td>\n",
-       "      <td>-5.722816</td>\n",
-       "      <td>7.727353</td>\n",
-       "      <td>0.207499</td>\n",
-       "      <td>-29.497421</td>\n",
-       "      <td>25.410231</td>\n",
-       "      <td>-3.356631</td>\n",
-       "      <td>8.170547</td>\n",
-       "      <td>0.160343</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_98.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-518.643066</td>\n",
-       "      <td>53.555084</td>\n",
-       "      <td>-45.734737</td>\n",
-       "      <td>52.443934</td>\n",
-       "      <td>-1.705686</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>187.040344</td>\n",
-       "      <td>96.440956</td>\n",
-       "      <td>24.137639</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-26.963133</td>\n",
-       "      <td>8.714615</td>\n",
-       "      <td>-9.511550</td>\n",
-       "      <td>5.551747</td>\n",
-       "      <td>-0.025625</td>\n",
-       "      <td>-23.019743</td>\n",
-       "      <td>13.949155</td>\n",
-       "      <td>-2.664933</td>\n",
-       "      <td>5.051528</td>\n",
-       "      <td>-0.258403</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_99.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-544.703064</td>\n",
-       "      <td>75.608696</td>\n",
-       "      <td>-49.380920</td>\n",
-       "      <td>54.045598</td>\n",
-       "      <td>-0.863099</td>\n",
-       "      <td>-32.928108</td>\n",
-       "      <td>191.734619</td>\n",
-       "      <td>93.971260</td>\n",
-       "      <td>33.410192</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-21.929461</td>\n",
-       "      <td>17.050976</td>\n",
-       "      <td>-5.296696</td>\n",
-       "      <td>5.894940</td>\n",
-       "      <td>0.390704</td>\n",
-       "      <td>-20.984795</td>\n",
-       "      <td>29.312206</td>\n",
-       "      <td>-0.321817</td>\n",
-       "      <td>6.571661</td>\n",
-       "      <td>0.384814</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>320 rows × 201 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "                       genre       0_min       0_max      0_mean      0_std  \\\n",
-       "filename                                                                      \n",
-       "classical_1.mp3    classical -530.784302 -163.308640 -302.203217  51.141998   \n",
-       "classical_10.mp3   classical -562.857056  -96.162895 -219.258865  53.561945   \n",
-       "classical_100.mp3  classical -536.237244  -61.609112 -177.803986  83.381454   \n",
-       "classical_11.mp3   classical -536.457520 -120.430145 -222.126129  76.246935   \n",
-       "classical_12.mp3   classical -562.675171 -148.132309 -270.974976  52.190831   \n",
-       "...                      ...         ...         ...         ...        ...   \n",
-       "rock_95.mp3             rock -553.109985   -5.219127 -193.506073  76.869574   \n",
-       "rock_96.mp3             rock -541.236084   27.163366 -119.113907  58.420538   \n",
-       "rock_97.mp3             rock -518.497375   58.526649  -66.267700  65.635605   \n",
-       "rock_98.mp3             rock -518.643066   53.555084  -45.734737  52.443934   \n",
-       "rock_99.mp3             rock -544.703064   75.608696  -49.380920  54.045598   \n",
-       "\n",
-       "                     0_skew      1_min       1_max      1_mean      1_std  \\\n",
-       "filename                                                                    \n",
-       "classical_1.mp3   -0.468354   0.000000  178.750244  111.332512  24.847670   \n",
-       "classical_10.mp3  -0.772325   0.029843  259.636963  215.093994  18.388213   \n",
-       "classical_100.mp3 -2.587178   0.000000  190.474884  112.471695  27.277388   \n",
-       "classical_11.mp3  -2.402427   0.000000  159.434616   99.853493  21.916783   \n",
-       "classical_12.mp3  -0.366585   0.000000  194.266327  148.226334  19.304869   \n",
-       "...                     ...        ...         ...         ...        ...   \n",
-       "rock_95.mp3       -0.201062 -89.950394  201.183289  111.724190  36.463682   \n",
-       "rock_96.mp3       -0.957677  -7.415216  210.489319  125.453644  31.908835   \n",
-       "rock_97.mp3       -0.898028 -58.824471  175.198486   99.288246  25.158395   \n",
-       "rock_98.mp3       -1.705686   0.000000  187.040344   96.440956  24.137639   \n",
-       "rock_99.mp3       -0.863099 -32.928108  191.734619   93.971260  33.410192   \n",
-       "\n",
-       "                   ...     38_min     38_max   38_mean     38_std   38_skew  \\\n",
-       "filename           ...                                                        \n",
-       "classical_1.mp3    ... -44.103783  47.302727 -3.713539  16.553630  0.230696   \n",
-       "classical_10.mp3   ... -27.458200  29.808735  0.484320   8.660671 -0.479001   \n",
-       "classical_100.mp3  ... -27.338915  27.608841 -0.333135   8.185168  0.208413   \n",
-       "classical_11.mp3   ... -31.773474  31.498913 -3.781701   9.191031  0.260900   \n",
-       "classical_12.mp3   ... -44.846069  28.488243 -6.241872  10.546620  0.341796   \n",
-       "...                ...        ...        ...       ...        ...       ...   \n",
-       "rock_95.mp3        ... -27.043680  22.443615 -7.234814   8.471876  0.753810   \n",
-       "rock_96.mp3        ... -37.584599  28.085239 -9.704237   8.447570  0.112745   \n",
-       "rock_97.mp3        ... -29.620762  26.325855 -5.722816   7.727353  0.207499   \n",
-       "rock_98.mp3        ... -26.963133   8.714615 -9.511550   5.551747 -0.025625   \n",
-       "rock_99.mp3        ... -21.929461  17.050976 -5.296696   5.894940  0.390704   \n",
-       "\n",
-       "                      39_min     39_max   39_mean     39_std   39_skew  \n",
-       "filename                                                                \n",
-       "classical_1.mp3   -46.790031  49.353710 -2.282033  15.285611  0.171425  \n",
-       "classical_10.mp3  -28.984264  27.534916  0.952575  10.477753 -0.185726  \n",
-       "classical_100.mp3 -38.094074  31.399227 -1.494779  10.917259  0.020986  \n",
-       "classical_11.mp3  -22.666813  50.993847  1.600794  10.125588  0.595789  \n",
-       "classical_12.mp3  -25.048683  46.877155  1.844356  11.160211  0.503148  \n",
-       "...                      ...        ...       ...        ...       ...  \n",
-       "rock_95.mp3       -24.716900  23.410700 -4.502257   6.688022  0.238779  \n",
-       "rock_96.mp3       -38.150497  21.813221 -8.249475   7.807696  0.071979  \n",
-       "rock_97.mp3       -29.497421  25.410231 -3.356631   8.170547  0.160343  \n",
-       "rock_98.mp3       -23.019743  13.949155 -2.664933   5.051528 -0.258403  \n",
-       "rock_99.mp3       -20.984795  29.312206 -0.321817   6.571661  0.384814  \n",
-       "\n",
-       "[320 rows x 201 columns]"
-      ]
-     },
-     "execution_count": 13,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "train: pd.DataFrame = mfcc_merged.sample(frac = 0.8).sort_index()\n",
-    "\n",
-    "table = dbrepo_connector.create_table_if_not_exists(\n",
-    "    train.reset_index(),\n",
-    "    dbrepo_config[\"tables\"][\"train_set\"][\"name\"], \n",
-    "    dbrepo_config[\"tables\"][\"train_set\"][\"description\"]\n",
-    ")\n",
-    "dbrepo_connector.upload_data(train.reset_index(), table[\"id\"])\n",
-    "\n",
-    "train"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "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/container/1/database/1/table HTTP/1.1\" 200 None\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [200]>\n",
-      "DEBUG:dbrepo_ismir.dbrepo:{'name': 'Test_set', 'description': 'descr', 'columns': [{'name': 'filename', 'type': 'text', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': 'genre', 'type': 'text', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '0_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '1_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '2_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '3_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '4_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '5_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '6_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '7_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '8_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '9_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '10_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '11_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '12_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '13_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '14_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '15_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '16_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '17_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '18_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '19_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '20_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '21_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '22_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '23_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '24_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '25_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '26_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '27_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '28_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '29_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '30_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '31_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '32_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '33_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '34_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '35_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '36_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '37_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '38_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_min', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_max', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_mean', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_std', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}, {'name': '39_skew', 'type': 'decimal', 'unique': False, 'primary_key': False, 'null_allowed': False}]}\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/container/1/database/1/table HTTP/1.1\" 201 None\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [201]>\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/container/1/database/1/table HTTP/1.1\" 200 None\n",
-      "DEBUG:dbrepo_ismir.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 /server-middleware/upload HTTP/1.1\" 201 None\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [201]>\n",
-      "DEBUG:dbrepo_ismir.dbrepo:Upload location: /tmp/444ab677f4f7fc08f28fee1131ea4298\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/container/1/database/1/table/13/data/import HTTP/1.1\" 202 0\n",
-      "DEBUG:dbrepo_ismir.dbrepo:<Response [202]>\n"
-     ]
-    },
-    {
-     "data": {
-      "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>genre</th>\n",
-       "      <th>0_min</th>\n",
-       "      <th>0_max</th>\n",
-       "      <th>0_mean</th>\n",
-       "      <th>0_std</th>\n",
-       "      <th>0_skew</th>\n",
-       "      <th>1_min</th>\n",
-       "      <th>1_max</th>\n",
-       "      <th>1_mean</th>\n",
-       "      <th>1_std</th>\n",
-       "      <th>...</th>\n",
-       "      <th>38_min</th>\n",
-       "      <th>38_max</th>\n",
-       "      <th>38_mean</th>\n",
-       "      <th>38_std</th>\n",
-       "      <th>38_skew</th>\n",
-       "      <th>39_min</th>\n",
-       "      <th>39_max</th>\n",
-       "      <th>39_mean</th>\n",
-       "      <th>39_std</th>\n",
-       "      <th>39_skew</th>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>filename</th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "      <th></th>\n",
-       "    </tr>\n",
-       "  </thead>\n",
-       "  <tbody>\n",
-       "    <tr>\n",
-       "      <th>classical_24.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-587.785461</td>\n",
-       "      <td>-11.066548</td>\n",
-       "      <td>-147.241623</td>\n",
-       "      <td>63.913766</td>\n",
-       "      <td>-1.441499</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>214.555634</td>\n",
-       "      <td>136.879730</td>\n",
-       "      <td>27.699514</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-37.205727</td>\n",
-       "      <td>28.788366</td>\n",
-       "      <td>-1.942927</td>\n",
-       "      <td>8.390800</td>\n",
-       "      <td>-0.355343</td>\n",
-       "      <td>-24.297161</td>\n",
-       "      <td>29.054634</td>\n",
-       "      <td>-1.324975</td>\n",
-       "      <td>8.486928</td>\n",
-       "      <td>0.304785</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_26.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-569.712158</td>\n",
-       "      <td>-0.070531</td>\n",
-       "      <td>-143.714355</td>\n",
-       "      <td>98.262949</td>\n",
-       "      <td>-2.543314</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>128.069717</td>\n",
-       "      <td>76.152962</td>\n",
-       "      <td>13.718037</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-24.739586</td>\n",
-       "      <td>17.435701</td>\n",
-       "      <td>-7.886369</td>\n",
-       "      <td>5.901740</td>\n",
-       "      <td>0.369380</td>\n",
-       "      <td>-19.358587</td>\n",
-       "      <td>23.100426</td>\n",
-       "      <td>-0.108562</td>\n",
-       "      <td>6.584214</td>\n",
-       "      <td>0.187470</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_34.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-539.208862</td>\n",
-       "      <td>-125.778076</td>\n",
-       "      <td>-264.174103</td>\n",
-       "      <td>49.029822</td>\n",
-       "      <td>0.024207</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>200.549286</td>\n",
-       "      <td>151.797653</td>\n",
-       "      <td>20.997639</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-18.701038</td>\n",
-       "      <td>28.490271</td>\n",
-       "      <td>1.823272</td>\n",
-       "      <td>7.751112</td>\n",
-       "      <td>0.125583</td>\n",
-       "      <td>-27.106770</td>\n",
-       "      <td>26.210209</td>\n",
-       "      <td>-3.567762</td>\n",
-       "      <td>8.418179</td>\n",
-       "      <td>0.507118</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_37.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-537.953369</td>\n",
-       "      <td>-107.239861</td>\n",
-       "      <td>-245.100616</td>\n",
-       "      <td>55.113451</td>\n",
-       "      <td>-0.390227</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>193.515350</td>\n",
-       "      <td>137.776245</td>\n",
-       "      <td>30.082837</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-23.498358</td>\n",
-       "      <td>32.250309</td>\n",
-       "      <td>-2.397477</td>\n",
-       "      <td>6.976093</td>\n",
-       "      <td>0.604056</td>\n",
-       "      <td>-21.997433</td>\n",
-       "      <td>16.448553</td>\n",
-       "      <td>-2.813462</td>\n",
-       "      <td>5.559475</td>\n",
-       "      <td>0.041881</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>classical_39.mp3</th>\n",
-       "      <td>classical</td>\n",
-       "      <td>-578.847290</td>\n",
-       "      <td>-55.479786</td>\n",
-       "      <td>-183.752762</td>\n",
-       "      <td>69.140362</td>\n",
-       "      <td>-0.577054</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>193.846619</td>\n",
-       "      <td>127.058319</td>\n",
-       "      <td>29.295309</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-48.676907</td>\n",
-       "      <td>24.563923</td>\n",
-       "      <td>-7.810217</td>\n",
-       "      <td>11.568093</td>\n",
-       "      <td>-0.106692</td>\n",
-       "      <td>-24.327251</td>\n",
-       "      <td>40.172852</td>\n",
-       "      <td>-0.077929</td>\n",
-       "      <td>10.646977</td>\n",
-       "      <td>0.492465</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>...</th>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "      <td>...</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_65.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-533.449341</td>\n",
-       "      <td>-25.973362</td>\n",
-       "      <td>-192.106262</td>\n",
-       "      <td>77.238210</td>\n",
-       "      <td>-0.819074</td>\n",
-       "      <td>-29.258015</td>\n",
-       "      <td>208.906296</td>\n",
-       "      <td>125.367722</td>\n",
-       "      <td>32.599015</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-30.041363</td>\n",
-       "      <td>28.924728</td>\n",
-       "      <td>-7.925346</td>\n",
-       "      <td>6.096354</td>\n",
-       "      <td>0.581601</td>\n",
-       "      <td>-23.952833</td>\n",
-       "      <td>24.913488</td>\n",
-       "      <td>-1.928245</td>\n",
-       "      <td>6.399965</td>\n",
-       "      <td>0.176792</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_68.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-561.144775</td>\n",
-       "      <td>12.341146</td>\n",
-       "      <td>-96.624611</td>\n",
-       "      <td>47.400105</td>\n",
-       "      <td>-0.653529</td>\n",
-       "      <td>-23.055605</td>\n",
-       "      <td>167.529495</td>\n",
-       "      <td>88.402924</td>\n",
-       "      <td>29.370019</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-32.008865</td>\n",
-       "      <td>27.933788</td>\n",
-       "      <td>-2.982027</td>\n",
-       "      <td>9.721906</td>\n",
-       "      <td>0.089447</td>\n",
-       "      <td>-23.004169</td>\n",
-       "      <td>24.203032</td>\n",
-       "      <td>3.406437</td>\n",
-       "      <td>7.585782</td>\n",
-       "      <td>-0.129008</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_73.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-592.886169</td>\n",
-       "      <td>41.701981</td>\n",
-       "      <td>-153.154663</td>\n",
-       "      <td>106.421390</td>\n",
-       "      <td>-0.994741</td>\n",
-       "      <td>0.000000</td>\n",
-       "      <td>215.729462</td>\n",
-       "      <td>115.183716</td>\n",
-       "      <td>33.206506</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-24.936481</td>\n",
-       "      <td>24.261497</td>\n",
-       "      <td>-2.783076</td>\n",
-       "      <td>6.734214</td>\n",
-       "      <td>0.418152</td>\n",
-       "      <td>-13.621414</td>\n",
-       "      <td>26.187157</td>\n",
-       "      <td>3.596104</td>\n",
-       "      <td>5.598480</td>\n",
-       "      <td>0.126061</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_76.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-540.481323</td>\n",
-       "      <td>-49.008457</td>\n",
-       "      <td>-183.800781</td>\n",
-       "      <td>62.901296</td>\n",
-       "      <td>-0.607871</td>\n",
-       "      <td>-30.659517</td>\n",
-       "      <td>182.062378</td>\n",
-       "      <td>116.824356</td>\n",
-       "      <td>28.140195</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-29.996357</td>\n",
-       "      <td>27.309448</td>\n",
-       "      <td>-4.922373</td>\n",
-       "      <td>8.220957</td>\n",
-       "      <td>0.080346</td>\n",
-       "      <td>-29.446217</td>\n",
-       "      <td>26.686302</td>\n",
-       "      <td>-6.446850</td>\n",
-       "      <td>7.489243</td>\n",
-       "      <td>0.572411</td>\n",
-       "    </tr>\n",
-       "    <tr>\n",
-       "      <th>rock_89.mp3</th>\n",
-       "      <td>rock</td>\n",
-       "      <td>-547.486755</td>\n",
-       "      <td>57.036377</td>\n",
-       "      <td>-138.844193</td>\n",
-       "      <td>83.231726</td>\n",
-       "      <td>-0.429822</td>\n",
-       "      <td>-7.842898</td>\n",
-       "      <td>210.354797</td>\n",
-       "      <td>100.083328</td>\n",
-       "      <td>32.894963</td>\n",
-       "      <td>...</td>\n",
-       "      <td>-35.628502</td>\n",
-       "      <td>24.877861</td>\n",
-       "      <td>-3.417018</td>\n",
-       "      <td>8.141689</td>\n",
-       "      <td>-0.068637</td>\n",
-       "      <td>-29.531443</td>\n",
-       "      <td>33.873131</td>\n",
-       "      <td>-1.116988</td>\n",
-       "      <td>8.490578</td>\n",
-       "      <td>0.084522</td>\n",
-       "    </tr>\n",
-       "  </tbody>\n",
-       "</table>\n",
-       "<p>80 rows × 201 columns</p>\n",
-       "</div>"
-      ],
-      "text/plain": [
-       "                      genre       0_min       0_max      0_mean       0_std  \\\n",
-       "filename                                                                      \n",
-       "classical_24.mp3  classical -587.785461  -11.066548 -147.241623   63.913766   \n",
-       "classical_26.mp3  classical -569.712158   -0.070531 -143.714355   98.262949   \n",
-       "classical_34.mp3  classical -539.208862 -125.778076 -264.174103   49.029822   \n",
-       "classical_37.mp3  classical -537.953369 -107.239861 -245.100616   55.113451   \n",
-       "classical_39.mp3  classical -578.847290  -55.479786 -183.752762   69.140362   \n",
-       "...                     ...         ...         ...         ...         ...   \n",
-       "rock_65.mp3            rock -533.449341  -25.973362 -192.106262   77.238210   \n",
-       "rock_68.mp3            rock -561.144775   12.341146  -96.624611   47.400105   \n",
-       "rock_73.mp3            rock -592.886169   41.701981 -153.154663  106.421390   \n",
-       "rock_76.mp3            rock -540.481323  -49.008457 -183.800781   62.901296   \n",
-       "rock_89.mp3            rock -547.486755   57.036377 -138.844193   83.231726   \n",
-       "\n",
-       "                    0_skew      1_min       1_max      1_mean      1_std  ...  \\\n",
-       "filename                                                                  ...   \n",
-       "classical_24.mp3 -1.441499   0.000000  214.555634  136.879730  27.699514  ...   \n",
-       "classical_26.mp3 -2.543314   0.000000  128.069717   76.152962  13.718037  ...   \n",
-       "classical_34.mp3  0.024207   0.000000  200.549286  151.797653  20.997639  ...   \n",
-       "classical_37.mp3 -0.390227   0.000000  193.515350  137.776245  30.082837  ...   \n",
-       "classical_39.mp3 -0.577054   0.000000  193.846619  127.058319  29.295309  ...   \n",
-       "...                    ...        ...         ...         ...        ...  ...   \n",
-       "rock_65.mp3      -0.819074 -29.258015  208.906296  125.367722  32.599015  ...   \n",
-       "rock_68.mp3      -0.653529 -23.055605  167.529495   88.402924  29.370019  ...   \n",
-       "rock_73.mp3      -0.994741   0.000000  215.729462  115.183716  33.206506  ...   \n",
-       "rock_76.mp3      -0.607871 -30.659517  182.062378  116.824356  28.140195  ...   \n",
-       "rock_89.mp3      -0.429822  -7.842898  210.354797  100.083328  32.894963  ...   \n",
-       "\n",
-       "                     38_min     38_max   38_mean     38_std   38_skew  \\\n",
-       "filename                                                                \n",
-       "classical_24.mp3 -37.205727  28.788366 -1.942927   8.390800 -0.355343   \n",
-       "classical_26.mp3 -24.739586  17.435701 -7.886369   5.901740  0.369380   \n",
-       "classical_34.mp3 -18.701038  28.490271  1.823272   7.751112  0.125583   \n",
-       "classical_37.mp3 -23.498358  32.250309 -2.397477   6.976093  0.604056   \n",
-       "classical_39.mp3 -48.676907  24.563923 -7.810217  11.568093 -0.106692   \n",
-       "...                     ...        ...       ...        ...       ...   \n",
-       "rock_65.mp3      -30.041363  28.924728 -7.925346   6.096354  0.581601   \n",
-       "rock_68.mp3      -32.008865  27.933788 -2.982027   9.721906  0.089447   \n",
-       "rock_73.mp3      -24.936481  24.261497 -2.783076   6.734214  0.418152   \n",
-       "rock_76.mp3      -29.996357  27.309448 -4.922373   8.220957  0.080346   \n",
-       "rock_89.mp3      -35.628502  24.877861 -3.417018   8.141689 -0.068637   \n",
-       "\n",
-       "                     39_min     39_max   39_mean     39_std   39_skew  \n",
-       "filename                                                               \n",
-       "classical_24.mp3 -24.297161  29.054634 -1.324975   8.486928  0.304785  \n",
-       "classical_26.mp3 -19.358587  23.100426 -0.108562   6.584214  0.187470  \n",
-       "classical_34.mp3 -27.106770  26.210209 -3.567762   8.418179  0.507118  \n",
-       "classical_37.mp3 -21.997433  16.448553 -2.813462   5.559475  0.041881  \n",
-       "classical_39.mp3 -24.327251  40.172852 -0.077929  10.646977  0.492465  \n",
-       "...                     ...        ...       ...        ...       ...  \n",
-       "rock_65.mp3      -23.952833  24.913488 -1.928245   6.399965  0.176792  \n",
-       "rock_68.mp3      -23.004169  24.203032  3.406437   7.585782 -0.129008  \n",
-       "rock_73.mp3      -13.621414  26.187157  3.596104   5.598480  0.126061  \n",
-       "rock_76.mp3      -29.446217  26.686302 -6.446850   7.489243  0.572411  \n",
-       "rock_89.mp3      -29.531443  33.873131 -1.116988   8.490578  0.084522  \n",
-       "\n",
-       "[80 rows x 201 columns]"
-      ]
-     },
-     "execution_count": 14,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "test: pd.DataFrame = mfcc_merged.drop(train.index)\n",
-    "\n",
-    "table = dbrepo_connector.create_table_if_not_exists(\n",
-    "    test.reset_index(),\n",
-    "    dbrepo_config[\"tables\"][\"test_set\"][\"name\"], \n",
-    "    dbrepo_config[\"tables\"][\"test_set\"][\"description\"]\n",
-    ")\n",
-    "dbrepo_connector.upload_data(test.reset_index(), table[\"id\"])\n",
-    "\n",
-    "test"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(                        0_min       0_max      0_mean      0_std    0_skew  \\\n",
-       " filename                                                                     \n",
-       " classical_1.mp3   -530.784302 -163.308640 -302.203217  51.141998 -0.468354   \n",
-       " classical_10.mp3  -562.857056  -96.162895 -219.258865  53.561945 -0.772325   \n",
-       " classical_100.mp3 -536.237244  -61.609112 -177.803986  83.381454 -2.587178   \n",
-       " classical_11.mp3  -536.457520 -120.430145 -222.126129  76.246935 -2.402427   \n",
-       " classical_12.mp3  -562.675171 -148.132309 -270.974976  52.190831 -0.366585   \n",
-       " ...                       ...         ...         ...        ...       ...   \n",
-       " rock_95.mp3       -553.109985   -5.219127 -193.506073  76.869574 -0.201062   \n",
-       " rock_96.mp3       -541.236084   27.163366 -119.113907  58.420538 -0.957677   \n",
-       " rock_97.mp3       -518.497375   58.526649  -66.267700  65.635605 -0.898028   \n",
-       " rock_98.mp3       -518.643066   53.555084  -45.734737  52.443934 -1.705686   \n",
-       " rock_99.mp3       -544.703064   75.608696  -49.380920  54.045598 -0.863099   \n",
-       " \n",
-       "                        1_min       1_max      1_mean      1_std    1_skew  \\\n",
-       " filename                                                                    \n",
-       " classical_1.mp3     0.000000  178.750244  111.332512  24.847670 -0.402631   \n",
-       " classical_10.mp3    0.029843  259.636963  215.093994  18.388213 -1.528703   \n",
-       " classical_100.mp3   0.000000  190.474884  112.471695  27.277388 -1.318526   \n",
-       " classical_11.mp3    0.000000  159.434616   99.853493  21.916783 -1.176901   \n",
-       " classical_12.mp3    0.000000  194.266327  148.226334  19.304869 -0.533313   \n",
-       " ...                      ...         ...         ...        ...       ...   \n",
-       " rock_95.mp3       -89.950394  201.183289  111.724190  36.463682 -0.443205   \n",
-       " rock_96.mp3        -7.415216  210.489319  125.453644  31.908835 -0.547472   \n",
-       " rock_97.mp3       -58.824471  175.198486   99.288246  25.158395 -0.568067   \n",
-       " rock_98.mp3         0.000000  187.040344   96.440956  24.137639 -0.145235   \n",
-       " rock_99.mp3       -32.928108  191.734619   93.971260  33.410192  0.040113   \n",
-       " \n",
-       "                    ...     38_min     38_max   38_mean     38_std   38_skew  \\\n",
-       " filename           ...                                                        \n",
-       " classical_1.mp3    ... -44.103783  47.302727 -3.713539  16.553630  0.230696   \n",
-       " classical_10.mp3   ... -27.458200  29.808735  0.484320   8.660671 -0.479001   \n",
-       " classical_100.mp3  ... -27.338915  27.608841 -0.333135   8.185168  0.208413   \n",
-       " classical_11.mp3   ... -31.773474  31.498913 -3.781701   9.191031  0.260900   \n",
-       " classical_12.mp3   ... -44.846069  28.488243 -6.241872  10.546620  0.341796   \n",
-       " ...                ...        ...        ...       ...        ...       ...   \n",
-       " rock_95.mp3        ... -27.043680  22.443615 -7.234814   8.471876  0.753810   \n",
-       " rock_96.mp3        ... -37.584599  28.085239 -9.704237   8.447570  0.112745   \n",
-       " rock_97.mp3        ... -29.620762  26.325855 -5.722816   7.727353  0.207499   \n",
-       " rock_98.mp3        ... -26.963133   8.714615 -9.511550   5.551747 -0.025625   \n",
-       " rock_99.mp3        ... -21.929461  17.050976 -5.296696   5.894940  0.390704   \n",
-       " \n",
-       "                       39_min     39_max   39_mean     39_std   39_skew  \n",
-       " filename                                                                \n",
-       " classical_1.mp3   -46.790031  49.353710 -2.282033  15.285611  0.171425  \n",
-       " classical_10.mp3  -28.984264  27.534916  0.952575  10.477753 -0.185726  \n",
-       " classical_100.mp3 -38.094074  31.399227 -1.494779  10.917259  0.020986  \n",
-       " classical_11.mp3  -22.666813  50.993847  1.600794  10.125588  0.595789  \n",
-       " classical_12.mp3  -25.048683  46.877155  1.844356  11.160211  0.503148  \n",
-       " ...                      ...        ...       ...        ...       ...  \n",
-       " rock_95.mp3       -24.716900  23.410700 -4.502257   6.688022  0.238779  \n",
-       " rock_96.mp3       -38.150497  21.813221 -8.249475   7.807696  0.071979  \n",
-       " rock_97.mp3       -29.497421  25.410231 -3.356631   8.170547  0.160343  \n",
-       " rock_98.mp3       -23.019743  13.949155 -2.664933   5.051528 -0.258403  \n",
-       " rock_99.mp3       -20.984795  29.312206 -0.321817   6.571661  0.384814  \n",
-       " \n",
-       " [320 rows x 200 columns],\n",
-       " array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
-       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
-       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
-       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
-       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
-       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
-       "        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
-       "        1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
-       "        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
-       "        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
-       "        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,\n",
-       "        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n",
-       "        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n",
-       "        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n",
-       "        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]))"
-      ]
-     },
-     "execution_count": 16,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# remove labels\n",
-    "X = train.drop(meta_columns, axis=1, errors='ignore')\n",
-    "\n",
-    "columns: pd.Index = X.columns\n",
-    "classnames = np.sort(np.unique(mfcc_merged.genre.values)) # => [\"classical\", \"electric\", \"pop\", \"rock\"]\n",
-    "\n",
-    "# map classname to an index and create dicts for easy lookup in O(1) \n",
-    "classname2index = {}\n",
-    "index2classname = {}\n",
-    "for i, classname in enumerate(classnames):\n",
-    "    classname2index[classname] = i\n",
-    "    index2classname[i] = classname\n",
-    "\n",
-    "# map genre to genre index    \n",
-    "y = np.array([classname2index[classname] for classname in train.genre.values])\n",
-    "\n",
-    "(X, y)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "(320, 200)\n",
-      "(80, 200)\n",
-      "0.25\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n",
-       "       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,\n",
-       "       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,\n",
-       "       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3])"
-      ]
-     },
-     "execution_count": 18,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "X_test = test.drop(meta_columns, axis=1, errors='ignore')\n",
-    "\n",
-    "print(X.shape)\n",
-    "print(X_test.shape)\n",
-    "print(X_test.shape[0] / X.shape[0])\n",
-    "print(X_test)\n",
-    "\n",
-    "y_test = np.array([classname2index[classname] for classname in test.genre.values])\n",
-    "\n",
-    "y_test"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 19,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([[ 0.38358037, -1.78176967, -1.36991948, ..., -0.7364226 ,\n",
-       "         3.30655734,  0.08175137],\n",
-       "       [-0.44416696, -0.93370955, -0.44485224, ...,  0.22201585,\n",
-       "         1.30012279, -0.92935696],\n",
-       "       [ 0.24284851, -0.49729044,  0.01748849, ..., -0.50315331,\n",
-       "         1.4835392 , -0.34414774],\n",
-       "       ...,\n",
-       "       [ 0.7006866 ,  1.02004099,  1.26143774, ..., -1.05483408,\n",
-       "         0.33726991,  0.05037821],\n",
-       "       [ 0.69692655,  0.95724943,  1.49043913, ..., -0.84987893,\n",
-       "        -0.96437185, -1.13511025],\n",
-       "       [ 0.02435901,  1.23578963,  1.44977373, ..., -0.15559615,\n",
-       "        -0.32998362,  0.68586277]])"
-      ]
-     },
-     "execution_count": 19,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# Standardize for PCA\n",
-    "\n",
-    "scaler = StandardScaler()\n",
-    "X_standardized = scaler.fit_transform(X.values)\n",
-    "X_test_standardized = scaler.transform(X_test.values)\n",
-    "\n",
-    "X_standardized"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "0.8584729958125247\n",
-      "(320, 50)\n",
-      "(80, 50)\n",
-      "(320,)\n"
-     ]
-    }
-   ],
-   "source": [
-    "# Reduce Dimensions via PCA\n",
-    "pca = PCA(n_components=50).fit(X_standardized)\n",
-    "X_pca = pca.transform(X_standardized)\n",
-    "X_test_pca = pca.transform(X_test_standardized)\n",
-    "\n",
-    "print(sum(pca.explained_variance_ratio_))\n",
-    "print(X_pca.shape)\n",
-    "print(X_test_pca.shape)\n",
-    "print(y.shape)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 21,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "0.78125\n",
-      "[[-9.06660619e+00 -4.95915611e-01 -2.41534097e+00 ...  2.40411364e-01\n",
-      "   1.72789259e+00 -4.91311052e-01]\n",
-      " [ 5.16773703e+00 -3.83363657e+00  3.92975061e+00 ... -5.86681505e-01\n",
-      "   2.09582876e+00 -2.22137851e-01]\n",
-      " [ 7.22948970e+00  4.63699554e+00 -5.58224821e+00 ...  1.56743403e+00\n",
-      "   4.58491534e-03 -1.49357831e+00]\n",
-      " ...\n",
-      " [-1.01961591e+01 -3.29396783e+00  7.97884202e+00 ... -5.79046872e-01\n",
-      "  -3.02055536e-01  6.86944177e-01]\n",
-      " [-9.99506754e+00  2.99935698e+00  5.78776848e-01 ...  1.34509710e+00\n",
-      "  -5.60670240e-01  7.77889374e-01]\n",
-      " [-3.40625023e+00 -6.51370931e+00  1.73600129e+00 ...  1.38403616e+00\n",
-      "   1.20548003e+00 -4.88529043e-01]]\n",
-      "[3 0 3 2 3 0 1 2 0 3 0 0 0 1 2 1 2 3 2 1 1 0 3 0 0 0 3 1 1 3 3 2 3 1 2 1 0\n",
-      " 1 0 1 3 0 0 0 0 3 3 3 0 3 3 3 1 2 2 0 1 2 1 2 3 2 1 0]\n"
-     ]
-    }
-   ],
-   "source": [
-    "# Fit SVM:\n",
-    "\n",
-    "X_train, X_val, y_train, y_val = train_test_split(X_pca, y, test_size = 0.2, random_state=4, shuffle = True)\n",
-    "\n",
-    "clf = SVC(kernel='rbf', probability=True)\n",
-    "clf.fit(X_train, y_train)\n",
-    "\n",
-    "print(accuracy_score(clf.predict(X_val), y_val))\n",
-    "print(X_val)\n",
-    "print(y_val)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "0.7380090497737557\n",
-      "{'C': 3, 'gamma': 0.01}\n",
-      "SVC(C=3, gamma=0.01)\n",
-      "0.8125\n"
-     ]
-    }
-   ],
-   "source": [
-    "# grid for C, gamma\n",
-    "C_grid = [0.001, 0.01, 0.1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
-    "gamma_grid = [0.001, 0.01, 0.1, 1, 10]\n",
-    "param_grid = {'C': C_grid, 'gamma': gamma_grid}\n",
-    "\n",
-    "grid = GridSearchCV(SVC(kernel='rbf'), param_grid, cv=5, scoring=\"accuracy\")\n",
-    "grid.fit(X_train, y_train)\n",
-    "\n",
-    "# Find the best model\n",
-    "print(grid.best_score_)\n",
-    "print(grid.best_params_)\n",
-    "print(grid.best_estimator_)\n",
-    "print(accuracy_score(grid.predict(X_val), y_val))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 23,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "0.8125\n"
-     ]
-    }
-   ],
-   "source": [
-    "# Optimal model\n",
-    "\n",
-    "clf = SVC(kernel='rbf', C=4, gamma=0.01, probability=True)\n",
-    "clf.fit(X_train, y_train)\n",
-    "\n",
-    "print(accuracy_score(clf.predict(X_val), y_val))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "0.7375\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "array([[9.91845216e-01, 9.24897482e-04, 4.93176202e-03, 2.29812446e-03],\n",
-       "       [6.01723317e-01, 8.92131018e-02, 1.83536877e-01, 1.25526704e-01],\n",
-       "       [9.92980326e-01, 4.06235741e-03, 2.13046542e-03, 8.26851594e-04],\n",
-       "       [3.36749364e-01, 1.30192826e-01, 3.15545229e-01, 2.17512580e-01],\n",
-       "       [9.89931681e-01, 6.12638061e-03, 1.50677120e-03, 2.43516759e-03],\n",
-       "       [1.39230069e-01, 4.47802074e-01, 2.20919925e-01, 1.92047932e-01],\n",
-       "       [9.98585140e-01, 9.17569360e-04, 1.75937182e-04, 3.21353035e-04],\n",
-       "       [8.72771142e-01, 2.36396678e-02, 7.07467544e-02, 3.28424360e-02],\n",
-       "       [9.97024364e-01, 2.13307247e-03, 5.99407714e-04, 2.43156147e-04],\n",
-       "       [9.57312269e-01, 3.64489882e-02, 1.52869112e-03, 4.71005179e-03],\n",
-       "       [9.63926751e-01, 2.23904373e-02, 5.25083368e-03, 8.43197798e-03],\n",
-       "       [9.76882097e-01, 1.80467754e-02, 2.91550876e-03, 2.15561864e-03],\n",
-       "       [9.86101027e-01, 5.93593359e-03, 5.77710502e-03, 2.18593488e-03],\n",
-       "       [3.81785673e-01, 2.11287208e-01, 3.47139524e-01, 5.97875941e-02],\n",
-       "       [9.99770590e-01, 9.72645628e-05, 7.14734949e-05, 6.06717729e-05],\n",
-       "       [9.99718208e-01, 9.59327529e-05, 4.68831010e-05, 1.38975725e-04],\n",
-       "       [9.98664350e-01, 8.23590644e-04, 2.19002749e-04, 2.93056633e-04],\n",
-       "       [9.95653630e-01, 2.95465890e-03, 1.04334232e-03, 3.48368483e-04],\n",
-       "       [9.70777165e-01, 1.19497560e-02, 1.38728808e-02, 3.40019859e-03],\n",
-       "       [9.95049690e-01, 3.12969093e-03, 8.45368621e-04, 9.75250113e-04],\n",
-       "       [9.74303099e-01, 1.32680969e-02, 8.50008213e-03, 3.92872185e-03],\n",
-       "       [8.42731463e-04, 9.90462808e-01, 6.33355769e-03, 2.36090249e-03],\n",
-       "       [4.79459926e-01, 4.52791677e-01, 4.74690463e-02, 2.02793511e-02],\n",
-       "       [2.91647861e-03, 4.64246852e-01, 3.83087536e-01, 1.49749134e-01],\n",
-       "       [8.16342174e-04, 9.51012328e-01, 4.22650314e-02, 5.90629837e-03],\n",
-       "       [5.96774800e-03, 9.60497995e-01, 2.10855410e-02, 1.24487156e-02],\n",
-       "       [7.99161377e-01, 1.79424971e-01, 1.43393369e-02, 7.07431535e-03],\n",
-       "       [1.04674077e-02, 4.40818554e-01, 3.00938632e-01, 2.47775407e-01],\n",
-       "       [3.25356778e-02, 9.10803927e-01, 1.83357856e-02, 3.83246099e-02],\n",
-       "       [1.64280091e-02, 8.00394778e-01, 1.47340994e-01, 3.58362194e-02],\n",
-       "       [1.55786197e-02, 3.99290574e-02, 8.58796140e-01, 8.56961829e-02],\n",
-       "       [3.95230322e-02, 7.43255541e-01, 1.68078144e-01, 4.91432823e-02],\n",
-       "       [1.31781934e-01, 5.34164147e-01, 2.51290486e-01, 8.27634332e-02],\n",
-       "       [3.81509290e-03, 9.16339760e-01, 3.83186127e-02, 4.15265341e-02],\n",
-       "       [1.61681433e-02, 9.31321871e-01, 2.21475379e-02, 3.03624483e-02],\n",
-       "       [1.44161658e-01, 5.92306368e-01, 1.34989241e-01, 1.28542733e-01],\n",
-       "       [7.82461250e-01, 1.58250377e-01, 3.69600606e-02, 2.23283128e-02],\n",
-       "       [5.60707146e-04, 7.02126528e-01, 1.78411209e-02, 2.79471644e-01],\n",
-       "       [8.31109051e-04, 9.92480069e-01, 2.32421286e-03, 4.36460947e-03],\n",
-       "       [1.56240559e-03, 8.36462907e-01, 2.31242202e-02, 1.38850468e-01],\n",
-       "       [1.32580055e-03, 9.38320075e-01, 4.96939046e-02, 1.06602203e-02],\n",
-       "       [1.38794668e-01, 1.54264304e-01, 5.59874444e-01, 1.47066585e-01],\n",
-       "       [7.50775780e-04, 8.21963737e-03, 2.92388248e-01, 6.98641339e-01],\n",
-       "       [8.02987949e-01, 1.22644045e-01, 5.59497407e-02, 1.84182649e-02],\n",
-       "       [2.41891759e-02, 1.47958054e-02, 7.67942672e-01, 1.93072347e-01],\n",
-       "       [1.62547897e-02, 2.22215753e-02, 7.78110676e-01, 1.83412959e-01],\n",
-       "       [5.71715525e-03, 6.20659434e-03, 6.24328654e-01, 3.63747596e-01],\n",
-       "       [9.45274448e-04, 5.58115112e-03, 8.61143225e-02, 9.07359252e-01],\n",
-       "       [1.62382684e-04, 8.57613719e-03, 6.63092127e-01, 3.28169354e-01],\n",
-       "       [6.07479713e-03, 5.65986706e-01, 9.75020184e-02, 3.30436478e-01],\n",
-       "       [1.71555533e-02, 4.30539952e-03, 6.56048108e-01, 3.22490940e-01],\n",
-       "       [4.16744375e-02, 4.57777442e-02, 3.67444591e-01, 5.45103227e-01],\n",
-       "       [1.89877253e-03, 2.98876223e-03, 6.94207088e-01, 3.00905377e-01],\n",
-       "       [3.75162390e-04, 8.48227425e-01, 1.02731287e-01, 4.86661259e-02],\n",
-       "       [7.84318955e-03, 3.57443159e-03, 7.85589067e-01, 2.02993312e-01],\n",
-       "       [1.01530506e-03, 8.68132661e-03, 4.96617768e-01, 4.93685600e-01],\n",
-       "       [5.34355379e-02, 4.57249806e-02, 8.52273837e-01, 4.85656449e-02],\n",
-       "       [1.12516521e-03, 1.02994876e-03, 6.86417759e-01, 3.11427127e-01],\n",
-       "       [1.58213796e-02, 1.00491368e-02, 7.33944360e-01, 2.40185123e-01],\n",
-       "       [7.62333824e-04, 6.80082275e-03, 5.48146346e-01, 4.44290497e-01],\n",
-       "       [4.36889729e-04, 6.33505542e-04, 4.40680010e-01, 5.58249595e-01],\n",
-       "       [1.18966250e-02, 1.35438849e-02, 8.29531765e-01, 1.45027725e-01],\n",
-       "       [8.07653263e-04, 2.67535604e-03, 3.94127389e-01, 6.02389601e-01],\n",
-       "       [5.05221228e-03, 1.02922343e-01, 6.51973559e-01, 2.40051886e-01],\n",
-       "       [4.78427472e-04, 1.06938816e-02, 1.93545465e-02, 9.69473144e-01],\n",
-       "       [3.34173601e-04, 4.43903929e-03, 4.61179231e-02, 9.49108864e-01],\n",
-       "       [2.37711828e-03, 1.70155915e-02, 4.96167715e-01, 4.84439576e-01],\n",
-       "       [2.55589009e-03, 6.80031325e-01, 7.81276301e-02, 2.39285155e-01],\n",
-       "       [1.32954460e-01, 3.26210712e-02, 6.26442374e-01, 2.07982095e-01],\n",
-       "       [1.88338641e-03, 5.54541569e-02, 2.11175008e-01, 7.31487449e-01],\n",
-       "       [6.17016230e-03, 4.84252773e-02, 3.99923817e-01, 5.45480743e-01],\n",
-       "       [9.80998496e-05, 8.05418966e-04, 8.17967510e-01, 1.81128972e-01],\n",
-       "       [3.05929977e-03, 8.53493126e-01, 9.29741568e-03, 1.34150158e-01],\n",
-       "       [2.01772300e-03, 3.98632319e-04, 2.43445335e-01, 7.54138310e-01],\n",
-       "       [5.38091290e-04, 7.81047201e-04, 5.55830003e-02, 9.43097861e-01],\n",
-       "       [2.05641079e-03, 1.17671840e-02, 3.50446042e-01, 6.35730363e-01],\n",
-       "       [1.30243287e-02, 1.17606642e-02, 2.68970213e-01, 7.06244794e-01],\n",
-       "       [1.23925453e-02, 2.28662674e-01, 5.87280033e-01, 1.71664748e-01],\n",
-       "       [1.28705627e-03, 1.99026369e-03, 9.06177034e-02, 9.06104977e-01],\n",
-       "       [6.18237178e-04, 3.63374936e-03, 2.45263457e-01, 7.50484556e-01]])"
-      ]
-     },
-     "execution_count": 24,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# Fit entire training sets\n",
-    "clf.fit(X_pca, y)\n",
-    "\n",
-    "print(accuracy_score(clf.predict(X_test_pca), y_test))\n",
-    "print(clf.predict_proba(X_test_pca))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([[9.91845216e-01, 9.24897482e-04, 4.93176202e-03, 2.29812446e-03],\n",
-       "       [6.01723317e-01, 8.92131018e-02, 1.83536877e-01, 1.25526704e-01],\n",
-       "       [9.92980326e-01, 4.06235741e-03, 2.13046542e-03, 8.26851594e-04],\n",
-       "       [3.36749364e-01, 1.30192826e-01, 3.15545229e-01, 2.17512580e-01],\n",
-       "       [9.89931681e-01, 6.12638061e-03, 1.50677120e-03, 2.43516759e-03],\n",
-       "       [1.39230069e-01, 4.47802074e-01, 2.20919925e-01, 1.92047932e-01],\n",
-       "       [9.98585140e-01, 9.17569360e-04, 1.75937182e-04, 3.21353035e-04],\n",
-       "       [8.72771142e-01, 2.36396678e-02, 7.07467544e-02, 3.28424360e-02],\n",
-       "       [9.97024364e-01, 2.13307247e-03, 5.99407714e-04, 2.43156147e-04],\n",
-       "       [9.57312269e-01, 3.64489882e-02, 1.52869112e-03, 4.71005179e-03],\n",
-       "       [9.63926751e-01, 2.23904373e-02, 5.25083368e-03, 8.43197798e-03],\n",
-       "       [9.76882097e-01, 1.80467754e-02, 2.91550876e-03, 2.15561864e-03],\n",
-       "       [9.86101027e-01, 5.93593359e-03, 5.77710502e-03, 2.18593488e-03],\n",
-       "       [3.81785673e-01, 2.11287208e-01, 3.47139524e-01, 5.97875941e-02],\n",
-       "       [9.99770590e-01, 9.72645628e-05, 7.14734949e-05, 6.06717729e-05],\n",
-       "       [9.99718208e-01, 9.59327529e-05, 4.68831010e-05, 1.38975725e-04],\n",
-       "       [9.98664350e-01, 8.23590644e-04, 2.19002749e-04, 2.93056633e-04],\n",
-       "       [9.95653630e-01, 2.95465890e-03, 1.04334232e-03, 3.48368483e-04],\n",
-       "       [9.70777165e-01, 1.19497560e-02, 1.38728808e-02, 3.40019859e-03],\n",
-       "       [9.95049690e-01, 3.12969093e-03, 8.45368621e-04, 9.75250113e-04],\n",
-       "       [9.74303099e-01, 1.32680969e-02, 8.50008213e-03, 3.92872185e-03],\n",
-       "       [8.42731463e-04, 9.90462808e-01, 6.33355769e-03, 2.36090249e-03],\n",
-       "       [4.79459926e-01, 4.52791677e-01, 4.74690463e-02, 2.02793511e-02],\n",
-       "       [2.91647861e-03, 4.64246852e-01, 3.83087536e-01, 1.49749134e-01],\n",
-       "       [8.16342174e-04, 9.51012328e-01, 4.22650314e-02, 5.90629837e-03],\n",
-       "       [5.96774800e-03, 9.60497995e-01, 2.10855410e-02, 1.24487156e-02],\n",
-       "       [7.99161377e-01, 1.79424971e-01, 1.43393369e-02, 7.07431535e-03],\n",
-       "       [1.04674077e-02, 4.40818554e-01, 3.00938632e-01, 2.47775407e-01],\n",
-       "       [3.25356778e-02, 9.10803927e-01, 1.83357856e-02, 3.83246099e-02],\n",
-       "       [1.64280091e-02, 8.00394778e-01, 1.47340994e-01, 3.58362194e-02],\n",
-       "       [1.55786197e-02, 3.99290574e-02, 8.58796140e-01, 8.56961829e-02],\n",
-       "       [3.95230322e-02, 7.43255541e-01, 1.68078144e-01, 4.91432823e-02],\n",
-       "       [1.31781934e-01, 5.34164147e-01, 2.51290486e-01, 8.27634332e-02],\n",
-       "       [3.81509290e-03, 9.16339760e-01, 3.83186127e-02, 4.15265341e-02],\n",
-       "       [1.61681433e-02, 9.31321871e-01, 2.21475379e-02, 3.03624483e-02],\n",
-       "       [1.44161658e-01, 5.92306368e-01, 1.34989241e-01, 1.28542733e-01],\n",
-       "       [7.82461250e-01, 1.58250377e-01, 3.69600606e-02, 2.23283128e-02],\n",
-       "       [5.60707146e-04, 7.02126528e-01, 1.78411209e-02, 2.79471644e-01],\n",
-       "       [8.31109051e-04, 9.92480069e-01, 2.32421286e-03, 4.36460947e-03],\n",
-       "       [1.56240559e-03, 8.36462907e-01, 2.31242202e-02, 1.38850468e-01],\n",
-       "       [1.32580055e-03, 9.38320075e-01, 4.96939046e-02, 1.06602203e-02],\n",
-       "       [1.38794668e-01, 1.54264304e-01, 5.59874444e-01, 1.47066585e-01],\n",
-       "       [7.50775780e-04, 8.21963737e-03, 2.92388248e-01, 6.98641339e-01],\n",
-       "       [8.02987949e-01, 1.22644045e-01, 5.59497407e-02, 1.84182649e-02],\n",
-       "       [2.41891759e-02, 1.47958054e-02, 7.67942672e-01, 1.93072347e-01],\n",
-       "       [1.62547897e-02, 2.22215753e-02, 7.78110676e-01, 1.83412959e-01],\n",
-       "       [5.71715525e-03, 6.20659434e-03, 6.24328654e-01, 3.63747596e-01],\n",
-       "       [9.45274448e-04, 5.58115112e-03, 8.61143225e-02, 9.07359252e-01],\n",
-       "       [1.62382684e-04, 8.57613719e-03, 6.63092127e-01, 3.28169354e-01],\n",
-       "       [6.07479713e-03, 5.65986706e-01, 9.75020184e-02, 3.30436478e-01],\n",
-       "       [1.71555533e-02, 4.30539952e-03, 6.56048108e-01, 3.22490940e-01],\n",
-       "       [4.16744375e-02, 4.57777442e-02, 3.67444591e-01, 5.45103227e-01],\n",
-       "       [1.89877253e-03, 2.98876223e-03, 6.94207088e-01, 3.00905377e-01],\n",
-       "       [3.75162390e-04, 8.48227425e-01, 1.02731287e-01, 4.86661259e-02],\n",
-       "       [7.84318955e-03, 3.57443159e-03, 7.85589067e-01, 2.02993312e-01],\n",
-       "       [1.01530506e-03, 8.68132661e-03, 4.96617768e-01, 4.93685600e-01],\n",
-       "       [5.34355379e-02, 4.57249806e-02, 8.52273837e-01, 4.85656449e-02],\n",
-       "       [1.12516521e-03, 1.02994876e-03, 6.86417759e-01, 3.11427127e-01],\n",
-       "       [1.58213796e-02, 1.00491368e-02, 7.33944360e-01, 2.40185123e-01],\n",
-       "       [7.62333824e-04, 6.80082275e-03, 5.48146346e-01, 4.44290497e-01],\n",
-       "       [4.36889729e-04, 6.33505542e-04, 4.40680010e-01, 5.58249595e-01],\n",
-       "       [1.18966250e-02, 1.35438849e-02, 8.29531765e-01, 1.45027725e-01],\n",
-       "       [8.07653263e-04, 2.67535604e-03, 3.94127389e-01, 6.02389601e-01],\n",
-       "       [5.05221228e-03, 1.02922343e-01, 6.51973559e-01, 2.40051886e-01],\n",
-       "       [4.78427472e-04, 1.06938816e-02, 1.93545465e-02, 9.69473144e-01],\n",
-       "       [3.34173601e-04, 4.43903929e-03, 4.61179231e-02, 9.49108864e-01],\n",
-       "       [2.37711828e-03, 1.70155915e-02, 4.96167715e-01, 4.84439576e-01],\n",
-       "       [2.55589009e-03, 6.80031325e-01, 7.81276301e-02, 2.39285155e-01],\n",
-       "       [1.32954460e-01, 3.26210712e-02, 6.26442374e-01, 2.07982095e-01],\n",
-       "       [1.88338641e-03, 5.54541569e-02, 2.11175008e-01, 7.31487449e-01],\n",
-       "       [6.17016230e-03, 4.84252773e-02, 3.99923817e-01, 5.45480743e-01],\n",
-       "       [9.80998496e-05, 8.05418966e-04, 8.17967510e-01, 1.81128972e-01],\n",
-       "       [3.05929977e-03, 8.53493126e-01, 9.29741568e-03, 1.34150158e-01],\n",
-       "       [2.01772300e-03, 3.98632319e-04, 2.43445335e-01, 7.54138310e-01],\n",
-       "       [5.38091290e-04, 7.81047201e-04, 5.55830003e-02, 9.43097861e-01],\n",
-       "       [2.05641079e-03, 1.17671840e-02, 3.50446042e-01, 6.35730363e-01],\n",
-       "       [1.30243287e-02, 1.17606642e-02, 2.68970213e-01, 7.06244794e-01],\n",
-       "       [1.23925453e-02, 2.28662674e-01, 5.87280033e-01, 1.71664748e-01],\n",
-       "       [1.28705627e-03, 1.99026369e-03, 9.06177034e-02, 9.06104977e-01],\n",
-       "       [6.18237178e-04, 3.63374936e-03, 2.45263457e-01, 7.50484556e-01]])"
-      ]
-     },
-     "execution_count": 25,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "svc_path = BASE_PATH / \"out\" / \"SVC\"/ \"clf.pickle\"\n",
-    "svc_path.parent.mkdir(parents=True, exist_ok=True)\n",
-    "\n",
-    "with open(svc_path, \"wb\") as file:\n",
-    "    pickle.dump(clf, file)\n",
-    "    \n",
-    "with open(svc_path, \"rb\") as file:\n",
-    "    loaded = pickle.load(file)\n",
-    "    \n",
-    "loaded.predict_proba(X_test_pca)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 26,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "                        genre       pred1       pred2       pred3       pred4\n",
-      "filename                                                                     \n",
-      "classical_24.mp3    classical   classical         pop        rock  electronic\n",
-      "classical_26.mp3    classical   classical         pop        rock  electronic\n",
-      "classical_34.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_37.mp3    classical         pop   classical        rock  electronic\n",
-      "classical_39.mp3    classical   classical  electronic        rock         pop\n",
-      "classical_40.mp3    classical  electronic         pop        rock   classical\n",
-      "classical_44.mp3    classical   classical  electronic        rock         pop\n",
-      "classical_49.mp3    classical   classical         pop        rock  electronic\n",
-      "classical_54.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_55.mp3    classical   classical  electronic        rock         pop\n",
-      "classical_59.mp3    classical   classical  electronic        rock         pop\n",
-      "classical_60.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_65.mp3    classical   classical         pop  electronic        rock\n",
-      "classical_68.mp3    classical         pop   classical  electronic        rock\n",
-      "classical_7.mp3     classical   classical         pop  electronic        rock\n",
-      "classical_75.mp3    classical   classical        rock  electronic         pop\n",
-      "classical_79.mp3    classical   classical  electronic        rock         pop\n",
-      "classical_80.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_87.mp3    classical   classical         pop  electronic        rock\n",
-      "classical_88.mp3    classical   classical  electronic         pop        rock\n",
-      "classical_91.mp3    classical   classical  electronic         pop        rock\n",
-      "electronic_1.mp3   electronic  electronic         pop        rock   classical\n",
-      "electronic_12.mp3  electronic  electronic   classical         pop        rock\n",
-      "electronic_13.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_15.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_16.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_17.mp3  electronic   classical  electronic         pop        rock\n",
-      "electronic_21.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_25.mp3  electronic  electronic        rock   classical         pop\n",
-      "electronic_27.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_36.mp3  electronic         pop        rock  electronic   classical\n",
-      "electronic_37.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_38.mp3  electronic  electronic         pop   classical        rock\n",
-      "electronic_4.mp3   electronic  electronic         pop        rock   classical\n",
-      "electronic_44.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_45.mp3  electronic  electronic         pop   classical        rock\n",
-      "electronic_47.mp3  electronic   classical  electronic         pop        rock\n",
-      "electronic_54.mp3  electronic  electronic        rock         pop   classical\n",
-      "electronic_79.mp3  electronic  electronic         pop        rock   classical\n",
-      "electronic_80.mp3  electronic  electronic        rock         pop   classical\n",
-      "electronic_88.mp3  electronic  electronic         pop        rock   classical\n",
-      "pop_1.mp3                 pop         pop  electronic        rock   classical\n",
-      "pop_21.mp3                pop        rock         pop  electronic   classical\n",
-      "pop_24.mp3                pop   classical  electronic         pop        rock\n",
-      "pop_27.mp3                pop         pop        rock   classical  electronic\n",
-      "pop_32.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_36.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_37.mp3                pop        rock         pop  electronic   classical\n",
-      "pop_44.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_45.mp3                pop  electronic        rock         pop   classical\n",
-      "pop_56.mp3                pop         pop        rock   classical  electronic\n",
-      "pop_6.mp3                 pop        rock         pop  electronic   classical\n",
-      "pop_64.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_71.mp3                pop  electronic         pop        rock   classical\n",
-      "pop_74.mp3                pop         pop        rock   classical  electronic\n",
-      "pop_75.mp3                pop        rock         pop  electronic   classical\n",
-      "pop_86.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_89.mp3                pop         pop        rock   classical  electronic\n",
-      "pop_90.mp3                pop         pop        rock   classical  electronic\n",
-      "pop_91.mp3                pop         pop        rock  electronic   classical\n",
-      "pop_94.mp3                pop        rock         pop  electronic   classical\n",
-      "pop_99.mp3                pop         pop        rock  electronic   classical\n",
-      "rock_14.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_19.mp3              rock         pop        rock  electronic   classical\n",
-      "rock_22.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_23.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_27.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_30.mp3              rock  electronic        rock         pop   classical\n",
-      "rock_33.mp3              rock         pop        rock   classical  electronic\n",
-      "rock_35.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_45.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_48.mp3              rock         pop        rock  electronic   classical\n",
-      "rock_50.mp3              rock  electronic        rock         pop   classical\n",
-      "rock_54.mp3              rock        rock         pop   classical  electronic\n",
-      "rock_63.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_65.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_68.mp3              rock        rock         pop   classical  electronic\n",
-      "rock_73.mp3              rock         pop  electronic        rock   classical\n",
-      "rock_76.mp3              rock        rock         pop  electronic   classical\n",
-      "rock_89.mp3              rock        rock         pop  electronic   classical\n"
-     ]
-    }
-   ],
-   "source": [
-    "# Fit the entire training sets\n",
-    "\n",
-    "def convert_to_labels(preds, i2c, k=3):\n",
-    "    ans = []\n",
-    "    ids = []\n",
-    "    for p in preds:\n",
-    "        idx = np.argsort(p)[::-1]\n",
-    "        ids.append([i for i in idx[:k]])\n",
-    "        ans.append([i2c[i] for i in idx[:k]])\n",
-    "\n",
-    "    return ans, ids\n",
-    "\n",
-    "clf.fit(X_pca, y)\n",
-    "prediction_lists, percentage_lists = convert_to_labels(clf.predict_proba(X_test_pca), index2classname, k=4)\n",
-    "\n",
-    "# # Write to outputs\n",
-    "subm = pd.DataFrame(index=test.index)\n",
-    "subm['genre'] = test.genre.values\n",
-    "subm['pred1'] = [prediction_list[0] for prediction_list in prediction_lists]\n",
-    "subm['pred2'] = [prediction_list[1] for prediction_list in prediction_lists]\n",
-    "subm['pred3'] = [prediction_list[2] for prediction_list in prediction_lists]\n",
-    "subm['pred4'] = [prediction_list[3] for prediction_list in prediction_lists]\n",
-    "# subm.to_csv('submission.csv', index=False)\n",
-    "\n",
-    "pd.set_option('display.max_rows', None)\n",
-    "print(subm)\n",
-    "pd.reset_option('display.max_rows')"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": ".venv",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.10.9"
-  },
-  "orig_nbformat": 4,
-  "vscode": {
-   "interpreter": {
-    "hash": "e67b2b89f4e741058e1552d7f9f0ffaaf2528c880404ac6e8c3c1b8dbbdff8e0"
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/notebooks/main.ipynb b/notebooks/main.ipynb
index 2a20716d1f73bfd468332dab4876eaca1df58e04..d20532b244283f4ac5746627351e2692260b93f4 100644
--- a/notebooks/main.ipynb
+++ b/notebooks/main.ipynb
@@ -3,8 +3,10 @@
   {
    "cell_type": "markdown",
    "source": [
-    "#\n",
-    "\n"
+    "# Main Notebook\n",
+    "Executes all research notebooks one by one and initializes needed connectors and nbconfig.\n",
+    "\n",
+    "The entities created by one notebook are passed to the next notebook as dependencies, while moving the entites location. This way the output entities are separated from the input entities."
    ],
    "metadata": {
     "collapsed": false
@@ -13,89 +15,437 @@
   {
    "cell_type": "code",
    "execution_count": 1,
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "test\n"
-     ]
+   "metadata": {
+    "collapsed": true,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:19:32.437151147Z",
+     "start_time": "2023-10-10T20:19:32.416560426Z"
     }
-   ],
+   },
+   "outputs": [],
    "source": [
-    "%run test.ipynb\n",
-    "# from ipynb.fs.full.test import testing\n",
-    "# testing()"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
+    "%load_ext autoreload\n",
+    "%autoreload 2"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:19:33.208604535Z",
+     "start_time": "2023-10-10T20:19:32.416869981Z"
+    }
+   },
    "outputs": [],
    "source": [
-    "%run 1_audio_files.ipynb"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
+    "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",
+    "from fairnb.nb_config import NbConfig\n",
+    "from fairnb.executor import Executor\n",
+    "from fairnb.util import Util"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": false,
+    "lines_to_next_cell": 2,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:19:33.338327558Z",
+     "start_time": "2023-10-10T20:19:33.211495550Z"
+    }
+   },
    "outputs": [],
    "source": [
-    "%run 2_generate_features.ipynb"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
+    "logging.basicConfig(\n",
+    "    level=logging.INFO\n",
+    ")\n",
+    "\n",
+    "ONLY_LOCAL = False\n",
+    "\n",
+    "# experiment executor setup\n",
+    "executor = Executor()\n",
+    "util = Util.get_instance()              # util caches loaded credentials -> via Singleton\n",
+    "connector = util.get_dbrepo_connector(CONFIG_PATH / \"dbrepo_config.yml\") if not ONLY_LOCAL else None\n",
+    "invenio_connector = util.get_invenio_connector(CONFIG_PATH / \"invenio_config.yml\") if not ONLY_LOCAL else None\n",
+    "\n",
+    "NOTEBOOK_PATH = BASE_PATH / \"notebooks\"\n",
+    "LOCAL_PATH = BASE_PATH / \"tmp\""
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [
-    "%run 3_aggregate_features.ipynb"
-   ],
+   "execution_count": 5,
    "metadata": {
-    "collapsed": false
-   }
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:22:19.285948692Z",
+     "start_time": "2023-10-10T20:19:33.368231905Z"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Input Notebook:  /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/1_audio_files.ipynb\n",
+      "INFO:papermill:Output Notebook: /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/1_audio_files.ipynb\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": "Executing:   0%|          | 0/7 [00:00<?, ?cell/s]",
+      "application/vnd.jupyter.widget-view+json": {
+       "version_major": 2,
+       "version_minor": 0,
+       "model_id": "51fe3c161031485d92d9cd7d23edc4d3"
+      }
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Executing notebook with kernel: python3\n",
+      "INFO:fairnb.api.invenio:Picked up 1 files\n",
+      "INFO:fairnb.api.invenio:Uploading 1 to https://test.researchdata.tuwien.ac.at\n",
+      "INFO:fairnb.api.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/1_audio_files/output/emotifymusic.tar.gz as emotifymusic.tar.gz\n",
+      "INFO:fairnb.api.invenio:Finished upload  of emotifymusic.tar.gz\n"
+     ]
+    }
+   ],
+   "source": [
+    "# ------------- Convert Audio Files for Invenio ----\n",
+    "\n",
+    "metadata = yaml.safe_load(open(RESOURCE_PATH / \"1_audio_files\" / \"record_metadata.yml\", \"r\"))\n",
+    "\n",
+    "nb_config_audio_files = NbConfig(\n",
+    "    nb_location=NOTEBOOK_PATH / \"1_audio_files.ipynb\",\n",
+    "    entities=[\n",
+    "        audio_files_entity := InvenioEntity.new(\n",
+    "            name = \"audio_tar\",\n",
+    "            description = \"Raw music files\",\n",
+    "            location=LOCAL_PATH / \"1_audio_files\" / \"output\" / \"emotifymusic.tar.gz\",\n",
+    "            dbrepo_connector=connector,\n",
+    "            invenio_connector=invenio_connector,\n",
+    "            record_metadata=metadata,\n",
+    "            type=\"audio_tar\"\n",
+    "        )\n",
+    "    ],\n",
+    "    dependencies=[]\n",
+    ")\n",
+    "\n",
+    "executor.execute(nb_config_audio_files, only_local=ONLY_LOCAL)"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [
-    "%run 4_split.ipynb"
-   ],
+   "execution_count": 6,
    "metadata": {
-    "collapsed": false
-   }
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:29:37.869662601Z",
+     "start_time": "2023-10-10T20:22:19.292012183Z"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Input Notebook:  /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/2_generate_features.ipynb\n",
+      "INFO:papermill:Output Notebook: /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/2_generate_features.ipynb\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": "Executing:   0%|          | 0/9 [00:00<?, ?cell/s]",
+      "application/vnd.jupyter.widget-view+json": {
+       "version_major": 2,
+       "version_minor": 0,
+       "model_id": "1542f4273cb540f391061731ae294f62"
+      }
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Executing notebook with kernel: python3\n",
+      "WARNING:fairnb.api.dbrepo:Re-authenticating due to almost expired token\n"
+     ]
+    }
+   ],
+   "source": [
+    "# ------------- Raw feature generation -------------\n",
+    "nb_config_generate_features = NbConfig(\n",
+    "    nb_location=NOTEBOOK_PATH / \"2_generate_features.ipynb\",\n",
+    "    entities=[\n",
+    "        raw_features_entity := DbRepoEntity.new(\n",
+    "            name=\"raw_features\",\n",
+    "            description=\"Raw features of audio files.\",\n",
+    "            location=LOCAL_PATH / \"2_generate_features\" / \"output\" / \"raw_features.csv\",\n",
+    "            dbrepo_connector=connector,\n",
+    "            table_name=\"raw_features\",\n",
+    "            table_description=\"desc\",\n",
+    "            type=\"raw_features\"\n",
+    "        )\n",
+    "    ],\n",
+    "    dependencies=[\n",
+    "        audio_files_entity.copy_to_location(LOCAL_PATH / \"2_generate_features\" / \"input\" / \"emotifymusic.tar.gz\")\n",
+    "    ]\n",
+    ")\n",
+    "\n",
+    "executor.execute(nb_config_generate_features, only_local=ONLY_LOCAL)\n"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [
-    "%run 5_ml_model.ipynb"
-   ],
+   "execution_count": 7,
    "metadata": {
-    "collapsed": false
-   }
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:29:51.551709980Z",
+     "start_time": "2023-10-10T20:29:37.875148186Z"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Input Notebook:  /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/3_aggregate_features.ipynb\n",
+      "INFO:papermill:Output Notebook: /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/3_aggregate_features.ipynb\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": "Executing:   0%|          | 0/7 [00:00<?, ?cell/s]",
+      "application/vnd.jupyter.widget-view+json": {
+       "version_major": 2,
+       "version_minor": 0,
+       "model_id": "3a3d98af87954445acbde5eb85faaba0"
+      }
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Executing notebook with kernel: python3\n"
+     ]
+    }
+   ],
+   "source": [
+    "# ------------- Feature Aggregation ----------------\n",
+    "if \"raw_features_entity\" not in globals():\n",
+    "    raw_features_entity = DbRepoEntity.new(\n",
+    "        location=LOCAL_PATH / \"2_generate_features\" / \"output\" / \"raw_features.csv\",\n",
+    "        dbrepo_connector=connector,\n",
+    "        name=\"raw_features\",\n",
+    "        description=\"Raw features of audio files.\",\n",
+    "        table_name=\"raw_features\",\n",
+    "        table_description=\"desc\",\n",
+    "        type=\"raw_features\"\n",
+    "    )\n",
+    "\n",
+    "nb_config_aggregate_features = NbConfig(\n",
+    "    nb_location=NOTEBOOK_PATH / \"3_aggregate_features.ipynb\",\n",
+    "    entities=[\n",
+    "        features_entity := DbRepoEntity.new(\n",
+    "            name=\"aggregated_features\",\n",
+    "            description=\"Aggregated features of audio files.\",\n",
+    "            location=LOCAL_PATH / \"3_aggregate_features\" / \"output\" / \"features.csv\",\n",
+    "            dbrepo_connector=connector,\n",
+    "            table_name=\"aggregated_features\",\n",
+    "            table_description=\"Aggregated features of audio files\",\n",
+    "            type=\"aggregated_features\"\n",
+    "        )\n",
+    "    ],\n",
+    "    dependencies=[\n",
+    "        raw_features_entity.copy_to_location(LOCAL_PATH / \"3_aggregate_features\" / \"input\" / \"raw_features.csv\")\n",
+    "    ]\n",
+    ")\n",
+    "\n",
+    "executor.execute(nb_config_aggregate_features, only_local=ONLY_LOCAL)"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [
-    "%run 6_report.ipynb"
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:29:55.469694709Z",
+     "start_time": "2023-10-10T20:29:51.551964304Z"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Input Notebook:  /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/4_split.ipynb\n",
+      "INFO:papermill:Output Notebook: /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/4_split.ipynb\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": "Executing:   0%|          | 0/8 [00:00<?, ?cell/s]",
+      "application/vnd.jupyter.widget-view+json": {
+       "version_major": 2,
+       "version_minor": 0,
+       "model_id": "340a4bbf08d144aba5521599be170809"
+      }
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Executing notebook with kernel: python3\n"
+     ]
+    }
    ],
+   "source": [
+    "# Load features from disk if not already in memory\n",
+    "if \"features_entity\" not in globals():\n",
+    "    features_entity = DbRepoEntity.new(\n",
+    "        location=LOCAL_PATH / \"3_aggregate_features\" / \"output\" / \"features.csv\",\n",
+    "        dbrepo_connector=connector,\n",
+    "        name=\"features\",\n",
+    "        description=\"Aggregated features of audio files.\",\n",
+    "        table_name=\"aggregated_features\",\n",
+    "        table_description=\"Aggregated features of audio files\",\n",
+    "        type=\"aggregated_features\"\n",
+    "    )\n",
+    "\n",
+    "    # or load directly from dbrepo:\n",
+    "    # features_entity = DbRepoEntity.existing(\n",
+    "    #     id=1,\n",
+    "    #     dbrepo_connector=connector,\n",
+    "    #     location=LOCAL_PATH / \"3_aggregate_features\" / \"output\" / \"features.csv\"\n",
+    "    # )\n",
+    "\n",
+    "# -------------- SPLITTING -------------------------\n",
+    "nb_config_splits = NbConfig(\n",
+    "    nb_location=NOTEBOOK_PATH / \"4_split.ipynb\",\n",
+    "    entities=[\n",
+    "        split_entity := DbRepoEntity.new(\n",
+    "            name=\"splits\",\n",
+    "            description=\"Splits of aggregated data into testing and training subbsets.\",\n",
+    "            table_name=\"splits_table\",\n",
+    "            table_description=\"Splits of aggregated data into testing and training subbsets.\",\n",
+    "            location=LOCAL_PATH / \"4_split\" / \"output\" / \"split.csv\",  # location where script  saves generated entity\n",
+    "            dbrepo_connector=connector,\n",
+    "            type=\"split\",\n",
+    "        )\n",
+    "    ],\n",
+    "    dependencies=[\n",
+    "        features_entity.copy_to_location(LOCAL_PATH / \"4_split\" / \"input\" / \"features.csv\")\n",
+    "    ]\n",
+    ")\n",
+    "\n",
+    "# generate splits\n",
+    "executor.execute(nb_config_splits, only_local=ONLY_LOCAL)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
    "metadata": {
-    "collapsed": false
-   }
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:30:03.919914535Z",
+     "start_time": "2023-10-10T20:29:55.479897609Z"
+    }
+   },
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Input Notebook:  /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/5_ml_model.ipynb\n",
+      "INFO:papermill:Output Notebook: /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/notebooks/5_ml_model.ipynb\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": "Executing:   0%|          | 0/20 [00:00<?, ?cell/s]",
+      "application/vnd.jupyter.widget-view+json": {
+       "version_major": 2,
+       "version_minor": 0,
+       "model_id": "d53f45cbcb33427eafa4c7c174b9dd65"
+      }
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:papermill:Executing notebook with kernel: python3\n",
+      "INFO:fairnb.api.invenio:Picked up 1 files\n",
+      "INFO:fairnb.api.invenio:Uploading 1 to https://test.researchdata.tuwien.ac.at\n",
+      "INFO:fairnb.api.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/5_ml_model/output/ml_model.pickle as ml_model.pickle\n",
+      "INFO:fairnb.api.invenio:Finished upload  of ml_model.pickle\n"
+     ]
+    }
+   ],
+   "source": [
+    "# -------------- ML ------------------------------\n",
+    "with open(RESOURCE_PATH / \"5_ml_model\" / \"ml_model_entity_metadata.yml\", \"r\") as file:\n",
+    "    metadata = yaml.safe_load(file)\n",
+    "\n",
+    "\n",
+    "nb_config_ml = NbConfig(\n",
+    "    nb_location=NOTEBOOK_PATH / \"5_ml_model.ipynb\",\n",
+    "    entities=[\n",
+    "        ml_model_entity := InvenioEntity.new(\n",
+    "            name=\"ml_model\",\n",
+    "            description=\"An ml model representing the trained clf\",\n",
+    "            location=LOCAL_PATH / \"5_ml_model\" / \"output\" / \"ml_model.pickle\",\n",
+    "            dbrepo_connector=connector,\n",
+    "            invenio_connector=invenio_connector,\n",
+    "            record_metadata=metadata,\n",
+    "            type=\"clf\"\n",
+    "        ),\n",
+    "        test_result_entity := DbRepoEntity.new(\n",
+    "            name=\"test_result_entity\",\n",
+    "            description=\"Result of tests on ml model\",\n",
+    "            table_name=\"test_result\",\n",
+    "            table_description=\"Test results of genre prediction on ml model\",\n",
+    "            location=LOCAL_PATH / \"5_ml_model\" / \"output\" / \"test_result.csv\",\n",
+    "            dbrepo_connector=connector,\n",
+    "            type=\"submission\"\n",
+    "        )\n",
+    "    ],\n",
+    "    dependencies=[\n",
+    "        split_entity.copy_to_location(LOCAL_PATH / \"5_ml_model\" / \"input\" / \"split.csv\"),     # pass in old entity as new dependency\n",
+    "        features_entity.copy_to_location(LOCAL_PATH / \"5_ml_model\" / \"input\" / \"features.csv\")\n",
+    "    ]\n",
+    ")\n",
+    "\n",
+    "# run ml\n",
+    "executor.execute(nb_config_ml, only_local=ONLY_LOCAL)"
+   ]
   }
  ],
  "metadata": {
diff --git a/notebooks/mir.ipynb b/notebooks/mir.ipynb
deleted file mode 100644
index 4c7ef7b942b3a275e45f088014bed3ced3a7df8e..0000000000000000000000000000000000000000
--- a/notebooks/mir.ipynb
+++ /dev/null
@@ -1,362 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import re\n",
-    "import requests as rq\n",
-    "import yaml\n",
-    "import os\n",
-    "import pathlib\n",
-    "import json\n",
-    "import concurrent.futures\n",
-    "from root import BASE_PATH\n",
-    "\n",
-    "\n",
-    "RESPONSE_PATH = BASE_PATH / \"out\" / \"responses\"\n",
-    "RESPONSE_PATH.mkdir(exist_ok=True, parents=True)\n",
-    "(BASE_PATH / \"out\" / \"music\").mkdir(exist_ok=True, parents=True)\n",
-    "\n",
-    "with open(BASE_PATH / \"config\" / \"config.yml\", \"r\") as file:\n",
-    "    config = yaml.safe_load(file)\n",
-    "\n",
-    "\n",
-    "host = config.get(\"host\") or \"https://test.researchdata.tuwien.ac.at\"\n",
-    "\n",
-    "# Require token from config file\n",
-    "token = config.get(\"credentials\").get(\"token\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Find all files located in the data directory"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "\n",
-    "pattern = \"(.*/[a-zA-z0-9_-]+\\\\.mp3|.wav)\"\n",
-    "\n",
-    "filepaths = [path.absolute() for path in sorted(BASE_PATH.glob('data/**/*.*')) \n",
-    "                if re.match(pattern, path.as_posix())]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Setup Request header to use authentication token"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "headers= {\n",
-    "    \"Authorization\": f\"Bearer {token}\"\n",
-    "}"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Load provided Metadata"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "metadata: dict[str, dict]\n",
-    "\n",
-    "with open(BASE_PATH / \"resource\" / \"record_metadata.yml\", \"r\") as file:\n",
-    "    metadata = yaml.safe_load(file)\n",
-    "    \n",
-    "    \n",
-    "metadata.get(\"metadata\")\n",
-    "\n",
-    "print(metadata)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Create a record draft with provided metadata"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "response = rq.post(\n",
-    "        f\"{host}/api/records\", \n",
-    "        data = json.dumps(metadata), \n",
-    "        headers=headers,\n",
-    "        \n",
-    "    )\n",
-    "print(response)\n",
-    "\n",
-    "\n",
-    "with open(RESPONSE_PATH / \"draft_response.yml\", \"w\") as f:\n",
-    "    yaml.dump(response.json(), f) \n",
-    "\n",
-    "print(response.json())\n",
-    "record_id = response.json().get(\"id\")\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def create_file_draft(upload_name: str):\n",
-    "    \"\"\" Create a file draft for a later upload of file data\n",
-    "    \"\"\"\n",
-    "    return rq.post(\n",
-    "            f\"{host}/api/records/{record_id}/draft/files\",\n",
-    "            json=[\n",
-    "                {\"key\": upload_name}\n",
-    "            ],\n",
-    "            headers=headers\n",
-    "        )"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def upload_data(filepath: pathlib.Path, upload_name: str):\n",
-    "    \"\"\" Upload data for an already created draft file\n",
-    "    \"\"\"\n",
-    "    with open(filepath, mode='rb') as f:\n",
-    "        return rq.put(\n",
-    "                f\"{host}/api/records/{record_id}/draft/files/{upload_name}/content\", \n",
-    "                data=f.read(),\n",
-    "                headers=headers\n",
-    "            )"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def commit_file(upload_name: str):\n",
-    "    \"\"\" Commits a file where all data was uploaded successfully\n",
-    "    \"\"\"\n",
-    "    return rq.post(\n",
-    "            f\"{host}/api/records/{record_id}/draft/files/{upload_name}/commit\",\n",
-    "            headers=headers\n",
-    "        )"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def upload_file(filepath: pathlib.Path, upload_name: str):\n",
-    "    \"\"\" Creates a draft file, uploads the data and commits that file\n",
-    "    \"\"\"\n",
-    "    response_draft = create_file_draft(upload_name)\n",
-    "    response_data = upload_data(filepath, upload_name)\n",
-    "    response_commit = commit_file(upload_name)\n",
-    "    \n",
-    "    responses = {\n",
-    "        \"draft\": response_draft.json(),\n",
-    "        \"data\": response_data.json(),\n",
-    "        \"commit\": response_commit.json(),\n",
-    "    }\n",
-    "    \n",
-    "    with open(BASE_PATH / \"out\" / \"responses\" / f\"upload_{upload_name}.yml\", \"w\") as file:\n",
-    "        yaml.safe_dump(responses, file)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Upload files in a multithreaded manner to speedup upload\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "args = [(filepath, \"_\".join(filepath.parts[-2:])) \n",
-    "                            for filepath in filepaths]\n",
-    "\n",
-    "with concurrent.futures.ThreadPoolExecutor(10) as executor:\n",
-    "    executor.map(lambda p: upload_file(*p), args)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Publish\n",
-    "\n",
-    "response = rq.post(\n",
-    "        f\"{host}/api/records/{record_id}/draft/actions/publish\",\n",
-    "        headers=headers\n",
-    "    ).json()\n",
-    "print(response)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "print(dro_url := response[\"links\"][\"self_doi\"])"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Download data:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "dro_url = \"https://test.researchdata.tuwien.ac.at/records/h6d02-vmm08\"\n",
-    "record_number = dro_url.split('/')[-1]\n",
-    "filename = \"electronic_1.mp3\"\n",
-    "\n",
-    "# get record description\n",
-    "response = rq.get(\n",
-    "    f\"{host}/api/records/{record_number}\",\n",
-    "    headers=headers,\n",
-    ")\n",
-    "\n",
-    "# get list of files \n",
-    "response = rq.get(\n",
-    "    f\"{host}/api/records/{record_number}/files\",\n",
-    "    headers=headers,\n",
-    ")\n",
-    "\n",
-    "# get metadata of file\n",
-    "response = rq.get(\n",
-    "    f\"{host}/api/records/{record_number}/files/{filename}\",\n",
-    "    headers=headers\n",
-    ")\n",
-    "\n",
-    "# download a file\n",
-    "response = rq.get(\n",
-    "    f\"{host}/api/records/{record_number}/files/{filename}/content\",\n",
-    "    headers=headers\n",
-    ")\n",
-    "\n",
-    "\n",
-    "with open(BASE_PATH / \"out\" / \"music\" / filename, \"wb\") as file:\n",
-    "    file.write(response.content)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Download all Files"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "def download_file(record_id: str, filename: str, out_path: pathlib.Path):\n",
-    "    response = rq.get(\n",
-    "        f\"{host}/api/records/{record_id}/files/{filename}/content\",\n",
-    "        headers=headers\n",
-    "    )\n",
-    "    \n",
-    "    out_path.parent.mkdir(exist_ok=True, parents=True)\n",
-    "    \n",
-    "    with open(out_path, \"wb\") as file:\n",
-    "        file.write(response.content)\n",
-    "\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# get filenames\n",
-    "response = rq.get(\n",
-    "    f\"{host}/api/records/{record_number}/files\",\n",
-    "    headers=headers,\n",
-    ")\n",
-    "\n",
-    "# download files\n",
-    "filenames = sorted([entry.get('key') for entry in response.json().get('entries')])\n",
-    "args = [(record_number, filename, BASE_PATH / 'out' / 'music' / filename.split(\"_\")[0] / filename.split(\"_\")[1])\n",
-    "        for filename in filenames]\n",
-    "\n",
-    "with concurrent.futures.ThreadPoolExecutor(10) as executor:\n",
-    "    executor.map(lambda p: download_file(*p), args)\n",
-    "    "
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.10.8 (main, Nov 22 2022, 16:07:51) [GCC 12.2.0]"
-  },
-  "vscode": {
-   "interpreter": {
-    "hash": "bbdee169b059bb18a50f2776b13bd9f52e966fe858de13011c8689bad2819b82"
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/notebooks/misc.ipynb b/notebooks/misc.ipynb
deleted file mode 100644
index 637a414c6b7e6abe6737507c2b8ed33218d66a57..0000000000000000000000000000000000000000
--- a/notebooks/misc.ipynb
+++ /dev/null
@@ -1,544 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "collapsed": true
-   },
-   "outputs": [],
-   "source": [
-    "from pathlib import Path\n",
-    "\n",
-    "import yaml\n",
-    "# poc for reproducibility as wrapper\n",
-    "%load_ext autoreload\n",
-    "%autoreload 2"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "outputs": [],
-   "source": [
-    "from definitions import CONFIG_PATH, BASE_PATH, RESOURCE_PATH\n",
-    "from dbrepo_ismir.artefact import ArtefactMeta, RepositumArtefact, NbConfig, InvenioArtefact, DbRepoArtefact\n",
-    "from dbrepo_ismir.reproducer import Reproducer\n",
-    "from dbrepo_ismir.util import Util"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "outputs": [],
-   "source": [
-    "\n",
-    "# experiment executor setup\n",
-    "rep_config = None\n",
-    "reproducer = Reproducer(rep_config)\n",
-    "util = Util.get_instance()              # util caches loaded credentials -> via Singleton\n",
-    "connector = util.get_dbrepo_connector(CONFIG_PATH)\n",
-    "\n",
-    "\n",
-    "NOTEBOOK_PATH = BASE_PATH / \"notebooks\"\n",
-    "LOCAL_PATH = BASE_PATH / \"tmp\"\n"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "outputs": [
-    {
-     "ename": "AttributeError",
-     "evalue": "'Reproducer' object has no attribute 'create_dependency_table'",
-     "output_type": "error",
-     "traceback": [
-      "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
-      "\u001B[0;31mAttributeError\u001B[0m                            Traceback (most recent call last)",
-      "Cell \u001B[0;32mIn[4], line 1\u001B[0m\n\u001B[0;32m----> 1\u001B[0m \u001B[43mreproducer\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mcreate_dependency_table\u001B[49m(connector)\n\u001B[1;32m      2\u001B[0m reproducer\u001B[38;5;241m.\u001B[39mcreate_metadata_table(connector)\n",
-      "\u001B[0;31mAttributeError\u001B[0m: 'Reproducer' object has no attribute 'create_dependency_table'"
-     ]
-    }
-   ],
-   "source": [
-    "# reproducer.create_dependency_table(connector) # optional\n",
-    "# reproducer.create_metadata_table(connector) # optional"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "outputs": [],
-   "source": [
-    "# ------------- Convert Audio Files for Invenio ----\n",
-    "nb_config_audio_files = NbConfig(\n",
-    "    nb_location=NOTEBOOK_PATH / \"1_audio_files.ipynb\",\n",
-    "    artefacts=[\n",
-    "        audio_files_artefact := InvenioArtefact(\n",
-    "            id=None,\n",
-    "            location=LOCAL_PATH / \"1_audio_files\" / \"output\" / \"emotifymusic.tar.gz\",\n",
-    "            dbrepo_connector=connector\n",
-    "        )\n",
-    "    ],\n",
-    "    dependencies=[]\n",
-    ")\n",
-    "\n",
-    "reproducer.execute(nb_config_audio_files, only_local=True)"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "outputs": [],
-   "source": [
-    "# ------------- Raw feature generation -------------\n",
-    "nb_config_generate_features = NbConfig(\n",
-    "    nb_location=NOTEBOOK_PATH / \"2_generate_features.ipynb\",\n",
-    "    artefacts=[\n",
-    "        raw_features_artefact := DbRepoArtefact(\n",
-    "            id=None,\n",
-    "            location=LOCAL_PATH / \"2_generate_features\" / \"output\" / \"raw_features.csv\",\n",
-    "            dbrepo_connector=connector,\n",
-    "            table_name=\"raw_features\",\n",
-    "            table_description=\"desc\",\n",
-    "        )\n",
-    "    ],\n",
-    "    dependencies=[\n",
-    "        audio_files_artefact.copy_to_location(LOCAL_PATH / \"2_generate_features\" / \"input\" / \"emotifymusic.tar.gz\")\n",
-    "    ]\n",
-    ")\n",
-    "\n",
-    "reproducer.execute(nb_config_generate_features, only_local=True)"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "outputs": [],
-   "source": [
-    "# ------------- Feature Aggregation ----------------\n",
-    "nb_config_aggregate_features = NbConfig(\n",
-    "    nb_location=NOTEBOOK_PATH / \"3_aggregate_features.ipynb\",\n",
-    "    artefacts=[\n",
-    "        features_artefact := DbRepoArtefact(\n",
-    "            id=None,\n",
-    "            location=LOCAL_PATH / \"3_aggregate_features\" / \"output\" / \"features.csv\",\n",
-    "            dbrepo_connector=connector\n",
-    "        )\n",
-    "    ],\n",
-    "    dependencies=[\n",
-    "        raw_features_artefact.copy_to_location(LOCAL_PATH / \"3_aggregate_features\" / \"input\" / \"raw_features.csv\")\n",
-    "    ]\n",
-    ")\n",
-    "\n",
-    "reproducer.execute(nb_config_aggregate_features, only_local=True)"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "Black is not installed, parameters wont be formatted\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": "Executing:   0%|          | 0/10 [00:00<?, ?cell/s]",
-      "application/vnd.jupyter.widget-view+json": {
-       "version_major": 2,
-       "version_minor": 0,
-       "model_id": "80c0e5b6706249b9ae527b0079bc1889"
-      }
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "if not \"features_artefact\" in globals():\n",
-    "    features_artefact = DbRepoArtefact(\n",
-    "        id=None,\n",
-    "        location=LOCAL_PATH / \"3_aggregate_features\" / \"output\" / \"features.csv\",\n",
-    "        dbrepo_connector=connector,\n",
-    "        name=\"features1\",\n",
-    "        description=\"Aggregated features2\",\n",
-    "        table_name=\"features_table\",\n",
-    "        table_description=\"description of features table\",\n",
-    "        type=\"features\"\n",
-    "    )\n",
-    "\n",
-    "# -------------- SPLITTING -------------------------\n",
-    "nb_config_splits = NbConfig(\n",
-    "    nb_location=NOTEBOOK_PATH / \"4_split.ipynb\",\n",
-    "    artefacts=[\n",
-    "        split_artefact := DbRepoArtefact(\n",
-    "            id=None,\n",
-    "            name=\"splits\",\n",
-    "            description=\"Splits of aggregated data into testing and training subbsets.\",\n",
-    "            table_name=\"splits_table5\",\n",
-    "            table_description=\"splits_table_description\",\n",
-    "            location=LOCAL_PATH / \"4_split\" / \"output\" / \"split.csv\",  # location where script  saves generated artefact\n",
-    "            dbrepo_connector=connector,\n",
-    "            type=\"split\",\n",
-    "        )\n",
-    "    ],\n",
-    "    dependencies=[\n",
-    "        features_artefact.copy_to_location(LOCAL_PATH / \"4_split\" / \"input\" / \"features.csv\")\n",
-    "        # DbRepoArtefact(\n",
-    "        #     id=None,\n",
-    "        #     # uri=\"dbrepo1.ec.tuwien.ac.at/container/15/database/15/table/25\",\n",
-    "        #     location=LOCAL_PATH / \"4_split\" / \"input\" / \"features.csv\",\n",
-    "        #     dbrepo_connector=connector\n",
-    "        # )\n",
-    "    ]\n",
-    ")\n",
-    "\n",
-    "# generate splits\n",
-    "reproducer.execute(nb_config_splits, only_local=False)"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "ArtefactMeta(id=24, uri='https://dbrepo2.ec.tuwien.ac.at/api/container/9/database/9/table/20', name='splits', description='Splits of aggregated data into testing and training subbsets.', commit='050d19049fb6456f8b21935308dba3b36aa2e857', branch='dev', repo_uri='origin', executed_file='notebooks/4_split.ipynb', creation_time=datetime.datetime(2023, 2, 16, 14, 53, 19))"
-     },
-     "execution_count": 6,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "split_artefact.metadata"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "Black is not installed, parameters wont be formatted\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": "Executing:   0%|          | 0/20 [00:00<?, ?cell/s]",
-      "application/vnd.jupyter.widget-view+json": {
-       "version_major": 2,
-       "version_minor": 0,
-       "model_id": "3775e654b17c4ed0a9b6ec62b7fb7182"
-      }
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "ename": "Exception",
-     "evalue": "Table creation failed for table test_result_artefact",
-     "output_type": "error",
-     "traceback": [
-      "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m",
-      "\u001B[0;31mException\u001B[0m                                 Traceback (most recent call last)",
-      "Cell \u001B[0;32mIn[7], line 36\u001B[0m\n\u001B[1;32m      7\u001B[0m nb_config_ml \u001B[38;5;241m=\u001B[39m NbConfig(\n\u001B[1;32m      8\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;124m5_ml_model.ipynb\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m      9\u001B[0m     artefacts\u001B[38;5;241m=\u001B[39m[\n\u001B[0;32m   (...)\u001B[0m\n\u001B[1;32m     32\u001B[0m     ]\n\u001B[1;32m     33\u001B[0m )\n\u001B[1;32m     35\u001B[0m \u001B[38;5;66;03m# run ml\u001B[39;00m\n\u001B[0;32m---> 36\u001B[0m \u001B[43mreproducer\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mexecute\u001B[49m\u001B[43m(\u001B[49m\u001B[43mnb_config_ml\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~/OneDrive-TU/Uni/Bachelorarbeit/repos/dbrepo-ismir/dbrepo_ismir/reproducer.py:48\u001B[0m, in \u001B[0;36mReproducer.execute\u001B[0;34m(self, nb_config, require_download, only_local, **kwargs)\u001B[0m\n\u001B[1;32m     37\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_preprocess(nb_config, require_download, only_local)\n\u001B[1;32m     39\u001B[0m papermill\u001B[38;5;241m.\u001B[39mexecute_notebook(\n\u001B[1;32m     40\u001B[0m     nb_config\u001B[38;5;241m.\u001B[39mnb_location\u001B[38;5;241m.\u001B[39mresolve(),\n\u001B[1;32m     41\u001B[0m     nb_config\u001B[38;5;241m.\u001B[39mnb_location\u001B[38;5;241m.\u001B[39mresolve(),\n\u001B[0;32m   (...)\u001B[0m\n\u001B[1;32m     45\u001B[0m     )\n\u001B[1;32m     46\u001B[0m )\n\u001B[0;32m---> 48\u001B[0m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_post_process\u001B[49m\u001B[43m(\u001B[49m\u001B[43mnb_config\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43monly_local\u001B[49m\u001B[43m)\u001B[49m\n",
-      "File \u001B[0;32m~/OneDrive-TU/Uni/Bachelorarbeit/repos/dbrepo-ismir/dbrepo_ismir/reproducer.py:55\u001B[0m, in \u001B[0;36mReproducer._post_process\u001B[0;34m(self, nb_config, only_local)\u001B[0m\n\u001B[1;32m     51\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m only_local:\n\u001B[1;32m     52\u001B[0m     \u001B[38;5;66;03m# load generated artefact and upload it\u001B[39;00m\n\u001B[1;32m     53\u001B[0m     \u001B[38;5;28;01mfor\u001B[39;00m artefact \u001B[38;5;129;01min\u001B[39;00m nb_config\u001B[38;5;241m.\u001B[39martefacts:\n\u001B[1;32m     54\u001B[0m         \u001B[38;5;66;03m# use inspect to get path of caller\u001B[39;00m\n\u001B[0;32m---> 55\u001B[0m         \u001B[43martefact\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\n",
-      "File \u001B[0;32m~/OneDrive-TU/Uni/Bachelorarbeit/repos/dbrepo-ismir/dbrepo_ismir/artefact.py:259\u001B[0m, in \u001B[0;36mDbRepoArtefact.upload\u001B[0;34m(self, executed_file)\u001B[0m\n\u001B[1;32m    252\u001B[0m df[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124martefact_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    254\u001B[0m \u001B[38;5;66;03m# TODO: reference Artefact id via foreign keys in data tables and dependency table\u001B[39;00m\n\u001B[1;32m    255\u001B[0m \n\u001B[1;32m    256\u001B[0m \u001B[38;5;66;03m# create table if not exists\u001B[39;00m\n\u001B[1;32m    257\u001B[0m \u001B[38;5;66;03m# update uri etc\u001B[39;00m\n\u001B[1;32m    258\u001B[0m \u001B[38;5;66;03m# create table if it not already exists\u001B[39;00m\n\u001B[0;32m--> 259\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    260\u001B[0m \u001B[43m    \u001B[49m\u001B[43mdf\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m    261\u001B[0m \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\n\u001B[1;32m    262\u001B[0m \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    263\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m    264\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    266\u001B[0m metadata \u001B[38;5;241m=\u001B[39m ArtefactMeta\u001B[38;5;241m.\u001B[39mnew(\n\u001B[1;32m    267\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mname,\n\u001B[1;32m    268\u001B[0m     \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mdescription,\n\u001B[0;32m   (...)\u001B[0m\n\u001B[1;32m    272\u001B[0m     \u001B[38;5;28mtype\u001B[39m\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mtype\n\u001B[1;32m    273\u001B[0m )\n",
-      "File \u001B[0;32m~/OneDrive-TU/Uni/Bachelorarbeit/repos/dbrepo-ismir/dbrepo_ismir/dbrepo.py:164\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    158\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    159\u001B[0m                                dataframe: pd\u001B[38;5;241m.\u001B[39mDataFrame,\n\u001B[1;32m    160\u001B[0m                                table_name: \u001B[38;5;28mstr\u001B[39m,\n\u001B[1;32m    161\u001B[0m                                table_descriptor: \u001B[38;5;28mstr\u001B[39m\n\u001B[1;32m    162\u001B[0m                                ):\n\u001B[1;32m    163\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--> 164\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    166\u001B[0m     \u001B[38;5;28;01mreturn\u001B[39;00m table\n",
-      "File \u001B[0;32m~/OneDrive-TU/Uni/Bachelorarbeit/repos/dbrepo-ismir/dbrepo_ismir/dbrepo.py:154\u001B[0m, in \u001B[0;36mDBRepoConnector.create_table\u001B[0;34m(self, dataframe, table_name, table_descriptor)\u001B[0m\n\u001B[1;32m    151\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    153\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m table:\n\u001B[0;32m--> 154\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    156\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m table\n",
-      "\u001B[0;31mException\u001B[0m: Table creation failed for table test_result_artefact"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "Black is not installed, parameters wont be formatted\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": "Executing:   0%|          | 0/20 [00:00<?, ?cell/s]",
-      "application/vnd.jupyter.widget-view+json": {
-       "version_major": 2,
-       "version_minor": 0,
-       "model_id": "5db03675ff2c4680addb862e32256860"
-      }
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "# -------------- ML ------------------------------\n",
-    "with open(RESOURCE_PATH / \"5_ml_model\" / \"ml_model_artefact_metadata.yml\", \"r\") as file:\n",
-    "    metadata = yaml.safe_load(file)\n",
-    "\n",
-    "manager = util.get_invenio_manager(CONFIG_PATH)\n",
-    "\n",
-    "nb_config_ml = NbConfig(\n",
-    "    nb_location=NOTEBOOK_PATH / \"5_ml_model.ipynb\",\n",
-    "    artefacts=[\n",
-    "        ml_model_artefact := InvenioArtefact.new(\n",
-    "            name=\"ml_model\",\n",
-    "            description=\"An ml model representing the trained clf\",\n",
-    "            location=LOCAL_PATH / \"5_ml_model\" / \"ml_model.pickle\",\n",
-    "            dbrepo_connector=connector,\n",
-    "            invenio_manager=manager,\n",
-    "            record_metadata=metadata,\n",
-    "            type=\"clf\"\n",
-    "        ),\n",
-    "        test_result_artefact := DbRepoArtefact.new(\n",
-    "            name=\"test_result_artefact\",\n",
-    "            description=\"Result of tests on ml model\",\n",
-    "            table_name=\"test_result_artefact\",\n",
-    "            table_description=\"description\",\n",
-    "            location=LOCAL_PATH / \"5_ml_model\" / \"test_result.csv\",\n",
-    "            dbrepo_connector=connector,\n",
-    "            type=\"submission\"\n",
-    "        )\n",
-    "    ],\n",
-    "    dependencies=[\n",
-    "        split_artefact.copy_to_location(LOCAL_PATH / \"5_ml_model\" / \"input\" / \"split.csv\"),     # pass in old artefact as new dependency\n",
-    "        features_artefact.copy_to_location(LOCAL_PATH / \"5_ml_model\" / \"input\" / \"features.csv\")\n",
-    "    ]\n",
-    ")\n",
-    "\n",
-    "# run ml\n",
-    "reproducer.execute(nb_config_ml, only_local=False)"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [
-    "# -------------- REPORT -----------------------\n",
-    "nb_config_report = NbConfig(\n",
-    "    nb_location=NOTEBOOK_PATH / \"6_report.ipynb\",\n",
-    "    artefacts=[\n",
-    "        report_artefact := RepositumArtefact(\n",
-    "            id=None,\n",
-    "            location=LOCAL_PATH / \"6_report\" / \"report.pdf\",\n",
-    "            dbrepo_connector=connector\n",
-    "        )\n",
-    "    ],\n",
-    "    dependencies=[\n",
-    "        ml_model_artefact.copy_to_location(LOCAL_PATH / \"6_report\" / \"ml_model.pickle\"),\n",
-    "        test_result_artefact.copy_to_location(LOCAL_PATH / \"6_report\" / \"test_result.csv\")\n",
-    "    ]\n",
-    ")\n",
-    "\n",
-    "# upload report\n",
-    "reproducer.execute(nb_config_report)"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 35,
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[Parameter('a', int, value=10), Parameter('test', str, value='asdfjklasdf')]\n",
-      "[Parameter('a', int, value=10), Parameter('test', str, value='asdf')]\n",
-      "[Parameter('a', int, value=10), Parameter('test', str, value='asdf')]\n",
-      "[Parameter('a', int, value=10), Parameter('test', str, value='asdf')]\n"
-     ]
-    }
-   ],
-   "source": [
-    "import nbparameterise\n",
-    "import nbclient\n",
-    "import nbformat\n",
-    "\n",
-    "with open(\"testing.ipynb\") as file:\n",
-    "    nb = nbformat.read(file, nbformat.NO_CONVERT)\n",
-    "\n",
-    "orig_parameters = nbparameterise.extract_parameters(nb)\n",
-    "\n",
-    "print(orig_parameters)\n",
-    "\n",
-    "params = nbparameterise.parameter_values(orig_parameters, test=\"asdf\")\n",
-    "\n",
-    "new_nb = nbparameterise.replace_definitions(nb, params)\n",
-    "executed_nb = nbclient.execute(new_nb)\n",
-    "\n",
-    "with open(\"testing.ipynb\", \"w\") as file:\n",
-    "    nbformat.write(executed_nb, file)"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "outputs": [],
-   "source": [
-    "import git\n",
-    "import datetime\n",
-    "from definitions import BASE_PATH\n",
-    "\n",
-    "repo = git.Repo(BASE_PATH)\n",
-    "branch = repo.head.reference\n",
-    "branch_name = branch.name\n",
-    "commit_sha = branch.repo.commit().hexsha"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "'dev'"
-     },
-     "execution_count": 5,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "branch_name"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "'ssh://git@gitlab.tuwien.ac.at:822/martin.weise/dbrepo-ismir.git'"
-     },
-     "execution_count": 11,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "branch.repo.remote()"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "outputs": [
-    {
-     "data": {
-      "text/plain": "'17add59eb663db83d6865c3f7733ab11e89b689b'"
-     },
-     "execution_count": 14,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "branch.repo.commit().hexsha"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "outputs": [],
-   "source": [
-    "import pandas as pd\n",
-    "testobj = pd.DataFrame()\n",
-    "\n"
-   ],
-   "metadata": {
-    "collapsed": false
-   }
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 2
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython2",
-   "version": "2.7.6"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
diff --git a/notebooks/ml_analysis.ipynb b/notebooks/ml_analysis.ipynb
deleted file mode 100644
index 368e2407458c600342e47a71cf028a7972b45e4a..0000000000000000000000000000000000000000
--- a/notebooks/ml_analysis.ipynb
+++ /dev/null
@@ -1,309 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Base: https://www.kaggle.com/code/anmour/svm-using-mfcc-features/notebook\n",
-    "\n",
-    "import pandas as pd\n",
-    "import numpy as np\n",
-    "import os\n",
-    "import librosa\n",
-    "import scipy\n",
-    "import pickle\n",
-    "from scipy.stats import skew\n",
-    "# from tqdm import tqdm, tqdm_pandas\n",
-    "\n",
-    "\n",
-    "# tqdm.pandas()\n",
-    "\n",
-    "from sklearn.model_selection import GridSearchCV\n",
-    "from sklearn.model_selection import train_test_split\n",
-    "from sklearn.metrics import accuracy_score\n",
-    "from sklearn.preprocessing import StandardScaler\n",
-    "from sklearn.decomposition import PCA\n",
-    "\n",
-    "from sklearn.svm import SVC\n",
-    "\n",
-    "from pathlib import Path\n",
-    "\n",
-    "BASE_PATH = Path(\"\").absolute().parent.parent\n",
-    "\n",
-    "meta_columns = [\"filename\", \"sample\", \"genre\", \"filenumber\"]\n",
-    "# 22 / 73"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "mfcc_raw: pd.DataFrame = pd.read_pickle(BASE_PATH / \"out\" / \"mfcc\" / \"mfcc.pickle\").set_index('filename')\n",
-    "\n",
-    "\n",
-    "# Aggregate from n rows per file to 1 (calculate min, max, etc. for each feature)\n",
-    "\n",
-    "mfcc_aggregated = mfcc_raw.drop(meta_columns, axis=1, errors='ignore').groupby(mfcc_raw.index).agg(['min', 'max', 'mean', 'std', 'skew'])\n",
-    "mfcc_meta = pd.DataFrame(mfcc_raw['genre'].groupby(mfcc_raw.index).last())\n",
-    "mfcc_meta.columns = pd.MultiIndex.from_arrays([['genre'], ['']])\n",
-    "mfcc_merged = pd.merge(mfcc_meta, mfcc_aggregated, left_index=True, right_index=True)\n",
-    "\n",
-    "\n",
-    "# print(mfcc_aggregated)\n",
-    "# print(mfcc_aggregated_meta)\n",
-    "mfcc_merged"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "train: pd.DataFrame = mfcc_merged.sample(frac = 0.8).sort_index()\n",
-    "\n",
-    "train"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "test: pd.DataFrame = mfcc_merged.drop(train.index)\n",
-    "\n",
-    "test"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# remove labels\n",
-    "X = train.drop(meta_columns, level=0, axis=1, errors='ignore')\n",
-    "\n",
-    "columns: pd.Index = X.columns\n",
-    "classnames = np.sort(np.unique(mfcc_merged.genre.values)) # => [\"classical\", \"electric\", \"pop\", \"rock\"]\n",
-    "\n",
-    "# map classname to an index and create dicts for easy lookup in O(1) \n",
-    "classname2index = {}\n",
-    "index2classname = {}\n",
-    "for i, classname in enumerate(classnames):\n",
-    "    classname2index[classname] = i\n",
-    "    index2classname[i] = classname\n",
-    "\n",
-    "# map genre to genre index    \n",
-    "y = np.array([classname2index[classname] for classname in train.genre.values])\n",
-    "\n",
-    "(X, y)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "X_test = test.drop(meta_columns, level=0, axis=1, errors='ignore')\n",
-    "\n",
-    "print(X.shape)\n",
-    "print(X_test.shape)\n",
-    "print(X_test.shape[0] / X.shape[0])\n",
-    "X_test\n",
-    "\n",
-    "y_test = np.array([classname2index[classname] for classname in test.genre.values])\n",
-    "\n",
-    "y_test"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Standardize for PCA\n",
-    "\n",
-    "scaler = StandardScaler()\n",
-    "X_standardized = scaler.fit_transform(X.values)\n",
-    "X_test_standardized = scaler.transform(X_test.values)\n",
-    "\n",
-    "X_standardized"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Reduce Dimensions via PCA\n",
-    "pca = PCA(n_components=50).fit(X_standardized)\n",
-    "X_pca = pca.transform(X_standardized)\n",
-    "X_test_pca = pca.transform(X_test_standardized)\n",
-    "\n",
-    "print(sum(pca.explained_variance_ratio_))\n",
-    "\n",
-    "print(X_pca.shape)\n",
-    "print(X_test_pca.shape)\n",
-    "print(y.shape)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Fit SVM:\n",
-    "\n",
-    "X_train, X_val, y_train, y_val = train_test_split(X_pca, y, test_size = 0.2, random_state=4, shuffle = True)\n",
-    "\n",
-    "clf = SVC(kernel='rbf', probability=True)\n",
-    "clf.fit(X_train, y_train)\n",
-    "\n",
-    "print(accuracy_score(clf.predict(X_val), y_val))\n",
-    "\n",
-    "print(X_val)\n",
-    "print(y_val)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# grid for C, gamma\n",
-    "C_grid = [0.001, 0.01, 0.1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
-    "gamma_grid = [0.001, 0.01, 0.1, 1, 10]\n",
-    "param_grid = {'C': C_grid, 'gamma': gamma_grid}\n",
-    "\n",
-    "grid = GridSearchCV(SVC(kernel='rbf'), param_grid, cv=5, scoring=\"accuracy\")\n",
-    "grid.fit(X_train, y_train)\n",
-    "\n",
-    "# Find the best model\n",
-    "print(grid.best_score_)\n",
-    "print(grid.best_params_)\n",
-    "print(grid.best_estimator_)\n",
-    "print(accuracy_score(grid.predict(X_val), y_val))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Optimal model\n",
-    "\n",
-    "clf = SVC(kernel='rbf', C=4, gamma=0.01, probability=True)\n",
-    "clf.fit(X_train, y_train)\n",
-    "\n",
-    "print(accuracy_score(clf.predict(X_val), y_val))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Fit entire training sets\n",
-    "clf.fit(X_pca, y)\n",
-    "\n",
-    "print(accuracy_score(clf.predict(X_test_pca), y_test))\n",
-    "\n",
-    "clf.predict_proba(X_test_pca)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "svc_path = BASE_PATH / \"out\" / \"SVC\"/ \"clf.pickle\"\n",
-    "svc_path.parent.mkdir(parents=True, exist_ok=True)\n",
-    "\n",
-    "with open(svc_path, \"wb\") as file:\n",
-    "    pickle.dump(clf, file)\n",
-    "    \n",
-    "with open(svc_path, \"rb\") as file:\n",
-    "    loaded = pickle.load(file)\n",
-    "    \n",
-    "loaded.predict_proba(X_test_pca)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Fit the entire training sets\n",
-    "\n",
-    "def convert_to_labels(preds, i2c, k=3):\n",
-    "    ans = []\n",
-    "    ids = []\n",
-    "    for p in preds:\n",
-    "        idx = np.argsort(p)[::-1]\n",
-    "        ids.append([i for i in idx[:k]])\n",
-    "        ans.append([i2c[i] for i in idx[:k]])\n",
-    "\n",
-    "    return ans, ids\n",
-    "\n",
-    "clf.fit(X_pca, y)\n",
-    "prediction_lists, _ = convert_to_labels(clf.predict_proba(X_test_pca), index2classname, k=4)\n",
-    "\n",
-    "# # Write to outputs\n",
-    "subm = pd.DataFrame(index=test.index)\n",
-    "subm['genre'] = test.genre.values\n",
-    "subm['pred1'] = [prediction_list[0] for prediction_list in prediction_lists]\n",
-    "subm['pred2'] = [prediction_list[1] for prediction_list in prediction_lists]\n",
-    "subm['pred3'] = [prediction_list[2] for prediction_list in prediction_lists]\n",
-    "subm['pred4'] = [prediction_list[3] for prediction_list in prediction_lists]\n",
-    "# subm.to_csv('submission.csv', index=False)\n",
-    "\n",
-    "pd.set_option('display.max_rows', None)\n",
-    "print(subm)\n",
-    "pd.reset_option('display.max_rows')\n",
-    "\n",
-    "# print([prediction_list[0] for prediction_list in prediction_lists])"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3.10.8 64-bit ('3.10.8')",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.10.8 (main, Nov 22 2022, 16:07:51) [GCC 12.2.0]"
-  },
-  "vscode": {
-   "interpreter": {
-    "hash": "bbdee169b059bb18a50f2776b13bd9f52e966fe858de13011c8689bad2819b82"
-   }
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/notebooks/standalone.ipynb b/notebooks/standalone.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..c1b8f1655daef5ce8ce54ecae40ef75a74e6ffab
--- /dev/null
+++ b/notebooks/standalone.ipynb
@@ -0,0 +1,1075 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "source": [
+    "# Standalone Notebook\n",
+    "\n",
+    "Notebook containing the same functionality as main.ipynb, but it includes all steps in one notebook and does not spin up separate Jupyter Kernels and uploads the entities directly."
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "outputs": [],
+   "source": [
+    "import pickle\n",
+    "from concurrent.futures import ThreadPoolExecutor\n",
+    "from contextlib import contextmanager, redirect_stderr, redirect_stdout\n",
+    "\n",
+    "import logging\n",
+    "import librosa\n",
+    "import numpy as np\n",
+    "import pandas as pd\n",
+    "import yaml\n",
+    "from matplotlib import pyplot as plt\n",
+    "from pandas import DataFrame, Index\n",
+    "from sklearn.decomposition import PCA\n",
+    "from sklearn.metrics import accuracy_score\n",
+    "from sklearn.model_selection import train_test_split, GridSearchCV\n",
+    "from sklearn.preprocessing import StandardScaler\n",
+    "from sklearn.svm import SVC\n",
+    "\n",
+    "from fairnb.entity.dbrepo_entity import DbRepoEntity\n",
+    "from fairnb.entity.invenio_entity import InvenioEntity\n",
+    "from fairnb.executor import Executor\n",
+    "from fairnb.nb_config import NbConfig\n",
+    "from fairnb.util import Util\n",
+    "from definitions import BASE_PATH, RESOURCE_PATH\n",
+    "import tarfile\n",
+    "import zipfile\n",
+    "import os\n",
+    "from pathlib import Path\n",
+    "from definitions import CONFIG_PATH"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:51:04.540021095Z",
+     "start_time": "2023-10-10T20:51:04.517646578Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "outputs": [],
+   "source": [
+    "logging.basicConfig(\n",
+    "    level=logging.INFO\n",
+    ")\n",
+    "\n",
+    "ONLY_LOCAL = True\n",
+    "\n",
+    "# experiment executor setup\n",
+    "executor = Executor()\n",
+    "util = Util.get_instance()              # util caches loaded credentials -> via Singleton\n",
+    "connector = util.get_dbrepo_connector(CONFIG_PATH / \"dbrepo_config.yml\") if not ONLY_LOCAL else None\n",
+    "invenio_connector = util.get_invenio_connector(CONFIG_PATH / \"invenio_config.yml\") if not ONLY_LOCAL else None\n",
+    "\n",
+    "NOTEBOOK_PATH = BASE_PATH / \"notebooks\"\n",
+    "LOCAL_PATH = BASE_PATH / \"tmp\" / \"standalone\"\n",
+    "NB_LOCATION = NOTEBOOK_PATH / \"standalone.ipynb\""
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:51:06.316096074Z",
+     "start_time": "2023-10-10T20:51:06.194316265Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 1. Audio Files\n",
+    "\n",
+    "Bundle the provided audio files (400, in MP3) in a tar, encrypt it using gzip and store it in the output folder."
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "outputs": [],
+   "source": [
+    "tar_path = LOCAL_PATH / \"emotifymusic.tar.gz\"\n",
+    "\n",
+    "# load provided files\n",
+    "zip_path = BASE_PATH / \"resource\" / \"1_audio_files\" / \"emotifymusic.zip\"\n",
+    "dir_path = LOCAL_PATH / \"music\" / \"original\"\n",
+    "\n",
+    "dir_path.mkdir(parents=True, exist_ok=True)\n",
+    "# unzip to dir_path\n",
+    "with zipfile.ZipFile(zip_path, \"r\") as zfile:\n",
+    "    zfile.extractall(path=dir_path)\n",
+    "\n",
+    "file_paths = list(dir_path.rglob('**/*.*'))\n",
+    "flattened_dir_path = LOCAL_PATH / \"music\" / \"flattened\"\n",
+    "flattened_dir_path.mkdir(parents=True, exist_ok=True)\n",
+    "\n",
+    "for path in file_paths:\n",
+    "    (flattened_dir_path / path.relative_to(dir_path).as_posix().replace('/', '_')).write_bytes(path.read_bytes())\n",
+    "\n",
+    "tar_path.parent.mkdir(parents=True, exist_ok=True)\n",
+    "\n",
+    "with tarfile.open(tar_path, \"w:gz\") as file:\n",
+    "    file.add(flattened_dir_path, arcname=os.path.sep)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:38:05.628405202Z",
+     "start_time": "2023-10-10T20:37:48.721045776Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "outputs": [],
+   "source": [
+    "if not ONLY_LOCAL:\n",
+    "    metadata = yaml.safe_load(open(RESOURCE_PATH / \"1_audio_files\" / \"record_metadata.yml\", \"r\"))\n",
+    "\n",
+    "    nb_config_audio_files = NbConfig(\n",
+    "        nb_location=NB_LOCATION,\n",
+    "        entities=[\n",
+    "            audio_files_entity := InvenioEntity.new(\n",
+    "                name = \"standalone audio_tar\",\n",
+    "                description = \"Raw music files\",\n",
+    "                location = tar_path,\n",
+    "                dbrepo_connector=connector,\n",
+    "                invenio_connector=invenio_connector,\n",
+    "                record_metadata=metadata,\n",
+    "                type=\"audio_tar\"\n",
+    "            )\n",
+    "        ],\n",
+    "        dependencies=[]\n",
+    "    )\n",
+    "\n",
+    "    executor.upload_entities(nb_config_audio_files)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:40:33.684566122Z",
+     "start_time": "2023-10-10T20:38:05.629351864Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 2. Feature Extraction of Base audio Files from Invenio\n",
+    "\n",
+    "Load the audio files from the tar, and extract the MFCC features from them and store them in a dataframe."
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "outputs": [],
+   "source": [
+    "DEFAULT_SAMPLING_RATE = 22050\n",
+    "\n",
+    "with tarfile.open(tar_path, \"r:gz\") as archive:\n",
+    "    archive.extractall(path=(path_out := tar_path.with_suffix(\"\").with_suffix(\"\")))\n",
+    "\n",
+    "files = list(path_out.rglob(\"**/*.*\"))\n",
+    "\n",
+    "\n",
+    "@contextmanager\n",
+    "def suppress_stdout_stderr():\n",
+    "    \"\"\"A context manager that redirects stdout and stderr to devnull\"\"\"\n",
+    "    with open(os.devnull, 'w') as fnull:\n",
+    "        with redirect_stderr(fnull) as err, redirect_stdout(fnull) as out:\n",
+    "            yield err, out\n",
+    "\n",
+    "\n",
+    "def generate_mfcc_feature(filepath: Path, sr: int = DEFAULT_SAMPLING_RATE, number_mfccs: int = 40):\n",
+    "    x, _ = load_mp3(filepath, sr=sr)\n",
+    "    assert sr == _\n",
+    "    mfcc = librosa.feature.mfcc(x, sr=sr, n_mfcc=number_mfccs)\n",
+    "\n",
+    "    # transpose to use mfcc bands as columns instead of rows\n",
+    "    return pd.DataFrame(mfcc).transpose()\n",
+    "\n",
+    "\n",
+    "def load_mp3(filepath: Path, sr: int = DEFAULT_SAMPLING_RATE):\n",
+    "    x, sr = librosa.load(filepath, sr=sr)  # extract wave (x) with sample rate (sr)\n",
+    "    return x, sr\n",
+    "\n",
+    "\n",
+    "with suppress_stdout_stderr(), ThreadPoolExecutor(6) as pool_executor:\n",
+    "    dataframes = list(pool_executor.map(\n",
+    "        lambda args: generate_mfcc_feature(args), files)\n",
+    "    )\n",
+    "for file, dataframe in zip(files, dataframes):\n",
+    "    dataframe[\"sample\"] = dataframe.index.to_numpy(copy=True)\n",
+    "    dataframe[\"filename\"] = file.name\n",
+    "    dataframe[\"label\"] = file.name.split('_')[0]  # extract genre from file name\n",
+    "\n",
+    "dataframe_concat = pd.concat(dataframes)\n",
+    "columns_old = list(dataframe_concat.columns)\n",
+    "columns = columns_old[-3:] + columns_old[:-3]\n",
+    "dataframe_concat = dataframe_concat[columns]\n",
+    "\n",
+    "raw_features = dataframe_concat"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:01.473344364Z",
+     "start_time": "2023-10-10T20:40:33.726421123Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "[<matplotlib.lines.Line2D at 0x7fabbd4d9480>]"
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "text/plain": "<Figure size 640x480 with 1 Axes>",
+      "image/png": "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YejevTvOOOMMrFy5EoccckiuqxkYZPqx0aVLFxQVFTm80Ddt2oSampqIapWfVFVV4bDDDsOKFStQU1ODpqYm7Ny505KGbdeamhpuu6d/I1Kk20LWR2tqarB582bL7y0tLdi+fTu1tyYDBgxAly5dsGLFCgDUtircdNNNeP311zF9+nT06tUr831Q44AoTUVFRcEvikRty2PkyJEAYOm7+di2JKjYKC0txTHHHINp06Zlvksmk5g2bRpGjRoVYc3yj927d2PlypXo3r07jjnmGJSUlFjaddmyZaitrc2066hRo7B48WLLJDB16lRUVFRgyJAhOa9/XOnfvz9qamosbdnQ0IAPPvjA0pY7d+7E/PnzM2neeecdJJPJzOA1atQozJo1C83NzZk0U6dOxaBBgw4K04Qq69atw7Zt29C9e3cA1LYyTNPETTfdhJdffhnvvPOOw/wV1DgwatQoSx7pNIU8Rru1LY+FCxcCgKXv5mXbRubGG2Oee+45s6yszJw8ebL52Wefmddff71ZVVVl8ZQmnNx+++3mjBkzzNWrV5vvvfeeOXbsWLNLly7m5s2bTdNMbUvs06eP+c4775jz5s0zR40aZY4aNSpzfXrr3FlnnWUuXLjQnDJlitm1a9eDcnvyrl27zAULFpgLFiwwAZi/+93vzAULFphffvmlaZqp7clVVVXmq6++ai5atMi88MILuduTjzrqKPODDz4wZ8+ebR566KGWLbQ7d+40q6urzSuuuMJcsmSJ+dxzz5nl5eUFv4VW1ra7du0yf/jDH5pz5swxV69ebb799tvm0UcfbR566KHm/v37M3lQ2/K58cYbzcrKSnPGjBmWLbJ79+7NpAliHEhvob3jjjvMpUuXmpMmTYp8C23YuLXtihUrzPvuu8+cN2+euXr1avPVV181BwwYYI4ePTqTR762LQkqAh555BGzT58+ZmlpqXn88cebc+fOjbpKseeSSy4xu3fvbpaWlpo9e/Y0L7nkEnPFihWZ3/ft22d+73vfMzt27GiWl5ebX/3qV82NGzda8lizZo15zjnnmG3btjW7dOli3n777WZzc3OubyVypk+fbgJw/LvqqqtM00xtUf75z39uVldXm2VlZeYZZ5xhLlu2zJLHtm3bzEsvvdRs3769WVFRYV5zzTXmrl27LGk++eQT8+STTzbLysrMnj17mg8++GCubjEyZG27d+9e86yzzjK7du1qlpSUmH379jWvu+46xyKF2pYPr10BmE888UQmTVDjwPTp080jjzzSLC0tNQcMGGApoxBxa9va2lpz9OjRZqdOncyysjJz4MCB5h133GGJo2Ka+dm2hmmaZu70NwRBEARBEOqQjwpBEARBELGFBBWCIAiCIGILCSoEQRAEQcQWElQIgiAIgogtJKgQBEEQBBFbSFAhCIIgCCK2kKBCEARBEERsIUGFIAiCIIjYQoIKQRAEQRCxhQQVgiAIgiBiCwkqBEEQBEHEFhJUCIIgCIKILf8foHcPE/DhJQEAAAAASUVORK5CYII="
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "example_mfcc = raw_features[raw_features.filename == \"rock_50.mp3\"].sort_values(\"sample\").iloc[:,:]\n",
+    "plt.plot(example_mfcc[15])\n",
+    "# plt.plot(example_mfcc[4])\n",
+    "\n",
+    "# librosa.display.waveshow(audio)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:02.011511025Z",
+     "start_time": "2023-10-10T20:43:01.527557472Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 3. Aggregate MFCC Features"
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "outputs": [],
+   "source": [
+    "# allow for direct entry if features were already created in earlier run\n",
+    "raw_features.to_csv(LOCAL_PATH / \"raw_features.csv\", index=False)\n",
+    "\n",
+    "if \"raw_features\" not in globals():\n",
+    "    raw_features = pd.read_csv(LOCAL_PATH / \"raw_features.csv\")"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:33.374674832Z",
+     "start_time": "2023-10-10T20:43:02.009164981Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "              filename      label       0_min       0_max      0_mean  \\\n0      classical_1.mp3  classical -530.784363 -163.308350 -302.203156   \n1     classical_10.mp3  classical -562.857849  -96.164795 -219.259018   \n2    classical_100.mp3  classical -536.237366  -61.608826 -177.804108   \n3     classical_11.mp3  classical -536.457458 -120.429665 -222.126312   \n4     classical_12.mp3  classical -562.675232 -148.133560 -270.975403   \n..                 ...        ...         ...         ...         ...   \n395        rock_95.mp3       rock -553.110107   -5.218835 -193.506042   \n396        rock_96.mp3       rock -541.236023   27.163332 -119.113991   \n397        rock_97.mp3       rock -518.494995   58.526745  -66.267746   \n398        rock_98.mp3       rock -518.643066   53.555115  -45.734516   \n399        rock_99.mp3       rock -544.703125   75.612129  -49.380943   \n\n         0_std    0_skew      1_min       1_max      1_mean  ...     38_min  \\\n0    51.142183 -0.468374   0.000000  178.751617  111.332344  ... -44.098068   \n1    53.561839 -0.772320   0.029056  259.632721  215.094193  ... -27.458416   \n2    83.381622 -2.587179   0.000000  190.475891  112.471710  ... -27.335688   \n3    76.246992 -2.402419   0.000000  159.425751   99.853645  ... -31.774948   \n4    52.191182 -0.366587   0.000000  194.264160  148.226654  ... -44.843815   \n..         ...       ...        ...         ...         ...  ...        ...   \n395  76.869437 -0.201055 -89.948746  201.180450  111.724190  ... -27.043941   \n396  58.420684 -0.957699  -7.415959  210.492462  125.453690  ... -37.584858   \n397  65.635619 -0.898026 -58.824409  175.201355   99.288261  ... -29.620445   \n398  52.444200 -1.705641   0.000000  187.042725   96.440872  ... -26.967852   \n399  54.045627 -0.863093 -32.930649  191.735382   93.971237  ... -21.929403   \n\n        38_max   38_mean     38_std   38_skew     39_min     39_max   39_mean  \\\n0    47.308060 -3.713503  16.553984  0.230691 -46.794479  49.352516 -2.282116   \n1    29.811110  0.484271   8.660648 -0.479016 -28.989979  27.533707  0.952658   \n2    27.610388 -0.333233   8.185075  0.208425 -38.095375  31.397882 -1.494916   \n3    31.500881 -3.781627   9.191043  0.260886 -22.667439  50.992905  1.600777   \n4    28.490644 -6.242015  10.546545  0.341848 -25.040886  46.878204  1.844494   \n..         ...       ...        ...       ...        ...        ...       ...   \n395  22.451445 -7.234633   8.471853  0.753855 -24.712723  23.410387 -4.502398   \n396  28.087940 -9.704238   8.447620  0.112760 -38.147888  21.814400 -8.249507   \n397  26.325895 -5.722826   7.727378  0.207489 -29.497524  25.410656 -3.356615   \n398   8.714736 -9.511492   5.551820 -0.025604 -23.020082  13.948639 -2.664985   \n399  17.050608 -5.296690   5.894962  0.390705 -20.983192  29.312021 -0.321836   \n\n        39_std   39_skew  \n0    15.285639  0.171462  \n1    10.477735 -0.185771  \n2    10.917299  0.020984  \n3    10.125545  0.595763  \n4    11.160392  0.503120  \n..         ...       ...  \n395   6.687983  0.238807  \n396   7.807756  0.071968  \n397   8.170526  0.160330  \n398   5.051498 -0.258407  \n399   6.571660  0.384794  \n\n[400 rows x 202 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>label</th>\n      <th>0_min</th>\n      <th>0_max</th>\n      <th>0_mean</th>\n      <th>0_std</th>\n      <th>0_skew</th>\n      <th>1_min</th>\n      <th>1_max</th>\n      <th>1_mean</th>\n      <th>...</th>\n      <th>38_min</th>\n      <th>38_max</th>\n      <th>38_mean</th>\n      <th>38_std</th>\n      <th>38_skew</th>\n      <th>39_min</th>\n      <th>39_max</th>\n      <th>39_mean</th>\n      <th>39_std</th>\n      <th>39_skew</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>classical_1.mp3</td>\n      <td>classical</td>\n      <td>-530.784363</td>\n      <td>-163.308350</td>\n      <td>-302.203156</td>\n      <td>51.142183</td>\n      <td>-0.468374</td>\n      <td>0.000000</td>\n      <td>178.751617</td>\n      <td>111.332344</td>\n      <td>...</td>\n      <td>-44.098068</td>\n      <td>47.308060</td>\n      <td>-3.713503</td>\n      <td>16.553984</td>\n      <td>0.230691</td>\n      <td>-46.794479</td>\n      <td>49.352516</td>\n      <td>-2.282116</td>\n      <td>15.285639</td>\n      <td>0.171462</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>classical_10.mp3</td>\n      <td>classical</td>\n      <td>-562.857849</td>\n      <td>-96.164795</td>\n      <td>-219.259018</td>\n      <td>53.561839</td>\n      <td>-0.772320</td>\n      <td>0.029056</td>\n      <td>259.632721</td>\n      <td>215.094193</td>\n      <td>...</td>\n      <td>-27.458416</td>\n      <td>29.811110</td>\n      <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>0.952658</td>\n      <td>10.477735</td>\n      <td>-0.185771</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>classical_100.mp3</td>\n      <td>classical</td>\n      <td>-536.237366</td>\n      <td>-61.608826</td>\n      <td>-177.804108</td>\n      <td>83.381622</td>\n      <td>-2.587179</td>\n      <td>0.000000</td>\n      <td>190.475891</td>\n      <td>112.471710</td>\n      <td>...</td>\n      <td>-27.335688</td>\n      <td>27.610388</td>\n      <td>-0.333233</td>\n      <td>8.185075</td>\n      <td>0.208425</td>\n      <td>-38.095375</td>\n      <td>31.397882</td>\n      <td>-1.494916</td>\n      <td>10.917299</td>\n      <td>0.020984</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>classical_11.mp3</td>\n      <td>classical</td>\n      <td>-536.457458</td>\n      <td>-120.429665</td>\n      <td>-222.126312</td>\n      <td>76.246992</td>\n      <td>-2.402419</td>\n      <td>0.000000</td>\n      <td>159.425751</td>\n      <td>99.853645</td>\n      <td>...</td>\n      <td>-31.774948</td>\n      <td>31.500881</td>\n      <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>1.600777</td>\n      <td>10.125545</td>\n      <td>0.595763</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>classical_12.mp3</td>\n      <td>classical</td>\n      <td>-562.675232</td>\n      <td>-148.133560</td>\n      <td>-270.975403</td>\n      <td>52.191182</td>\n      <td>-0.366587</td>\n      <td>0.000000</td>\n      <td>194.264160</td>\n      <td>148.226654</td>\n      <td>...</td>\n      <td>-44.843815</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>46.878204</td>\n      <td>1.844494</td>\n      <td>11.160392</td>\n      <td>0.503120</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>395</th>\n      <td>rock_95.mp3</td>\n      <td>rock</td>\n      <td>-553.110107</td>\n      <td>-5.218835</td>\n      <td>-193.506042</td>\n      <td>76.869437</td>\n      <td>-0.201055</td>\n      <td>-89.948746</td>\n      <td>201.180450</td>\n      <td>111.724190</td>\n      <td>...</td>\n      <td>-27.043941</td>\n      <td>22.451445</td>\n      <td>-7.234633</td>\n      <td>8.471853</td>\n      <td>0.753855</td>\n      <td>-24.712723</td>\n      <td>23.410387</td>\n      <td>-4.502398</td>\n      <td>6.687983</td>\n      <td>0.238807</td>\n    </tr>\n    <tr>\n      <th>396</th>\n      <td>rock_96.mp3</td>\n      <td>rock</td>\n      <td>-541.236023</td>\n      <td>27.163332</td>\n      <td>-119.113991</td>\n      <td>58.420684</td>\n      <td>-0.957699</td>\n      <td>-7.415959</td>\n      <td>210.492462</td>\n      <td>125.453690</td>\n      <td>...</td>\n      <td>-37.584858</td>\n      <td>28.087940</td>\n      <td>-9.704238</td>\n      <td>8.447620</td>\n      <td>0.112760</td>\n      <td>-38.147888</td>\n      <td>21.814400</td>\n      <td>-8.249507</td>\n      <td>7.807756</td>\n      <td>0.071968</td>\n    </tr>\n    <tr>\n      <th>397</th>\n      <td>rock_97.mp3</td>\n      <td>rock</td>\n      <td>-518.494995</td>\n      <td>58.526745</td>\n      <td>-66.267746</td>\n      <td>65.635619</td>\n      <td>-0.898026</td>\n      <td>-58.824409</td>\n      <td>175.201355</td>\n      <td>99.288261</td>\n      <td>...</td>\n      <td>-29.620445</td>\n      <td>26.325895</td>\n      <td>-5.722826</td>\n      <td>7.727378</td>\n      <td>0.207489</td>\n      <td>-29.497524</td>\n      <td>25.410656</td>\n      <td>-3.356615</td>\n      <td>8.170526</td>\n      <td>0.160330</td>\n    </tr>\n    <tr>\n      <th>398</th>\n      <td>rock_98.mp3</td>\n      <td>rock</td>\n      <td>-518.643066</td>\n      <td>53.555115</td>\n      <td>-45.734516</td>\n      <td>52.444200</td>\n      <td>-1.705641</td>\n      <td>0.000000</td>\n      <td>187.042725</td>\n      <td>96.440872</td>\n      <td>...</td>\n      <td>-26.967852</td>\n      <td>8.714736</td>\n      <td>-9.511492</td>\n      <td>5.551820</td>\n      <td>-0.025604</td>\n      <td>-23.020082</td>\n      <td>13.948639</td>\n      <td>-2.664985</td>\n      <td>5.051498</td>\n      <td>-0.258407</td>\n    </tr>\n    <tr>\n      <th>399</th>\n      <td>rock_99.mp3</td>\n      <td>rock</td>\n      <td>-544.703125</td>\n      <td>75.612129</td>\n      <td>-49.380943</td>\n      <td>54.045627</td>\n      <td>-0.863093</td>\n      <td>-32.930649</td>\n      <td>191.735382</td>\n      <td>93.971237</td>\n      <td>...</td>\n      <td>-21.929403</td>\n      <td>17.050608</td>\n      <td>-5.296690</td>\n      <td>5.894962</td>\n      <td>0.390705</td>\n      <td>-20.983192</td>\n      <td>29.312021</td>\n      <td>-0.321836</td>\n      <td>6.571660</td>\n      <td>0.384794</td>\n    </tr>\n  </tbody>\n</table>\n<p>400 rows × 202 columns</p>\n</div>"
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "meta_columns = [\"sample\", \"filename\", \"label\"]\n",
+    "mfcc_aggregated = raw_features \\\n",
+    "    .drop(meta_columns, axis=1, errors='ignore') \\\n",
+    "    .groupby(raw_features.filename).agg(['min', 'max', 'mean', 'std', 'skew'])\n",
+    "\n",
+    "mfcc_meta = pd.DataFrame(raw_features['label'].groupby(raw_features.filename).last())\n",
+    "mfcc_meta.columns = pd.MultiIndex.from_arrays([['label'], ['']])    # needed for merge\n",
+    "mfcc_merged = pd.merge(mfcc_meta, mfcc_aggregated, left_index=True, right_index=True)\n",
+    "\n",
+    "# reduce multi index to single index\n",
+    "one_level_cols = ['_'.join([str(el) for el in col]) for col in mfcc_merged.columns[1:]]\n",
+    "one_level_cols.insert(0, \"label\")\n",
+    "\n",
+    "mfcc_merged.columns = pd.Index(one_level_cols)\n",
+    "mfcc_merged = mfcc_merged.reset_index()\n",
+    "mfcc_merged"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.339271068Z",
+     "start_time": "2023-10-10T20:43:33.447974674Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 4. Split the Features into Train and Test Set"
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "outputs": [
+    {
+     "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  False\n..                 ...    ...\n395        rock_95.mp3   True\n396        rock_96.mp3   True\n397        rock_97.mp3   True\n398        rock_98.mp3  False\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>False</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>True</td>\n    </tr>\n    <tr>\n      <th>398</th>\n      <td>rock_98.mp3</td>\n      <td>False</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>"
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "features = mfcc_merged\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 = pd.concat([split_true, split_false]) \\\n",
+    "    .sort_values(\"filename\") \\\n",
+    "    .reset_index(drop=True)\n",
+    "split"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.483050623Z",
+     "start_time": "2023-10-10T20:43:37.341442870Z"
+    }
+   }
+  },
+  {
+   "cell_type": "markdown",
+   "source": [
+    "## 5: Machine Learning model training and evaluation"
+   ],
+   "metadata": {
+    "collapsed": false
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "                       label       0_min       0_max      0_mean      0_std  \\\nfilename                                                                      \nclassical_1.mp3    classical -530.784363 -163.308350 -302.203156  51.142183   \nclassical_10.mp3   classical -562.857849  -96.164795 -219.259018  53.561839   \nclassical_100.mp3  classical -536.237366  -61.608826 -177.804108  83.381622   \nclassical_11.mp3   classical -536.457458 -120.429665 -222.126312  76.246992   \nclassical_12.mp3   classical -562.675232 -148.133560 -270.975403  52.191182   \n...                      ...         ...         ...         ...        ...   \nrock_95.mp3             rock -553.110107   -5.218835 -193.506042  76.869437   \nrock_96.mp3             rock -541.236023   27.163332 -119.113991  58.420684   \nrock_97.mp3             rock -518.494995   58.526745  -66.267746  65.635619   \nrock_98.mp3             rock -518.643066   53.555115  -45.734516  52.444200   \nrock_99.mp3             rock -544.703125   75.612129  -49.380943  54.045627   \n\n                     0_skew      1_min       1_max      1_mean      1_std  \\\nfilename                                                                    \nclassical_1.mp3   -0.468374   0.000000  178.751617  111.332344  24.847562   \nclassical_10.mp3  -0.772320   0.029056  259.632721  215.094193  18.388131   \nclassical_100.mp3 -2.587179   0.000000  190.475891  112.471710  27.277553   \nclassical_11.mp3  -2.402419   0.000000  159.425751   99.853645  21.916948   \nclassical_12.mp3  -0.366587   0.000000  194.264160  148.226654  19.305008   \n...                     ...        ...         ...         ...        ...   \nrock_95.mp3       -0.201055 -89.948746  201.180450  111.724190  36.463584   \nrock_96.mp3       -0.957699  -7.415959  210.492462  125.453690  31.908870   \nrock_97.mp3       -0.898026 -58.824409  175.201355   99.288261  25.158417   \nrock_98.mp3       -1.705641   0.000000  187.042725   96.440872  24.137702   \nrock_99.mp3       -0.863093 -32.930649  191.735382   93.971237  33.410221   \n\n                   ...     38_max   38_mean     38_std   38_skew     39_min  \\\nfilename           ...                                                        \nclassical_1.mp3    ...  47.308060 -3.713503  16.553984  0.230691 -46.794479   \nclassical_10.mp3   ...  29.811110  0.484271   8.660648 -0.479016 -28.989979   \nclassical_100.mp3  ...  27.610388 -0.333233   8.185075  0.208425 -38.095375   \nclassical_11.mp3   ...  31.500881 -3.781627   9.191043  0.260886 -22.667439   \nclassical_12.mp3   ...  28.490644 -6.242015  10.546545  0.341848 -25.040886   \n...                ...        ...       ...        ...       ...        ...   \nrock_95.mp3        ...  22.451445 -7.234633   8.471853  0.753855 -24.712723   \nrock_96.mp3        ...  28.087940 -9.704238   8.447620  0.112760 -38.147888   \nrock_97.mp3        ...  26.325895 -5.722826   7.727378  0.207489 -29.497524   \nrock_98.mp3        ...   8.714736 -9.511492   5.551820 -0.025604 -23.020082   \nrock_99.mp3        ...  17.050608 -5.296690   5.894962  0.390705 -20.983192   \n\n                      39_max   39_mean     39_std   39_skew  train  \nfilename                                                            \nclassical_1.mp3    49.352516 -2.282116  15.285639  0.171462   True  \nclassical_10.mp3   27.533707  0.952658  10.477735 -0.185771   True  \nclassical_100.mp3  31.397882 -1.494916  10.917299  0.020984   True  \nclassical_11.mp3   50.992905  1.600777  10.125545  0.595763   True  \nclassical_12.mp3   46.878204  1.844494  11.160392  0.503120  False  \n...                      ...       ...        ...       ...    ...  \nrock_95.mp3        23.410387 -4.502398   6.687983  0.238807   True  \nrock_96.mp3        21.814400 -8.249507   7.807756  0.071968   True  \nrock_97.mp3        25.410656 -3.356615   8.170526  0.160330   True  \nrock_98.mp3        13.948639 -2.664985   5.051498 -0.258407  False  \nrock_99.mp3        29.312021 -0.321836   6.571660  0.384794  False  \n\n[400 rows x 202 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>label</th>\n      <th>0_min</th>\n      <th>0_max</th>\n      <th>0_mean</th>\n      <th>0_std</th>\n      <th>0_skew</th>\n      <th>1_min</th>\n      <th>1_max</th>\n      <th>1_mean</th>\n      <th>1_std</th>\n      <th>...</th>\n      <th>38_max</th>\n      <th>38_mean</th>\n      <th>38_std</th>\n      <th>38_skew</th>\n      <th>39_min</th>\n      <th>39_max</th>\n      <th>39_mean</th>\n      <th>39_std</th>\n      <th>39_skew</th>\n      <th>train</th>\n    </tr>\n    <tr>\n      <th>filename</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>classical_1.mp3</th>\n      <td>classical</td>\n      <td>-530.784363</td>\n      <td>-163.308350</td>\n      <td>-302.203156</td>\n      <td>51.142183</td>\n      <td>-0.468374</td>\n      <td>0.000000</td>\n      <td>178.751617</td>\n      <td>111.332344</td>\n      <td>24.847562</td>\n      <td>...</td>\n      <td>47.308060</td>\n      <td>-3.713503</td>\n      <td>16.553984</td>\n      <td>0.230691</td>\n      <td>-46.794479</td>\n      <td>49.352516</td>\n      <td>-2.282116</td>\n      <td>15.285639</td>\n      <td>0.171462</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>classical_10.mp3</th>\n      <td>classical</td>\n      <td>-562.857849</td>\n      <td>-96.164795</td>\n      <td>-219.259018</td>\n      <td>53.561839</td>\n      <td>-0.772320</td>\n      <td>0.029056</td>\n      <td>259.632721</td>\n      <td>215.094193</td>\n      <td>18.388131</td>\n      <td>...</td>\n      <td>29.811110</td>\n      <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>0.952658</td>\n      <td>10.477735</td>\n      <td>-0.185771</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>classical_100.mp3</th>\n      <td>classical</td>\n      <td>-536.237366</td>\n      <td>-61.608826</td>\n      <td>-177.804108</td>\n      <td>83.381622</td>\n      <td>-2.587179</td>\n      <td>0.000000</td>\n      <td>190.475891</td>\n      <td>112.471710</td>\n      <td>27.277553</td>\n      <td>...</td>\n      <td>27.610388</td>\n      <td>-0.333233</td>\n      <td>8.185075</td>\n      <td>0.208425</td>\n      <td>-38.095375</td>\n      <td>31.397882</td>\n      <td>-1.494916</td>\n      <td>10.917299</td>\n      <td>0.020984</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>classical_11.mp3</th>\n      <td>classical</td>\n      <td>-536.457458</td>\n      <td>-120.429665</td>\n      <td>-222.126312</td>\n      <td>76.246992</td>\n      <td>-2.402419</td>\n      <td>0.000000</td>\n      <td>159.425751</td>\n      <td>99.853645</td>\n      <td>21.916948</td>\n      <td>...</td>\n      <td>31.500881</td>\n      <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>1.600777</td>\n      <td>10.125545</td>\n      <td>0.595763</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>classical_12.mp3</th>\n      <td>classical</td>\n      <td>-562.675232</td>\n      <td>-148.133560</td>\n      <td>-270.975403</td>\n      <td>52.191182</td>\n      <td>-0.366587</td>\n      <td>0.000000</td>\n      <td>194.264160</td>\n      <td>148.226654</td>\n      <td>19.305008</td>\n      <td>...</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>46.878204</td>\n      <td>1.844494</td>\n      <td>11.160392</td>\n      <td>0.503120</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>rock_95.mp3</th>\n      <td>rock</td>\n      <td>-553.110107</td>\n      <td>-5.218835</td>\n      <td>-193.506042</td>\n      <td>76.869437</td>\n      <td>-0.201055</td>\n      <td>-89.948746</td>\n      <td>201.180450</td>\n      <td>111.724190</td>\n      <td>36.463584</td>\n      <td>...</td>\n      <td>22.451445</td>\n      <td>-7.234633</td>\n      <td>8.471853</td>\n      <td>0.753855</td>\n      <td>-24.712723</td>\n      <td>23.410387</td>\n      <td>-4.502398</td>\n      <td>6.687983</td>\n      <td>0.238807</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>rock_96.mp3</th>\n      <td>rock</td>\n      <td>-541.236023</td>\n      <td>27.163332</td>\n      <td>-119.113991</td>\n      <td>58.420684</td>\n      <td>-0.957699</td>\n      <td>-7.415959</td>\n      <td>210.492462</td>\n      <td>125.453690</td>\n      <td>31.908870</td>\n      <td>...</td>\n      <td>28.087940</td>\n      <td>-9.704238</td>\n      <td>8.447620</td>\n      <td>0.112760</td>\n      <td>-38.147888</td>\n      <td>21.814400</td>\n      <td>-8.249507</td>\n      <td>7.807756</td>\n      <td>0.071968</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>rock_97.mp3</th>\n      <td>rock</td>\n      <td>-518.494995</td>\n      <td>58.526745</td>\n      <td>-66.267746</td>\n      <td>65.635619</td>\n      <td>-0.898026</td>\n      <td>-58.824409</td>\n      <td>175.201355</td>\n      <td>99.288261</td>\n      <td>25.158417</td>\n      <td>...</td>\n      <td>26.325895</td>\n      <td>-5.722826</td>\n      <td>7.727378</td>\n      <td>0.207489</td>\n      <td>-29.497524</td>\n      <td>25.410656</td>\n      <td>-3.356615</td>\n      <td>8.170526</td>\n      <td>0.160330</td>\n      <td>True</td>\n    </tr>\n    <tr>\n      <th>rock_98.mp3</th>\n      <td>rock</td>\n      <td>-518.643066</td>\n      <td>53.555115</td>\n      <td>-45.734516</td>\n      <td>52.444200</td>\n      <td>-1.705641</td>\n      <td>0.000000</td>\n      <td>187.042725</td>\n      <td>96.440872</td>\n      <td>24.137702</td>\n      <td>...</td>\n      <td>8.714736</td>\n      <td>-9.511492</td>\n      <td>5.551820</td>\n      <td>-0.025604</td>\n      <td>-23.020082</td>\n      <td>13.948639</td>\n      <td>-2.664985</td>\n      <td>5.051498</td>\n      <td>-0.258407</td>\n      <td>False</td>\n    </tr>\n    <tr>\n      <th>rock_99.mp3</th>\n      <td>rock</td>\n      <td>-544.703125</td>\n      <td>75.612129</td>\n      <td>-49.380943</td>\n      <td>54.045627</td>\n      <td>-0.863093</td>\n      <td>-32.930649</td>\n      <td>191.735382</td>\n      <td>93.971237</td>\n      <td>33.410221</td>\n      <td>...</td>\n      <td>17.050608</td>\n      <td>-5.296690</td>\n      <td>5.894962</td>\n      <td>0.390705</td>\n      <td>-20.983192</td>\n      <td>29.312021</td>\n      <td>-0.321836</td>\n      <td>6.571660</td>\n      <td>0.384794</td>\n      <td>False</td>\n    </tr>\n  </tbody>\n</table>\n<p>400 rows × 202 columns</p>\n</div>"
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "joined = pd.merge(features, split, on=\"filename\").set_index(\"filename\")\n",
+    "joined"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.521919073Z",
+     "start_time": "2023-10-10T20:43:37.383043167Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "                       label       0_min       0_max      0_mean      0_std  \\\nfilename                                                                      \nclassical_1.mp3    classical -530.784363 -163.308350 -302.203156  51.142183   \nclassical_10.mp3   classical -562.857849  -96.164795 -219.259018  53.561839   \nclassical_100.mp3  classical -536.237366  -61.608826 -177.804108  83.381622   \nclassical_11.mp3   classical -536.457458 -120.429665 -222.126312  76.246992   \nclassical_13.mp3   classical -637.720642 -177.713959 -361.834045  71.310080   \n...                      ...         ...         ...         ...        ...   \nrock_93.mp3             rock -570.466492  -26.067888 -302.483093  96.569376   \nrock_94.mp3             rock -531.794250   39.474583  -78.520462  51.256666   \nrock_95.mp3             rock -553.110107   -5.218835 -193.506042  76.869437   \nrock_96.mp3             rock -541.236023   27.163332 -119.113991  58.420684   \nrock_97.mp3             rock -518.494995   58.526745  -66.267746  65.635619   \n\n                     0_skew      1_min       1_max      1_mean      1_std  \\\nfilename                                                                    \nclassical_1.mp3   -0.468374   0.000000  178.751617  111.332344  24.847562   \nclassical_10.mp3  -0.772320   0.029056  259.632721  215.094193  18.388131   \nclassical_100.mp3 -2.587179   0.000000  190.475891  112.471710  27.277553   \nclassical_11.mp3  -2.402419   0.000000  159.425751   99.853645  21.916948   \nclassical_13.mp3   0.008326   0.000000  257.162842  211.556549  20.347035   \n...                     ...        ...         ...         ...        ...   \nrock_93.mp3        0.159026 -89.999680  211.889099  103.686363  40.373591   \nrock_94.mp3       -0.846796 -15.139265  177.080322   79.627045  33.557076   \nrock_95.mp3       -0.201055 -89.948746  201.180450  111.724190  36.463584   \nrock_96.mp3       -0.957699  -7.415959  210.492462  125.453690  31.908870   \nrock_97.mp3       -0.898026 -58.824409  175.201355   99.288261  25.158417   \n\n                   ...     38_min     38_max   38_mean     38_std   38_skew  \\\nfilename           ...                                                        \nclassical_1.mp3    ... -44.098068  47.308060 -3.713503  16.553984  0.230691   \nclassical_10.mp3   ... -27.458416  29.811110  0.484271   8.660648 -0.479016   \nclassical_100.mp3  ... -27.335688  27.610388 -0.333233   8.185075  0.208425   \nclassical_11.mp3   ... -31.774948  31.500881 -3.781627   9.191043  0.260886   \nclassical_13.mp3   ... -24.728806  18.424034 -0.275736   7.026148 -0.640964   \n...                ...        ...        ...       ...        ...       ...   \nrock_93.mp3        ... -28.903784  35.712753  2.073339  10.995769  0.249798   \nrock_94.mp3        ... -34.662369  26.375679 -4.778466   6.754501  0.157858   \nrock_95.mp3        ... -27.043941  22.451445 -7.234633   8.471853  0.753855   \nrock_96.mp3        ... -37.584858  28.087940 -9.704238   8.447620  0.112760   \nrock_97.mp3        ... -29.620445  26.325895 -5.722826   7.727378  0.207489   \n\n                      39_min     39_max   39_mean     39_std   39_skew  \nfilename                                                                \nclassical_1.mp3   -46.794479  49.352516 -2.282116  15.285639  0.171462  \nclassical_10.mp3  -28.989979  27.533707  0.952658  10.477735 -0.185771  \nclassical_100.mp3 -38.095375  31.397882 -1.494916  10.917299  0.020984  \nclassical_11.mp3  -22.667439  50.992905  1.600777  10.125545  0.595763  \nclassical_13.mp3  -24.319565  18.439264 -2.147022   8.171929  0.009566  \n...                      ...        ...       ...        ...       ...  \nrock_93.mp3       -30.178169  30.612564 -4.677735   8.877041  0.149639  \nrock_94.mp3       -22.063726  29.165359  1.443975   6.737420 -0.092049  \nrock_95.mp3       -24.712723  23.410387 -4.502398   6.687983  0.238807  \nrock_96.mp3       -38.147888  21.814400 -8.249507   7.807756  0.071968  \nrock_97.mp3       -29.497524  25.410656 -3.356615   8.170526  0.160330  \n\n[320 rows x 201 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>label</th>\n      <th>0_min</th>\n      <th>0_max</th>\n      <th>0_mean</th>\n      <th>0_std</th>\n      <th>0_skew</th>\n      <th>1_min</th>\n      <th>1_max</th>\n      <th>1_mean</th>\n      <th>1_std</th>\n      <th>...</th>\n      <th>38_min</th>\n      <th>38_max</th>\n      <th>38_mean</th>\n      <th>38_std</th>\n      <th>38_skew</th>\n      <th>39_min</th>\n      <th>39_max</th>\n      <th>39_mean</th>\n      <th>39_std</th>\n      <th>39_skew</th>\n    </tr>\n    <tr>\n      <th>filename</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>classical_1.mp3</th>\n      <td>classical</td>\n      <td>-530.784363</td>\n      <td>-163.308350</td>\n      <td>-302.203156</td>\n      <td>51.142183</td>\n      <td>-0.468374</td>\n      <td>0.000000</td>\n      <td>178.751617</td>\n      <td>111.332344</td>\n      <td>24.847562</td>\n      <td>...</td>\n      <td>-44.098068</td>\n      <td>47.308060</td>\n      <td>-3.713503</td>\n      <td>16.553984</td>\n      <td>0.230691</td>\n      <td>-46.794479</td>\n      <td>49.352516</td>\n      <td>-2.282116</td>\n      <td>15.285639</td>\n      <td>0.171462</td>\n    </tr>\n    <tr>\n      <th>classical_10.mp3</th>\n      <td>classical</td>\n      <td>-562.857849</td>\n      <td>-96.164795</td>\n      <td>-219.259018</td>\n      <td>53.561839</td>\n      <td>-0.772320</td>\n      <td>0.029056</td>\n      <td>259.632721</td>\n      <td>215.094193</td>\n      <td>18.388131</td>\n      <td>...</td>\n      <td>-27.458416</td>\n      <td>29.811110</td>\n      <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>0.952658</td>\n      <td>10.477735</td>\n      <td>-0.185771</td>\n    </tr>\n    <tr>\n      <th>classical_100.mp3</th>\n      <td>classical</td>\n      <td>-536.237366</td>\n      <td>-61.608826</td>\n      <td>-177.804108</td>\n      <td>83.381622</td>\n      <td>-2.587179</td>\n      <td>0.000000</td>\n      <td>190.475891</td>\n      <td>112.471710</td>\n      <td>27.277553</td>\n      <td>...</td>\n      <td>-27.335688</td>\n      <td>27.610388</td>\n      <td>-0.333233</td>\n      <td>8.185075</td>\n      <td>0.208425</td>\n      <td>-38.095375</td>\n      <td>31.397882</td>\n      <td>-1.494916</td>\n      <td>10.917299</td>\n      <td>0.020984</td>\n    </tr>\n    <tr>\n      <th>classical_11.mp3</th>\n      <td>classical</td>\n      <td>-536.457458</td>\n      <td>-120.429665</td>\n      <td>-222.126312</td>\n      <td>76.246992</td>\n      <td>-2.402419</td>\n      <td>0.000000</td>\n      <td>159.425751</td>\n      <td>99.853645</td>\n      <td>21.916948</td>\n      <td>...</td>\n      <td>-31.774948</td>\n      <td>31.500881</td>\n      <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>1.600777</td>\n      <td>10.125545</td>\n      <td>0.595763</td>\n    </tr>\n    <tr>\n      <th>classical_13.mp3</th>\n      <td>classical</td>\n      <td>-637.720642</td>\n      <td>-177.713959</td>\n      <td>-361.834045</td>\n      <td>71.310080</td>\n      <td>0.008326</td>\n      <td>0.000000</td>\n      <td>257.162842</td>\n      <td>211.556549</td>\n      <td>20.347035</td>\n      <td>...</td>\n      <td>-24.728806</td>\n      <td>18.424034</td>\n      <td>-0.275736</td>\n      <td>7.026148</td>\n      <td>-0.640964</td>\n      <td>-24.319565</td>\n      <td>18.439264</td>\n      <td>-2.147022</td>\n      <td>8.171929</td>\n      <td>0.009566</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>rock_93.mp3</th>\n      <td>rock</td>\n      <td>-570.466492</td>\n      <td>-26.067888</td>\n      <td>-302.483093</td>\n      <td>96.569376</td>\n      <td>0.159026</td>\n      <td>-89.999680</td>\n      <td>211.889099</td>\n      <td>103.686363</td>\n      <td>40.373591</td>\n      <td>...</td>\n      <td>-28.903784</td>\n      <td>35.712753</td>\n      <td>2.073339</td>\n      <td>10.995769</td>\n      <td>0.249798</td>\n      <td>-30.178169</td>\n      <td>30.612564</td>\n      <td>-4.677735</td>\n      <td>8.877041</td>\n      <td>0.149639</td>\n    </tr>\n    <tr>\n      <th>rock_94.mp3</th>\n      <td>rock</td>\n      <td>-531.794250</td>\n      <td>39.474583</td>\n      <td>-78.520462</td>\n      <td>51.256666</td>\n      <td>-0.846796</td>\n      <td>-15.139265</td>\n      <td>177.080322</td>\n      <td>79.627045</td>\n      <td>33.557076</td>\n      <td>...</td>\n      <td>-34.662369</td>\n      <td>26.375679</td>\n      <td>-4.778466</td>\n      <td>6.754501</td>\n      <td>0.157858</td>\n      <td>-22.063726</td>\n      <td>29.165359</td>\n      <td>1.443975</td>\n      <td>6.737420</td>\n      <td>-0.092049</td>\n    </tr>\n    <tr>\n      <th>rock_95.mp3</th>\n      <td>rock</td>\n      <td>-553.110107</td>\n      <td>-5.218835</td>\n      <td>-193.506042</td>\n      <td>76.869437</td>\n      <td>-0.201055</td>\n      <td>-89.948746</td>\n      <td>201.180450</td>\n      <td>111.724190</td>\n      <td>36.463584</td>\n      <td>...</td>\n      <td>-27.043941</td>\n      <td>22.451445</td>\n      <td>-7.234633</td>\n      <td>8.471853</td>\n      <td>0.753855</td>\n      <td>-24.712723</td>\n      <td>23.410387</td>\n      <td>-4.502398</td>\n      <td>6.687983</td>\n      <td>0.238807</td>\n    </tr>\n    <tr>\n      <th>rock_96.mp3</th>\n      <td>rock</td>\n      <td>-541.236023</td>\n      <td>27.163332</td>\n      <td>-119.113991</td>\n      <td>58.420684</td>\n      <td>-0.957699</td>\n      <td>-7.415959</td>\n      <td>210.492462</td>\n      <td>125.453690</td>\n      <td>31.908870</td>\n      <td>...</td>\n      <td>-37.584858</td>\n      <td>28.087940</td>\n      <td>-9.704238</td>\n      <td>8.447620</td>\n      <td>0.112760</td>\n      <td>-38.147888</td>\n      <td>21.814400</td>\n      <td>-8.249507</td>\n      <td>7.807756</td>\n      <td>0.071968</td>\n    </tr>\n    <tr>\n      <th>rock_97.mp3</th>\n      <td>rock</td>\n      <td>-518.494995</td>\n      <td>58.526745</td>\n      <td>-66.267746</td>\n      <td>65.635619</td>\n      <td>-0.898026</td>\n      <td>-58.824409</td>\n      <td>175.201355</td>\n      <td>99.288261</td>\n      <td>25.158417</td>\n      <td>...</td>\n      <td>-29.620445</td>\n      <td>26.325895</td>\n      <td>-5.722826</td>\n      <td>7.727378</td>\n      <td>0.207489</td>\n      <td>-29.497524</td>\n      <td>25.410656</td>\n      <td>-3.356615</td>\n      <td>8.170526</td>\n      <td>0.160330</td>\n    </tr>\n  </tbody>\n</table>\n<p>320 rows × 201 columns</p>\n</div>"
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "train: DataFrame = joined[joined[\"train\"] == True].drop(\"train\", axis=1)\n",
+    "train"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.523494609Z",
+     "start_time": "2023-10-10T20:43:37.426426832Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "                      label       0_min       0_max      0_mean      0_std  \\\nfilename                                                                     \nclassical_12.mp3  classical -562.675232 -148.133560 -270.975403  52.191182   \nclassical_18.mp3  classical -570.243713 -188.959915 -287.521362  35.322711   \nclassical_19.mp3  classical -543.642334 -106.038223 -216.909943  61.317534   \nclassical_2.mp3   classical -549.406494 -192.532059 -293.008972  27.207027   \nclassical_22.mp3  classical -541.936157 -226.866425 -335.226593  50.647623   \n...                     ...         ...         ...         ...        ...   \nrock_82.mp3            rock -544.772827  -57.477421 -285.930237  81.922620   \nrock_84.mp3            rock -553.272583   33.457363 -112.009064  65.035953   \nrock_9.mp3             rock -551.421570   43.786930  -97.513893  78.041649   \nrock_98.mp3            rock -518.643066   53.555115  -45.734516  52.444200   \nrock_99.mp3            rock -544.703125   75.612129  -49.380943  54.045627   \n\n                    0_skew      1_min       1_max      1_mean      1_std  ...  \\\nfilename                                                                  ...   \nclassical_12.mp3 -0.366587   0.000000  194.264160  148.226654  19.305008  ...   \nclassical_18.mp3 -0.559489   0.714611  243.072388  207.617828  17.594885  ...   \nclassical_19.mp3 -3.473125   0.000000  151.947662   93.405411  22.029233  ...   \nclassical_2.mp3  -0.426848   0.000000  231.037369  198.662506  14.957660  ...   \nclassical_22.mp3 -0.545184   0.000000  176.146393  133.592239  17.983436  ...   \n...                    ...        ...         ...         ...        ...  ...   \nrock_82.mp3       0.506014 -83.866180  177.183060  105.448738  35.660641  ...   \nrock_84.mp3      -0.535031  -6.800635  195.284622  105.075165  32.223748  ...   \nrock_9.mp3       -0.795955 -39.516315  157.909393   76.734253  26.308925  ...   \nrock_98.mp3      -1.705641   0.000000  187.042725   96.440872  24.137702  ...   \nrock_99.mp3      -0.863093 -32.930649  191.735382   93.971237  33.410221  ...   \n\n                     38_min     38_max   38_mean     38_std   38_skew  \\\nfilename                                                                \nclassical_12.mp3 -44.843815  28.490644 -6.242015  10.546545  0.341848   \nclassical_18.mp3 -21.249855  22.553038 -1.832725   6.320877  0.191670   \nclassical_19.mp3 -27.029383  30.682745  3.342259   8.420860  0.043171   \nclassical_2.mp3  -25.912935  24.293318  0.746096   8.240027 -0.022513   \nclassical_22.mp3 -29.110729  27.870188 -0.569063   8.987627  0.238096   \n...                     ...        ...       ...        ...       ...   \nrock_82.mp3      -31.321337  29.233349 -2.918372   8.329695  0.080753   \nrock_84.mp3      -28.911598  27.619001 -5.295718   6.987569  0.206062   \nrock_9.mp3       -38.184456  27.128735 -2.393547   7.633860  0.357629   \nrock_98.mp3      -26.967852   8.714736 -9.511492   5.551820 -0.025604   \nrock_99.mp3      -21.929403  17.050608 -5.296690   5.894962  0.390705   \n\n                     39_min     39_max   39_mean     39_std   39_skew  \nfilename                                                               \nclassical_12.mp3 -25.040886  46.878204  1.844494  11.160392  0.503120  \nclassical_18.mp3 -17.271332  23.015621 -0.735780   6.175781  0.406759  \nclassical_19.mp3 -25.900253  36.766388  2.389575  10.099726  0.140336  \nclassical_2.mp3  -18.561390  23.484133  3.115819   7.220346  0.242364  \nclassical_22.mp3 -18.535694  41.965923  3.331284   9.619688  0.652851  \n...                     ...        ...       ...        ...       ...  \nrock_82.mp3      -30.654737  29.915272 -2.396760   7.691486  0.180867  \nrock_84.mp3      -21.169910  31.117376 -0.642526   6.866395  0.398194  \nrock_9.mp3       -27.389053  24.929546 -1.376936   5.924625 -0.053863  \nrock_98.mp3      -23.020082  13.948639 -2.664985   5.051498 -0.258407  \nrock_99.mp3      -20.983192  29.312021 -0.321836   6.571660  0.384794  \n\n[80 rows x 201 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>label</th>\n      <th>0_min</th>\n      <th>0_max</th>\n      <th>0_mean</th>\n      <th>0_std</th>\n      <th>0_skew</th>\n      <th>1_min</th>\n      <th>1_max</th>\n      <th>1_mean</th>\n      <th>1_std</th>\n      <th>...</th>\n      <th>38_min</th>\n      <th>38_max</th>\n      <th>38_mean</th>\n      <th>38_std</th>\n      <th>38_skew</th>\n      <th>39_min</th>\n      <th>39_max</th>\n      <th>39_mean</th>\n      <th>39_std</th>\n      <th>39_skew</th>\n    </tr>\n    <tr>\n      <th>filename</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>classical_12.mp3</th>\n      <td>classical</td>\n      <td>-562.675232</td>\n      <td>-148.133560</td>\n      <td>-270.975403</td>\n      <td>52.191182</td>\n      <td>-0.366587</td>\n      <td>0.000000</td>\n      <td>194.264160</td>\n      <td>148.226654</td>\n      <td>19.305008</td>\n      <td>...</td>\n      <td>-44.843815</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>46.878204</td>\n      <td>1.844494</td>\n      <td>11.160392</td>\n      <td>0.503120</td>\n    </tr>\n    <tr>\n      <th>classical_18.mp3</th>\n      <td>classical</td>\n      <td>-570.243713</td>\n      <td>-188.959915</td>\n      <td>-287.521362</td>\n      <td>35.322711</td>\n      <td>-0.559489</td>\n      <td>0.714611</td>\n      <td>243.072388</td>\n      <td>207.617828</td>\n      <td>17.594885</td>\n      <td>...</td>\n      <td>-21.249855</td>\n      <td>22.553038</td>\n      <td>-1.832725</td>\n      <td>6.320877</td>\n      <td>0.191670</td>\n      <td>-17.271332</td>\n      <td>23.015621</td>\n      <td>-0.735780</td>\n      <td>6.175781</td>\n      <td>0.406759</td>\n    </tr>\n    <tr>\n      <th>classical_19.mp3</th>\n      <td>classical</td>\n      <td>-543.642334</td>\n      <td>-106.038223</td>\n      <td>-216.909943</td>\n      <td>61.317534</td>\n      <td>-3.473125</td>\n      <td>0.000000</td>\n      <td>151.947662</td>\n      <td>93.405411</td>\n      <td>22.029233</td>\n      <td>...</td>\n      <td>-27.029383</td>\n      <td>30.682745</td>\n      <td>3.342259</td>\n      <td>8.420860</td>\n      <td>0.043171</td>\n      <td>-25.900253</td>\n      <td>36.766388</td>\n      <td>2.389575</td>\n      <td>10.099726</td>\n      <td>0.140336</td>\n    </tr>\n    <tr>\n      <th>classical_2.mp3</th>\n      <td>classical</td>\n      <td>-549.406494</td>\n      <td>-192.532059</td>\n      <td>-293.008972</td>\n      <td>27.207027</td>\n      <td>-0.426848</td>\n      <td>0.000000</td>\n      <td>231.037369</td>\n      <td>198.662506</td>\n      <td>14.957660</td>\n      <td>...</td>\n      <td>-25.912935</td>\n      <td>24.293318</td>\n      <td>0.746096</td>\n      <td>8.240027</td>\n      <td>-0.022513</td>\n      <td>-18.561390</td>\n      <td>23.484133</td>\n      <td>3.115819</td>\n      <td>7.220346</td>\n      <td>0.242364</td>\n    </tr>\n    <tr>\n      <th>classical_22.mp3</th>\n      <td>classical</td>\n      <td>-541.936157</td>\n      <td>-226.866425</td>\n      <td>-335.226593</td>\n      <td>50.647623</td>\n      <td>-0.545184</td>\n      <td>0.000000</td>\n      <td>176.146393</td>\n      <td>133.592239</td>\n      <td>17.983436</td>\n      <td>...</td>\n      <td>-29.110729</td>\n      <td>27.870188</td>\n      <td>-0.569063</td>\n      <td>8.987627</td>\n      <td>0.238096</td>\n      <td>-18.535694</td>\n      <td>41.965923</td>\n      <td>3.331284</td>\n      <td>9.619688</td>\n      <td>0.652851</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>rock_82.mp3</th>\n      <td>rock</td>\n      <td>-544.772827</td>\n      <td>-57.477421</td>\n      <td>-285.930237</td>\n      <td>81.922620</td>\n      <td>0.506014</td>\n      <td>-83.866180</td>\n      <td>177.183060</td>\n      <td>105.448738</td>\n      <td>35.660641</td>\n      <td>...</td>\n      <td>-31.321337</td>\n      <td>29.233349</td>\n      <td>-2.918372</td>\n      <td>8.329695</td>\n      <td>0.080753</td>\n      <td>-30.654737</td>\n      <td>29.915272</td>\n      <td>-2.396760</td>\n      <td>7.691486</td>\n      <td>0.180867</td>\n    </tr>\n    <tr>\n      <th>rock_84.mp3</th>\n      <td>rock</td>\n      <td>-553.272583</td>\n      <td>33.457363</td>\n      <td>-112.009064</td>\n      <td>65.035953</td>\n      <td>-0.535031</td>\n      <td>-6.800635</td>\n      <td>195.284622</td>\n      <td>105.075165</td>\n      <td>32.223748</td>\n      <td>...</td>\n      <td>-28.911598</td>\n      <td>27.619001</td>\n      <td>-5.295718</td>\n      <td>6.987569</td>\n      <td>0.206062</td>\n      <td>-21.169910</td>\n      <td>31.117376</td>\n      <td>-0.642526</td>\n      <td>6.866395</td>\n      <td>0.398194</td>\n    </tr>\n    <tr>\n      <th>rock_9.mp3</th>\n      <td>rock</td>\n      <td>-551.421570</td>\n      <td>43.786930</td>\n      <td>-97.513893</td>\n      <td>78.041649</td>\n      <td>-0.795955</td>\n      <td>-39.516315</td>\n      <td>157.909393</td>\n      <td>76.734253</td>\n      <td>26.308925</td>\n      <td>...</td>\n      <td>-38.184456</td>\n      <td>27.128735</td>\n      <td>-2.393547</td>\n      <td>7.633860</td>\n      <td>0.357629</td>\n      <td>-27.389053</td>\n      <td>24.929546</td>\n      <td>-1.376936</td>\n      <td>5.924625</td>\n      <td>-0.053863</td>\n    </tr>\n    <tr>\n      <th>rock_98.mp3</th>\n      <td>rock</td>\n      <td>-518.643066</td>\n      <td>53.555115</td>\n      <td>-45.734516</td>\n      <td>52.444200</td>\n      <td>-1.705641</td>\n      <td>0.000000</td>\n      <td>187.042725</td>\n      <td>96.440872</td>\n      <td>24.137702</td>\n      <td>...</td>\n      <td>-26.967852</td>\n      <td>8.714736</td>\n      <td>-9.511492</td>\n      <td>5.551820</td>\n      <td>-0.025604</td>\n      <td>-23.020082</td>\n      <td>13.948639</td>\n      <td>-2.664985</td>\n      <td>5.051498</td>\n      <td>-0.258407</td>\n    </tr>\n    <tr>\n      <th>rock_99.mp3</th>\n      <td>rock</td>\n      <td>-544.703125</td>\n      <td>75.612129</td>\n      <td>-49.380943</td>\n      <td>54.045627</td>\n      <td>-0.863093</td>\n      <td>-32.930649</td>\n      <td>191.735382</td>\n      <td>93.971237</td>\n      <td>33.410221</td>\n      <td>...</td>\n      <td>-21.929403</td>\n      <td>17.050608</td>\n      <td>-5.296690</td>\n      <td>5.894962</td>\n      <td>0.390705</td>\n      <td>-20.983192</td>\n      <td>29.312021</td>\n      <td>-0.321836</td>\n      <td>6.571660</td>\n      <td>0.384794</td>\n    </tr>\n  </tbody>\n</table>\n<p>80 rows × 201 columns</p>\n</div>"
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "test: DataFrame = joined[joined[\"train\"] == False].drop(\"train\", axis=1)\n",
+    "test"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.532989116Z",
+     "start_time": "2023-10-10T20:43:37.469652946Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "(                        0_min       0_max      0_mean      0_std    0_skew  \\\n filename                                                                     \n classical_1.mp3   -530.784363 -163.308350 -302.203156  51.142183 -0.468374   \n classical_10.mp3  -562.857849  -96.164795 -219.259018  53.561839 -0.772320   \n classical_100.mp3 -536.237366  -61.608826 -177.804108  83.381622 -2.587179   \n classical_11.mp3  -536.457458 -120.429665 -222.126312  76.246992 -2.402419   \n classical_13.mp3  -637.720642 -177.713959 -361.834045  71.310080  0.008326   \n ...                       ...         ...         ...        ...       ...   \n rock_93.mp3       -570.466492  -26.067888 -302.483093  96.569376  0.159026   \n rock_94.mp3       -531.794250   39.474583  -78.520462  51.256666 -0.846796   \n rock_95.mp3       -553.110107   -5.218835 -193.506042  76.869437 -0.201055   \n rock_96.mp3       -541.236023   27.163332 -119.113991  58.420684 -0.957699   \n rock_97.mp3       -518.494995   58.526745  -66.267746  65.635619 -0.898026   \n \n                        1_min       1_max      1_mean      1_std    1_skew  \\\n filename                                                                    \n classical_1.mp3     0.000000  178.751617  111.332344  24.847562 -0.402642   \n classical_10.mp3    0.029056  259.632721  215.094193  18.388131 -1.528750   \n classical_100.mp3   0.000000  190.475891  112.471710  27.277553 -1.318523   \n classical_11.mp3    0.000000  159.425751   99.853645  21.916948 -1.176922   \n classical_13.mp3    0.000000  257.162842  211.556549  20.347035 -1.050120   \n ...                      ...         ...         ...        ...       ...   \n rock_93.mp3       -89.999680  211.889099  103.686363  40.373591 -1.760946   \n rock_94.mp3       -15.139265  177.080322   79.627045  33.557076  0.103628   \n rock_95.mp3       -89.948746  201.180450  111.724190  36.463584 -0.443224   \n rock_96.mp3        -7.415959  210.492462  125.453690  31.908870 -0.547468   \n rock_97.mp3       -58.824409  175.201355   99.288261  25.158417 -0.568056   \n \n                    ...     38_min     38_max   38_mean     38_std   38_skew  \\\n filename           ...                                                        \n classical_1.mp3    ... -44.098068  47.308060 -3.713503  16.553984  0.230691   \n classical_10.mp3   ... -27.458416  29.811110  0.484271   8.660648 -0.479016   \n classical_100.mp3  ... -27.335688  27.610388 -0.333233   8.185075  0.208425   \n classical_11.mp3   ... -31.774948  31.500881 -3.781627   9.191043  0.260886   \n classical_13.mp3   ... -24.728806  18.424034 -0.275736   7.026148 -0.640964   \n ...                ...        ...        ...       ...        ...       ...   \n rock_93.mp3        ... -28.903784  35.712753  2.073339  10.995769  0.249798   \n rock_94.mp3        ... -34.662369  26.375679 -4.778466   6.754501  0.157858   \n rock_95.mp3        ... -27.043941  22.451445 -7.234633   8.471853  0.753855   \n rock_96.mp3        ... -37.584858  28.087940 -9.704238   8.447620  0.112760   \n rock_97.mp3        ... -29.620445  26.325895 -5.722826   7.727378  0.207489   \n \n                       39_min     39_max   39_mean     39_std   39_skew  \n filename                                                                \n classical_1.mp3   -46.794479  49.352516 -2.282116  15.285639  0.171462  \n classical_10.mp3  -28.989979  27.533707  0.952658  10.477735 -0.185771  \n classical_100.mp3 -38.095375  31.397882 -1.494916  10.917299  0.020984  \n classical_11.mp3  -22.667439  50.992905  1.600777  10.125545  0.595763  \n classical_13.mp3  -24.319565  18.439264 -2.147022   8.171929  0.009566  \n ...                      ...        ...       ...        ...       ...  \n rock_93.mp3       -30.178169  30.612564 -4.677735   8.877041  0.149639  \n rock_94.mp3       -22.063726  29.165359  1.443975   6.737420 -0.092049  \n rock_95.mp3       -24.712723  23.410387 -4.502398   6.687983  0.238807  \n rock_96.mp3       -38.147888  21.814400 -8.249507   7.807756  0.071968  \n rock_97.mp3       -29.497524  25.410656 -3.356615   8.170526  0.160330  \n \n [320 rows x 200 columns],\n array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3,\n        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]))"
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# remove labels\n",
+    "X = train.drop(['label'], axis=1, errors='ignore')\n",
+    "\n",
+    "columns: Index = X.columns\n",
+    "classnames = np.sort(np.unique(joined.label.values)) # -> [\"classical\", \"electronic\", \"pop\", \"rock\"]\n",
+    "\n",
+    "# map classname to an index and create dicts for easy lookup in O(1)\n",
+    "classname2index = {}\n",
+    "index2classname = {}\n",
+    "\n",
+    "for i, classname in enumerate(classnames):\n",
+    "    classname2index[classname] = i\n",
+    "    index2classname[i] = classname\n",
+    "\n",
+    "# map label to label index\n",
+    "y = np.array([classname2index[classname] for classname in train.label.values])\n",
+    "\n",
+    "(X, y)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.537246329Z",
+     "start_time": "2023-10-10T20:43:37.469936549Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(320, 200)\n",
+      "(80, 200)\n",
+      "0.25\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n       1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,\n       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3])"
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "X_test = test.drop(['label'], axis=1, errors='ignore')\n",
+    "\n",
+    "print(X.shape)\n",
+    "print(X_test.shape)\n",
+    "print(X_test.shape[0] / X.shape[0])     # fraction of test sample\n",
+    "\n",
+    "y_test = np.array([classname2index[classname] for classname in test.label.values])\n",
+    "y_test"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.717205547Z",
+     "start_time": "2023-10-10T20:43:37.487249746Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "outputs": [
+    {
+     "data": {
+      "text/plain": "array([[ 0.42613404, -1.82530004, -1.35373394, ..., -0.72391099,\n         3.57791914,  0.11656626],\n       [-0.40732633, -0.95390951, -0.43778646, ...,  0.24817291,\n         1.42713353, -0.91164704],\n       [ 0.28443252, -0.50544138,  0.0199978 , ..., -0.48734903,\n         1.62376978, -0.31654845],\n       ...,\n       [-0.15402189,  0.22638917, -0.15339779, ..., -1.39112939,\n        -0.26818789,  0.31040331],\n       [ 0.15453761,  0.64664565,  0.66810948, ..., -2.51717512,\n         0.23273515, -0.16980445],\n       [ 0.74548507,  1.05368071,  1.25168761, ..., -1.0468092 ,\n         0.39501813,  0.08452671]])"
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# Standardize for PCA\n",
+    "scaler = StandardScaler()\n",
+    "X_standardized = scaler.fit_transform(X.values)\n",
+    "X_test_standardized = scaler.transform(X_test.values)\n",
+    "\n",
+    "X_standardized"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.742380165Z",
+     "start_time": "2023-10-10T20:43:37.512601397Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.8567747879571861\n",
+      "(320, 50)\n",
+      "(80, 50)\n",
+      "(320,)\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Reduce Dimensions via PCA\n",
+    "pca = PCA(n_components=50).fit(X_standardized)\n",
+    "X_pca = pca.transform(X_standardized)\n",
+    "X_test_pca = pca.transform(X_test_standardized)\n",
+    "\n",
+    "print(sum(pca.explained_variance_ratio_))\n",
+    "print(X_pca.shape)\n",
+    "print(X_test_pca.shape)\n",
+    "print(y.shape)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.742719199Z",
+     "start_time": "2023-10-10T20:43:37.556397316Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.765625\n",
+      "[[-7.47135617 -4.0735689  -1.75958109 ...  0.03567986  0.25908476\n",
+      "  -1.02348857]\n",
+      " [ 7.98657438 -0.32835412  1.61837082 ... -0.30170778 -1.12335641\n",
+      "   1.1826182 ]\n",
+      " [ 6.29134947 -2.71877979 -6.46515986 ... -0.69992826 -0.19818608\n",
+      "   0.11547002]\n",
+      " ...\n",
+      " [ 4.54103139 -1.40004059  3.28019036 ... -0.04582758 -1.81567251\n",
+      "   0.70422807]\n",
+      " [ 6.58645856 -0.91251805 -0.24337363 ...  1.56437846  1.11739736\n",
+      "   2.74055111]\n",
+      " [ 2.48429716 -4.80891624  4.67724279 ... -0.80355261  0.54566587\n",
+      "  -2.43086802]]\n",
+      "[3 0 3 2 3 0 1 2 0 3 0 0 0 1 2 1 2 3 2 1 1 0 3 0 0 0 3 1 1 3 3 2 3 1 2 2 0\n",
+      " 1 0 1 3 0 0 0 0 3 3 3 0 3 3 3 1 2 2 0 1 2 1 2 3 2 1 0]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Fit SVM:\n",
+    "\n",
+    "X_train, X_val, y_train, y_val = train_test_split(X_pca, y, test_size = 0.2, random_state=4, shuffle = True)\n",
+    "\n",
+    "clf = SVC(kernel='rbf', probability=True)\n",
+    "clf.fit(X_train, y_train)\n",
+    "\n",
+    "print(accuracy_score(clf.predict(X_val), y_val))\n",
+    "print(X_val)\n",
+    "print(y_val)\n"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:37.833888094Z",
+     "start_time": "2023-10-10T20:43:37.613471972Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.7425339366515837\n",
+      "{'C': 1, 'gamma': 0.01}\n",
+      "SVC(C=1, gamma=0.01)\n",
+      "0.8125\n"
+     ]
+    }
+   ],
+   "source": [
+    "# grid for C, gamma\n",
+    "C_grid = [0.001, 0.01, 0.1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n",
+    "gamma_grid = [0.001, 0.01, 0.1, 1, 10]\n",
+    "param_grid = {'C': C_grid, 'gamma': gamma_grid}\n",
+    "\n",
+    "grid = GridSearchCV(SVC(kernel='rbf'), param_grid, cv=5, scoring=\"accuracy\")\n",
+    "grid.fit(X_train, y_train)\n",
+    "\n",
+    "# Find the best model\n",
+    "print(grid.best_score_)\n",
+    "print(grid.best_params_)\n",
+    "print(grid.best_estimator_)\n",
+    "print(accuracy_score(grid.predict(X_val), y_val))"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:40.405459626Z",
+     "start_time": "2023-10-10T20:43:37.685840465Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.796875\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Optimal model\n",
+    "\n",
+    "clf = SVC(kernel='rbf', C=4, gamma=0.01, probability=True)\n",
+    "clf.fit(X_train, y_train)\n",
+    "\n",
+    "print(accuracy_score(clf.predict(X_val), y_val))"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:40.457934105Z",
+     "start_time": "2023-10-10T20:43:40.393926867Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "0.775\n",
+      "[[9.42040797e-01 2.70174155e-02 2.24723009e-02 8.46948646e-03]\n",
+      " [9.96740378e-01 1.69566371e-03 5.62068675e-04 1.00188957e-03]\n",
+      " [9.99641103e-01 2.61229482e-05 2.29803429e-04 1.02970864e-04]\n",
+      " [9.92994584e-01 3.84209358e-03 1.55640848e-03 1.60691385e-03]\n",
+      " [9.76972726e-01 4.65350915e-03 1.43338762e-02 4.03988862e-03]\n",
+      " [7.95407527e-01 4.84864390e-02 8.52062441e-02 7.08997901e-02]\n",
+      " [9.98557419e-01 2.09205917e-04 7.14230514e-04 5.19144171e-04]\n",
+      " [9.40476603e-01 3.49122929e-02 1.69428596e-02 7.66824460e-03]\n",
+      " [8.39761011e-01 4.38310450e-03 9.41041205e-02 6.17517637e-02]\n",
+      " [2.50318465e-01 1.37819918e-01 4.59288899e-01 1.52572718e-01]\n",
+      " [9.92696391e-01 3.20809762e-03 2.05803543e-03 2.03747550e-03]\n",
+      " [9.98690083e-01 1.69577396e-04 6.76374089e-04 4.63965809e-04]\n",
+      " [1.62411839e-01 3.13404410e-01 3.82366473e-01 1.41817279e-01]\n",
+      " [9.26101583e-01 4.83188150e-02 1.73274245e-02 8.25217729e-03]\n",
+      " [8.76874571e-01 6.46209287e-02 2.33451795e-02 3.51593204e-02]\n",
+      " [9.98893757e-01 4.70821073e-04 3.88879673e-04 2.46542605e-04]\n",
+      " [9.98165353e-01 2.48150136e-04 5.93550303e-04 9.92946849e-04]\n",
+      " [9.97924494e-01 1.53141224e-03 2.49974948e-04 2.94118560e-04]\n",
+      " [2.20837801e-01 9.23419164e-03 4.79730588e-01 2.90197419e-01]\n",
+      " [9.93523987e-01 5.01163077e-03 6.82304736e-04 7.82077822e-04]\n",
+      " [9.99353412e-01 1.91613208e-05 1.31625123e-04 4.95801957e-04]\n",
+      " [1.34051158e-03 9.81984508e-01 9.71471844e-03 6.96026153e-03]\n",
+      " [4.23594840e-03 4.00700590e-01 3.36815417e-01 2.58248046e-01]\n",
+      " [1.39718596e-03 9.55091999e-01 7.89301953e-03 3.56177954e-02]\n",
+      " [9.05305283e-01 2.44194916e-02 5.27647495e-02 1.75104758e-02]\n",
+      " [6.54443813e-04 9.08179938e-01 1.02579366e-02 8.09076815e-02]\n",
+      " [1.04887860e-01 4.84429978e-01 3.18205740e-01 9.24764216e-02]\n",
+      " [7.21557359e-01 1.83615195e-01 6.18721579e-02 3.29552881e-02]\n",
+      " [1.12591815e-02 7.02854455e-01 1.74324699e-01 1.11561664e-01]\n",
+      " [3.40834219e-02 2.35798041e-01 5.98814568e-01 1.31303970e-01]\n",
+      " [1.00316726e-02 8.48188499e-01 5.27064479e-02 8.90733801e-02]\n",
+      " [2.64847321e-03 8.84959697e-01 7.24790029e-03 1.05143929e-01]\n",
+      " [1.14737746e-01 3.54443868e-01 4.09198161e-01 1.21620225e-01]\n",
+      " [4.10243526e-03 8.75972699e-01 9.35401686e-02 2.63846974e-02]\n",
+      " [1.64710505e-03 8.54733046e-01 1.12462393e-02 1.32373609e-01]\n",
+      " [1.68779748e-03 7.83834395e-01 1.66376175e-01 4.81016319e-02]\n",
+      " [2.73140922e-03 9.58337246e-01 7.75738177e-03 3.11739630e-02]\n",
+      " [1.09130510e-03 3.01394038e-01 5.27663335e-01 1.69851323e-01]\n",
+      " [2.45514360e-04 6.03104425e-01 8.67940558e-03 3.87970655e-01]\n",
+      " [5.05012887e-02 8.47586989e-01 7.06306173e-02 3.12811050e-02]\n",
+      " [3.71938549e-04 9.29722757e-01 2.28770191e-02 4.70282851e-02]\n",
+      " [7.10002677e-02 7.66495556e-01 1.19039172e-01 4.34650037e-02]\n",
+      " [1.02766752e-02 5.82721296e-01 2.72757462e-01 1.34244567e-01]\n",
+      " [1.14582797e-03 9.85977484e-01 6.38762444e-03 6.48906409e-03]\n",
+      " [4.53745403e-02 2.48837938e-01 5.29633193e-01 1.76154329e-01]\n",
+      " [4.32936989e-02 8.45542568e-01 6.80961904e-02 4.30675429e-02]\n",
+      " [4.65359070e-02 6.35862295e-01 2.30158882e-01 8.74429162e-02]\n",
+      " [7.59325408e-02 8.40362013e-01 2.18715264e-02 6.18339202e-02]\n",
+      " [7.74988396e-03 3.63228281e-01 5.42668687e-01 8.63531481e-02]\n",
+      " [4.20571606e-02 1.67928744e-01 6.58766816e-01 1.31247279e-01]\n",
+      " [7.29951430e-04 2.07820843e-02 3.67399758e-01 6.11088207e-01]\n",
+      " [8.68530750e-03 3.21982370e-03 6.58963456e-01 3.29131412e-01]\n",
+      " [7.38814319e-02 1.53334483e-01 4.19653490e-01 3.53130595e-01]\n",
+      " [1.07906612e-03 7.04123005e-03 1.23280108e-01 8.68599596e-01]\n",
+      " [5.84123332e-03 7.91638288e-02 5.95835326e-01 3.19159612e-01]\n",
+      " [2.69625390e-03 5.06496587e-03 5.30645726e-01 4.61593054e-01]\n",
+      " [7.79797043e-03 1.92759686e-02 6.97763605e-01 2.75162456e-01]\n",
+      " [5.41446813e-04 2.94305688e-03 9.44287476e-01 5.22280206e-02]\n",
+      " [6.26051598e-04 7.42141945e-01 1.98916038e-01 5.83159655e-02]\n",
+      " [4.07263950e-04 1.61189530e-02 7.18765870e-01 2.64707913e-01]\n",
+      " [1.34365605e-02 1.10543156e-01 5.26627982e-01 3.49392301e-01]\n",
+      " [5.71001422e-04 1.91240815e-03 6.06491277e-01 3.91025314e-01]\n",
+      " [2.81713063e-03 7.97382406e-03 8.40331020e-01 1.48878026e-01]\n",
+      " [1.17135558e-03 2.12319620e-02 2.47315117e-01 7.30281566e-01]\n",
+      " [5.42053546e-02 4.77429988e-01 3.58152424e-01 1.10212234e-01]\n",
+      " [6.02720306e-04 1.06889031e-02 9.19066116e-02 8.96801765e-01]\n",
+      " [9.36504287e-04 1.48006780e-02 5.73367912e-02 9.26926027e-01]\n",
+      " [4.89026733e-03 8.74350191e-02 3.48862678e-01 5.58812036e-01]\n",
+      " [2.24637260e-03 3.92870613e-02 3.80617764e-01 5.77848802e-01]\n",
+      " [9.03373107e-04 5.48306894e-03 7.39968576e-01 2.53644982e-01]\n",
+      " [8.62452915e-03 9.29444439e-03 3.40040565e-01 6.42040462e-01]\n",
+      " [1.08525799e-03 6.93149715e-02 3.33566650e-01 5.96033120e-01]\n",
+      " [4.52558455e-03 5.03194459e-01 7.19542524e-02 4.20325704e-01]\n",
+      " [2.49289567e-04 6.64428036e-04 4.53650391e-02 9.53721243e-01]\n",
+      " [4.34121870e-02 1.45051484e-01 5.31879800e-01 2.79656529e-01]\n",
+      " [4.63708910e-02 2.55131108e-01 2.77371495e-01 4.21126506e-01]\n",
+      " [8.46465104e-05 1.08384791e-03 4.85811151e-02 9.50250390e-01]\n",
+      " [1.69882429e-04 4.50546759e-03 9.13036112e-02 9.04021039e-01]\n",
+      " [1.53879841e-03 9.81121479e-03 1.96134562e-01 7.92515425e-01]\n",
+      " [2.17530214e-04 4.54280426e-04 2.60607964e-01 7.38720225e-01]]\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Fit entire training sets\n",
+    "clf.fit(X_pca, y)\n",
+    "\n",
+    "print(accuracy_score(clf.predict(X_test_pca), y_test))\n",
+    "print(clf.predict_proba(X_test_pca))"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:40.511453725Z",
+     "start_time": "2023-10-10T20:43:40.431195930Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "                        label       pred1       pred2       pred3       pred4\n",
+      "filename                                                                     \n",
+      "classical_12.mp3    classical   classical  electronic         pop        rock\n",
+      "classical_18.mp3    classical   classical  electronic        rock         pop\n",
+      "classical_19.mp3    classical   classical         pop        rock  electronic\n",
+      "classical_2.mp3     classical   classical  electronic        rock         pop\n",
+      "classical_22.mp3    classical   classical         pop  electronic        rock\n",
+      "classical_26.mp3    classical   classical         pop        rock  electronic\n",
+      "classical_28.mp3    classical   classical         pop        rock  electronic\n",
+      "classical_33.mp3    classical   classical  electronic         pop        rock\n",
+      "classical_38.mp3    classical   classical         pop        rock  electronic\n",
+      "classical_43.mp3    classical         pop   classical        rock  electronic\n",
+      "classical_45.mp3    classical   classical  electronic        rock         pop\n",
+      "classical_48.mp3    classical   classical         pop        rock  electronic\n",
+      "classical_52.mp3    classical         pop  electronic   classical        rock\n",
+      "classical_57.mp3    classical   classical  electronic         pop        rock\n",
+      "classical_59.mp3    classical   classical  electronic        rock         pop\n",
+      "classical_6.mp3     classical   classical  electronic         pop        rock\n",
+      "classical_62.mp3    classical   classical        rock         pop  electronic\n",
+      "classical_67.mp3    classical   classical  electronic        rock         pop\n",
+      "classical_71.mp3    classical         pop        rock   classical  electronic\n",
+      "classical_85.mp3    classical   classical  electronic        rock         pop\n",
+      "classical_86.mp3    classical   classical        rock         pop  electronic\n",
+      "electronic_1.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_13.mp3  electronic  electronic         pop        rock   classical\n",
+      "electronic_18.mp3  electronic  electronic        rock         pop   classical\n",
+      "electronic_26.mp3  electronic   classical         pop  electronic        rock\n",
+      "electronic_33.mp3  electronic  electronic        rock         pop   classical\n",
+      "electronic_38.mp3  electronic  electronic         pop   classical        rock\n",
+      "electronic_47.mp3  electronic   classical  electronic         pop        rock\n",
+      "electronic_50.mp3  electronic  electronic         pop        rock   classical\n",
+      "electronic_51.mp3  electronic         pop  electronic        rock   classical\n",
+      "electronic_55.mp3  electronic  electronic        rock         pop   classical\n",
+      "electronic_56.mp3  electronic  electronic        rock         pop   classical\n",
+      "electronic_57.mp3  electronic         pop  electronic        rock   classical\n",
+      "electronic_58.mp3  electronic  electronic         pop        rock   classical\n",
+      "electronic_59.mp3  electronic  electronic        rock         pop   classical\n",
+      "electronic_7.mp3   electronic  electronic         pop        rock   classical\n",
+      "electronic_73.mp3  electronic  electronic        rock         pop   classical\n",
+      "electronic_75.mp3  electronic         pop  electronic        rock   classical\n",
+      "electronic_81.mp3  electronic  electronic        rock         pop   classical\n",
+      "electronic_85.mp3  electronic  electronic         pop   classical        rock\n",
+      "electronic_86.mp3  electronic  electronic        rock         pop   classical\n",
+      "electronic_91.mp3  electronic  electronic         pop   classical        rock\n",
+      "electronic_92.mp3  electronic  electronic         pop        rock   classical\n",
+      "electronic_93.mp3  electronic  electronic         pop        rock   classical\n",
+      "electronic_94.mp3  electronic         pop  electronic        rock   classical\n",
+      "electronic_97.mp3  electronic  electronic         pop   classical        rock\n",
+      "pop_18.mp3                pop  electronic         pop        rock   classical\n",
+      "pop_19.mp3                pop  electronic   classical        rock         pop\n",
+      "pop_28.mp3                pop         pop  electronic        rock   classical\n",
+      "pop_3.mp3                 pop         pop  electronic        rock   classical\n",
+      "pop_31.mp3                pop        rock         pop  electronic   classical\n",
+      "pop_33.mp3                pop         pop        rock   classical  electronic\n",
+      "pop_34.mp3                pop         pop        rock  electronic   classical\n",
+      "pop_37.mp3                pop        rock         pop  electronic   classical\n",
+      "pop_4.mp3                 pop         pop        rock  electronic   classical\n",
+      "pop_42.mp3                pop         pop        rock  electronic   classical\n",
+      "pop_53.mp3                pop         pop        rock  electronic   classical\n",
+      "pop_66.mp3                pop         pop        rock  electronic   classical\n",
+      "pop_71.mp3                pop  electronic         pop        rock   classical\n",
+      "pop_75.mp3                pop         pop        rock  electronic   classical\n",
+      "pop_77.mp3                pop         pop        rock  electronic   classical\n",
+      "pop_82.mp3                pop         pop        rock  electronic   classical\n",
+      "pop_99.mp3                pop         pop        rock  electronic   classical\n",
+      "rock_1.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_21.mp3              rock  electronic         pop        rock   classical\n",
+      "rock_23.mp3              rock        rock         pop  electronic   classical\n",
+      "rock_24.mp3              rock        rock         pop  electronic   classical\n",
+      "rock_26.mp3              rock        rock         pop  electronic   classical\n",
+      "rock_27.mp3              rock        rock         pop  electronic   classical\n",
+      "rock_49.mp3              rock         pop        rock  electronic   classical\n",
+      "rock_56.mp3              rock        rock         pop   classical  electronic\n",
+      "rock_57.mp3              rock        rock         pop  electronic   classical\n",
+      "rock_58.mp3              rock  electronic        rock         pop   classical\n",
+      "rock_78.mp3              rock        rock         pop  electronic   classical\n",
+      "rock_79.mp3              rock         pop        rock  electronic   classical\n",
+      "rock_82.mp3              rock        rock         pop  electronic   classical\n",
+      "rock_84.mp3              rock        rock         pop  electronic   classical\n",
+      "rock_9.mp3               rock        rock         pop  electronic   classical\n",
+      "rock_98.mp3              rock        rock         pop  electronic   classical\n",
+      "rock_99.mp3              rock        rock         pop  electronic   classical\n"
+     ]
+    }
+   ],
+   "source": [
+    "# Fit the entire training sets\n",
+    "\n",
+    "def convert_to_labels(preds, i2c, k=3):\n",
+    "    ans = []\n",
+    "    ids = []\n",
+    "    for p in preds:\n",
+    "        idx = np.argsort(p)[::-1]\n",
+    "        ids.append([i for i in idx[:k]])\n",
+    "        ans.append([i2c[i] for i in idx[:k]])\n",
+    "\n",
+    "    return ans, ids\n",
+    "\n",
+    "clf.fit(X_pca, y)\n",
+    "prediction_lists, percentage_lists = convert_to_labels(clf.predict_proba(X_test_pca), index2classname, k=4)\n",
+    "\n",
+    "# # Write to outputs\n",
+    "subm = pd.DataFrame(index=test.index)\n",
+    "subm['label'] = test.label.values\n",
+    "subm['pred1'] = [prediction_list[0] for prediction_list in prediction_lists]\n",
+    "subm['pred2'] = [prediction_list[1] for prediction_list in prediction_lists]\n",
+    "subm['pred3'] = [prediction_list[2] for prediction_list in prediction_lists]\n",
+    "subm['pred4'] = [prediction_list[3] for prediction_list in prediction_lists]\n",
+    "\n",
+    "pd.set_option('display.max_rows', None)\n",
+    "print(subm)\n",
+    "pd.reset_option('display.max_rows')"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:40.571797545Z",
+     "start_time": "2023-10-10T20:43:40.484151084Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "outputs": [],
+   "source": [
+    "with open(LOCAL_PATH / \"clf.pickle\", \"wb\") as file:\n",
+    "    pickle.dump(clf, file)\n",
+    "subm.to_csv(LOCAL_PATH / \"submission.csv\", index=False)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:43:40.572096508Z",
+     "start_time": "2023-10-10T20:43:40.552658198Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "INFO:fairnb.api.invenio:Picked up 1 files\n",
+      "INFO:fairnb.api.invenio:Uploading 1 to https://test.researchdata.tuwien.ac.at\n",
+      "INFO:fairnb.api.invenio:Uploading /home/lukas/Programming/uni/bachelorarbeit/dbrepo-ismir/tmp/standalone/clf.pickle as clf.pickle\n",
+      "INFO:fairnb.api.invenio:Finished upload  of clf.pickle\n"
+     ]
+    }
+   ],
+   "source": [
+    "if not ONLY_LOCAL:\n",
+    "    with open(RESOURCE_PATH / \"5_ml_model\" / \"ml_model_entity_metadata.yml\", \"r\") as file:\n",
+    "        metadata = yaml.safe_load(file)\n",
+    "\n",
+    "    nb_config_ml = NbConfig(\n",
+    "        nb_location=NOTEBOOK_PATH / \"5_ml_model.ipynb\",\n",
+    "        entities=[\n",
+    "            ml_model_entity := InvenioEntity.new(\n",
+    "                name=\"Standalone Machine Learning model\",\n",
+    "                description=\"An ml model representing the trained clf\",\n",
+    "                location=LOCAL_PATH / \"clf.pickle\",\n",
+    "                dbrepo_connector=connector,\n",
+    "                invenio_connector=invenio_connector,\n",
+    "                record_metadata=metadata,\n",
+    "                type=\"clf\"\n",
+    "            ),\n",
+    "            test_result_entity := DbRepoEntity.new(\n",
+    "                name=\"Standalone Test Result Entity\",\n",
+    "                description=\"Result of tests on ml model\",\n",
+    "                table_name=\"test_result\",\n",
+    "                table_description=\"Test results of genre prediction on ml model\",\n",
+    "                location=LOCAL_PATH / \"submission.csv\",\n",
+    "                dbrepo_connector=connector,\n",
+    "                type=\"submission\"\n",
+    "            )\n",
+    "        ],\n",
+    "        dependencies=[\n",
+    "            audio_files_entity\n",
+    "        ]\n",
+    "    )\n",
+    "\n",
+    "    executor.upload_entities(nb_config_ml)"
+   ],
+   "metadata": {
+    "collapsed": false,
+    "ExecuteTime": {
+     "end_time": "2023-10-10T20:53:51.300279538Z",
+     "start_time": "2023-10-10T20:53:47.923032557Z"
+    }
+   }
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "outputs": [],
+   "source": [],
+   "metadata": {
+    "collapsed": false
+   }
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 2
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython2",
+   "version": "2.7.6"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/notebooks/testing.ipynb b/notebooks/testing.ipynb
deleted file mode 100644
index f118313d6389b78ae22ce08add17ce04a68ef30e..0000000000000000000000000000000000000000
--- a/notebooks/testing.ipynb
+++ /dev/null
@@ -1,88 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "collapsed": true,
-    "execution": {
-     "iopub.execute_input": "2023-02-10T17:30:24.890382Z",
-     "iopub.status.busy": "2023-02-10T17:30:24.889669Z",
-     "iopub.status.idle": "2023-02-10T17:30:24.898430Z",
-     "shell.execute_reply": "2023-02-10T17:30:24.897675Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "a = 10\n",
-    "test = 'asdf'"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "collapsed": false,
-    "execution": {
-     "iopub.execute_input": "2023-02-10T17:30:24.902004Z",
-     "iopub.status.busy": "2023-02-10T17:30:24.901559Z",
-     "iopub.status.idle": "2023-02-10T17:30:24.905188Z",
-     "shell.execute_reply": "2023-02-10T17:30:24.904378Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "b= 20"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "collapsed": false,
-    "execution": {
-     "iopub.execute_input": "2023-02-10T17:30:24.908647Z",
-     "iopub.status.busy": "2023-02-10T17:30:24.908103Z",
-     "iopub.status.idle": "2023-02-10T17:30:24.927086Z",
-     "shell.execute_reply": "2023-02-10T17:30:24.926259Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "'asdf'"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "test"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.10.9"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
diff --git a/poetry.lock b/poetry.lock
index 49f5338f59cce565eac08662fa32e7c1d7efca6d..89579b7508b20613f50cd27b8936489c3949a46c 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,4 +1,140 @@
-# This file is automatically @generated by Poetry 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 = [
+    {file = "annotated_types-0.5.0-py3-none-any.whl", hash = "sha256:58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd"},
+    {file = "annotated_types-0.5.0.tar.gz", hash = "sha256:47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802"},
+]
 
 [[package]]
 name = "ansiwrap"
@@ -17,36 +153,25 @@ textwrap3 = ">=0.9.2"
 
 [[package]]
 name = "anyio"
-version = "3.6.2"
+version = "4.0.0"
 description = "High level compatibility layer for multiple asynchronous event loop implementations"
 category = "main"
 optional = false
-python-versions = ">=3.6.2"
+python-versions = ">=3.8"
 files = [
-    {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"},
-    {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"},
+    {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"},
+    {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"},
 ]
 
 [package.dependencies]
+exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""}
 idna = ">=2.8"
 sniffio = ">=1.1"
 
 [package.extras]
-doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
-test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"]
-trio = ["trio (>=0.16,<0.22)"]
-
-[[package]]
-name = "appdirs"
-version = "1.4.4"
-description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
-category = "main"
-optional = false
-python-versions = "*"
-files = [
-    {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
-    {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
-]
+doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"]
+test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
+trio = ["trio (>=0.22)"]
 
 [[package]]
 name = "appnope"
@@ -62,23 +187,24 @@ files = [
 
 [[package]]
 name = "argon2-cffi"
-version = "21.3.0"
-description = "The secure Argon2 password hashing algorithm."
+version = "23.1.0"
+description = "Argon2 for Python"
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 files = [
-    {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"},
-    {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"},
+    {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"},
+    {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"},
 ]
 
 [package.dependencies]
 argon2-cffi-bindings = "*"
 
 [package.extras]
-dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"]
-docs = ["furo", "sphinx", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"]
+dev = ["argon2-cffi[tests,typing]", "tox (>4)"]
+docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"]
+tests = ["hypothesis", "pytest"]
+typing = ["mypy"]
 
 [[package]]
 name = "argon2-cffi-bindings"
@@ -151,24 +277,51 @@ six = "*"
 [package.extras]
 test = ["astroid", "pytest"]
 
+[[package]]
+name = "async-lru"
+version = "2.0.4"
+description = "Simple LRU cache for asyncio"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"},
+    {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"},
+]
+
+[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 = "22.2.0"
+version = "23.1.0"
 description = "Classes Without Boilerplate"
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 files = [
-    {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"},
-    {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"},
+    {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"},
+    {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"},
 ]
 
 [package.extras]
-cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"]
-dev = ["attrs[docs,tests]"]
-docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"]
-tests = ["attrs[tests-no-zope]", "zope.interface"]
-tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"]
+cov = ["attrs[tests]", "coverage[toml] (>=5.3)"]
+dev = ["attrs[docs,tests]", "pre-commit"]
+docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"]
+tests = ["attrs[tests-no-zope]", "zope-interface"]
+tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"]
 
 [[package]]
 name = "audioread"
@@ -181,6 +334,18 @@ files = [
     {file = "audioread-3.0.0.tar.gz", hash = "sha256:121995bd207eb1fda3d566beb851d3534275925bc35a4fb6da0cb11de0f7251a"},
 ]
 
+[[package]]
+name = "babel"
+version = "2.12.1"
+description = "Internationalization utilities"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"},
+    {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"},
+]
+
 [[package]]
 name = "backcall"
 version = "0.2.0"
@@ -195,14 +360,14 @@ files = [
 
 [[package]]
 name = "beautifulsoup4"
-version = "4.11.1"
+version = "4.12.2"
 description = "Screen-scraping library"
 category = "main"
 optional = false
 python-versions = ">=3.6.0"
 files = [
-    {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"},
-    {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"},
+    {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"},
+    {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"},
 ]
 
 [package.dependencies]
@@ -212,16 +377,62 @@ soupsieve = ">1.2"
 html5lib = ["html5lib"]
 lxml = ["lxml"]
 
+[[package]]
+name = "black"
+version = "23.7.0"
+description = "The uncompromising code formatter."
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"},
+    {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"},
+    {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"},
+    {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"},
+    {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"},
+    {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"},
+    {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"},
+    {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"},
+    {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"},
+    {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"},
+    {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"},
+    {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"},
+    {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"},
+    {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"},
+    {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"},
+    {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"},
+    {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"},
+    {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"},
+    {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"},
+    {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"},
+    {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"},
+    {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"},
+]
+
+[package.dependencies]
+click = ">=8.0.0"
+mypy-extensions = ">=0.4.3"
+packaging = ">=22.0"
+pathspec = ">=0.9.0"
+platformdirs = ">=2"
+tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.7.4)"]
+jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
+uvloop = ["uvloop (>=0.15.2)"]
+
 [[package]]
 name = "bleach"
-version = "5.0.1"
+version = "6.0.0"
 description = "An easy safelist-based HTML-sanitizing tool."
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"},
-    {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"},
+    {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"},
+    {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"},
 ]
 
 [package.dependencies]
@@ -230,18 +441,17 @@ webencodings = "*"
 
 [package.extras]
 css = ["tinycss2 (>=1.1.0,<1.2)"]
-dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"]
 
 [[package]]
 name = "certifi"
-version = "2022.12.7"
+version = "2023.7.22"
 description = "Python package for providing Mozilla's CA Bundle."
 category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
-    {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
+    {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"},
+    {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"},
 ]
 
 [[package]]
@@ -323,29 +533,99 @@ pycparser = "*"
 
 [[package]]
 name = "charset-normalizer"
-version = "2.1.1"
+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.6.0"
+python-versions = ">=3.7.0"
 files = [
-    {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"},
-    {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"},
+    {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"},
+    {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"},
+    {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"},
+    {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"},
+    {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"},
+    {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"},
+    {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"},
 ]
 
-[package.extras]
-unicode-backport = ["unicodedata2"]
-
 [[package]]
 name = "click"
-version = "8.1.3"
+version = "8.1.7"
 description = "Composable command line interface toolkit"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
-    {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
+    {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
+    {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
 ]
 
 [package.dependencies]
@@ -365,99 +645,71 @@ files = [
 
 [[package]]
 name = "comm"
-version = "0.1.2"
+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 = [
-    {file = "comm-0.1.2-py3-none-any.whl", hash = "sha256:9f3abf3515112fa7c55a42a6a5ab358735c9dccc8b5910a9d8e3ef5998130666"},
-    {file = "comm-0.1.2.tar.gz", hash = "sha256:3e2f5826578e683999b93716285b3b1f344f157bf75fa9ce0a797564e742f062"},
+    {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"},
+    {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"},
 ]
 
 [package.dependencies]
-traitlets = ">=5.3"
+traitlets = ">=4"
 
 [package.extras]
+lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"]
 test = ["pytest"]
+typing = ["mypy (>=0.990)"]
 
 [[package]]
 name = "contourpy"
-version = "1.0.6"
+version = "1.1.0"
 description = "Python library for calculating contours of 2D quadrilateral grids"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "contourpy-1.0.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:613c665529899b5d9fade7e5d1760111a0b011231277a0d36c49f0d3d6914bd6"},
-    {file = "contourpy-1.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78ced51807ccb2f45d4ea73aca339756d75d021069604c2fccd05390dc3c28eb"},
-    {file = "contourpy-1.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3b1bd7577c530eaf9d2bc52d1a93fef50ac516a8b1062c3d1b9bcec9ebe329b"},
-    {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8834c14b8c3dd849005e06703469db9bf96ba2d66a3f88ecc539c9a8982e0ee"},
-    {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4052a8a4926d4468416fc7d4b2a7b2a3e35f25b39f4061a7e2a3a2748c4fc48"},
-    {file = "contourpy-1.0.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c0e1308307a75e07d1f1b5f0f56b5af84538a5e9027109a7bcf6cb47c434e72"},
-    {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fc4e7973ed0e1fe689435842a6e6b330eb7ccc696080dda9a97b1a1b78e41db"},
-    {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e8d09d96219ace6cb596506fb9b64ea5f270b2fb9121158b976d88871fcfd1"},
-    {file = "contourpy-1.0.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f33da6b5d19ad1bb5e7ad38bb8ba5c426d2178928bc2b2c44e8823ea0ecb6ff3"},
-    {file = "contourpy-1.0.6-cp310-cp310-win32.whl", hash = "sha256:12a7dc8439544ed05c6553bf026d5e8fa7fad48d63958a95d61698df0e00092b"},
-    {file = "contourpy-1.0.6-cp310-cp310-win_amd64.whl", hash = "sha256:eadad75bf91897f922e0fb3dca1b322a58b1726a953f98c2e5f0606bd8408621"},
-    {file = "contourpy-1.0.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:913bac9d064cff033cf3719e855d4f1db9f1c179e0ecf3ba9fdef21c21c6a16a"},
-    {file = "contourpy-1.0.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46deb310a276cc5c1fd27958e358cce68b1e8a515fa5a574c670a504c3a3fe30"},
-    {file = "contourpy-1.0.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b64f747e92af7da3b85631a55d68c45a2d728b4036b03cdaba4bd94bcc85bd6f"},
-    {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50627bf76abb6ba291ad08db583161939c2c5fab38c38181b7833423ab9c7de3"},
-    {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:358f6364e4873f4d73360b35da30066f40387dd3c427a3e5432c6b28dd24a8fa"},
-    {file = "contourpy-1.0.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c78bfbc1a7bff053baf7e508449d2765964d67735c909b583204e3240a2aca45"},
-    {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e43255a83835a129ef98f75d13d643844d8c646b258bebd11e4a0975203e018f"},
-    {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:375d81366afd547b8558c4720337218345148bc2fcffa3a9870cab82b29667f2"},
-    {file = "contourpy-1.0.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b98c820608e2dca6442e786817f646d11057c09a23b68d2b3737e6dcb6e4a49b"},
-    {file = "contourpy-1.0.6-cp311-cp311-win32.whl", hash = "sha256:0e4854cc02006ad6684ce092bdadab6f0912d131f91c2450ce6dbdea78ee3c0b"},
-    {file = "contourpy-1.0.6-cp311-cp311-win_amd64.whl", hash = "sha256:d2eff2af97ea0b61381828b1ad6cd249bbd41d280e53aea5cccd7b2b31b8225c"},
-    {file = "contourpy-1.0.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5b117d29433fc8393b18a696d794961464e37afb34a6eeb8b2c37b5f4128a83e"},
-    {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341330ed19074f956cb20877ad8d2ae50e458884bfa6a6df3ae28487cc76c768"},
-    {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:371f6570a81dfdddbb837ba432293a63b4babb942a9eb7aaa699997adfb53278"},
-    {file = "contourpy-1.0.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9447c45df407d3ecb717d837af3b70cfef432138530712263730783b3d016512"},
-    {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:730c27978a0003b47b359935478b7d63fd8386dbb2dcd36c1e8de88cbfc1e9de"},
-    {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:da1ef35fd79be2926ba80fbb36327463e3656c02526e9b5b4c2b366588b74d9a"},
-    {file = "contourpy-1.0.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:cd2bc0c8f2e8de7dd89a7f1c10b8844e291bca17d359373203ef2e6100819edd"},
-    {file = "contourpy-1.0.6-cp37-cp37m-win32.whl", hash = "sha256:3a1917d3941dd58732c449c810fa7ce46cc305ce9325a11261d740118b85e6f3"},
-    {file = "contourpy-1.0.6-cp37-cp37m-win_amd64.whl", hash = "sha256:06ca79e1efbbe2df795822df2fa173d1a2b38b6e0f047a0ec7903fbca1d1847e"},
-    {file = "contourpy-1.0.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e626cefff8491bce356221c22af5a3ea528b0b41fbabc719c00ae233819ea0bf"},
-    {file = "contourpy-1.0.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dbe6fe7a1166b1ddd7b6d887ea6fa8389d3f28b5ed3f73a8f40ece1fc5a3d340"},
-    {file = "contourpy-1.0.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e13b31d1b4b68db60b3b29f8e337908f328c7f05b9add4b1b5c74e0691180109"},
-    {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a79d239fc22c3b8d9d3de492aa0c245533f4f4c7608e5749af866949c0f1b1b9"},
-    {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e8e686a6db92a46111a1ee0ee6f7fbfae4048f0019de207149f43ac1812cf95"},
-    {file = "contourpy-1.0.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2bd02f1a7adff3a1f33e431eb96ab6d7987b039d2946a9b39fe6fb16a1036"},
-    {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:03d1b9c6b44a9e30d554654c72be89af94fab7510b4b9f62356c64c81cec8b7d"},
-    {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b48d94386f1994db7c70c76b5808c12e23ed7a4ee13693c2fc5ab109d60243c0"},
-    {file = "contourpy-1.0.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:208bc904889c910d95aafcf7be9e677726df9ef71e216780170dbb7e37d118fa"},
-    {file = "contourpy-1.0.6-cp38-cp38-win32.whl", hash = "sha256:444fb776f58f4906d8d354eb6f6ce59d0a60f7b6a720da6c1ccb839db7c80eb9"},
-    {file = "contourpy-1.0.6-cp38-cp38-win_amd64.whl", hash = "sha256:9bc407a6af672da20da74823443707e38ece8b93a04009dca25856c2d9adadb1"},
-    {file = "contourpy-1.0.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aa4674cf3fa2bd9c322982644967f01eed0c91bb890f624e0e0daf7a5c3383e9"},
-    {file = "contourpy-1.0.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f56515e7c6fae4529b731f6c117752247bef9cdad2b12fc5ddf8ca6a50965a5"},
-    {file = "contourpy-1.0.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:344cb3badf6fc7316ad51835f56ac387bdf86c8e1b670904f18f437d70da4183"},
-    {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b1e66346acfb17694d46175a0cea7d9036f12ed0c31dfe86f0f405eedde2bdd"},
-    {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8468b40528fa1e15181cccec4198623b55dcd58306f8815a793803f51f6c474a"},
-    {file = "contourpy-1.0.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dedf4c64185a216c35eb488e6f433297c660321275734401760dafaeb0ad5c2"},
-    {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:494efed2c761f0f37262815f9e3c4bb9917c5c69806abdee1d1cb6611a7174a0"},
-    {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:75a2e638042118118ab39d337da4c7908c1af74a8464cad59f19fbc5bbafec9b"},
-    {file = "contourpy-1.0.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a628bba09ba72e472bf7b31018b6281fd4cc903f0888049a3724afba13b6e0b8"},
-    {file = "contourpy-1.0.6-cp39-cp39-win32.whl", hash = "sha256:e1739496c2f0108013629aa095cc32a8c6363444361960c07493818d0dea2da4"},
-    {file = "contourpy-1.0.6-cp39-cp39-win_amd64.whl", hash = "sha256:a457ee72d9032e86730f62c5eeddf402e732fdf5ca8b13b41772aa8ae13a4563"},
-    {file = "contourpy-1.0.6-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d912f0154a20a80ea449daada904a7eb6941c83281a9fab95de50529bfc3a1da"},
-    {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4081918147fc4c29fad328d5066cfc751da100a1098398742f9f364be63803fc"},
-    {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0537cc1195245bbe24f2913d1f9211b8f04eb203de9044630abd3664c6cc339c"},
-    {file = "contourpy-1.0.6-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcd556c8fc37a342dd636d7eef150b1399f823a4462f8c968e11e1ebeabee769"},
-    {file = "contourpy-1.0.6-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f6ca38dd8d988eca8f07305125dec6f54ac1c518f1aaddcc14d08c01aebb6efc"},
-    {file = "contourpy-1.0.6-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c1baa49ab9fedbf19d40d93163b7d3e735d9cd8d5efe4cce9907902a6dad391f"},
-    {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:211dfe2bd43bf5791d23afbe23a7952e8ac8b67591d24be3638cabb648b3a6eb"},
-    {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38c6536c2d71ca2f7e418acaf5bca30a3af7f2a2fa106083c7d738337848dbe"},
-    {file = "contourpy-1.0.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b1ee48a130da4dd0eb8055bbab34abf3f6262957832fd575e0cab4979a15a41"},
-    {file = "contourpy-1.0.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5641927cc5ae66155d0c80195dc35726eae060e7defc18b7ab27600f39dd1fe7"},
-    {file = "contourpy-1.0.6-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ee394502026d68652c2824348a40bf50f31351a668977b51437131a90d777ea"},
-    {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b97454ed5b1368b66ed414c754cba15b9750ce69938fc6153679787402e4cdf"},
-    {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0236875c5a0784215b49d00ebbe80c5b6b5d5244b3655a36dda88105334dea17"},
-    {file = "contourpy-1.0.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c593aeff7a0171f639da92cb86d24954bbb61f8a1b530f74eb750a14685832"},
-    {file = "contourpy-1.0.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9b0e7fe7f949fb719b206548e5cde2518ffb29936afa4303d8a1c4db43dcb675"},
-    {file = "contourpy-1.0.6.tar.gz", hash = "sha256:6e459ebb8bb5ee4c22c19cc000174f8059981971a33ce11e17dddf6aca97a142"},
+    {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"},
+    {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"},
+    {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"},
+    {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"},
+    {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"},
+    {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"},
+    {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"},
+    {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"},
+    {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"},
+    {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"},
+    {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"},
+    {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"},
+    {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"},
+    {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"},
+    {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"},
+    {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"},
+    {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"},
+    {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"},
+    {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"},
+    {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"},
+    {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"},
+    {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"},
+    {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"},
+    {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"},
+    {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"},
+    {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"},
+    {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"},
+    {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"},
+    {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"},
+    {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"},
+    {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"},
+    {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"},
+    {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"},
+    {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"},
+    {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"},
+    {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"},
+    {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"},
+    {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"},
+    {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"},
 ]
 
 [package.dependencies]
@@ -465,10 +717,56 @@ numpy = ">=1.16"
 
 [package.extras]
 bokeh = ["bokeh", "selenium"]
-docs = ["docutils (<0.18)", "sphinx (<=5.2.0)", "sphinx-rtd-theme"]
-test = ["Pillow", "flake8", "isort", "matplotlib", "pytest"]
-test-minimal = ["pytest"]
-test-no-codebase = ["Pillow", "matplotlib", "pytest"]
+docs = ["furo", "sphinx-copybutton"]
+mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"]
+test = ["Pillow", "contourpy[test-no-images]", "matplotlib"]
+test-no-images = ["pytest", "pytest-cov", "wurlitzer"]
+
+[[package]]
+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 = [
+    {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"},
+    {file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"},
+    {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"},
+    {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"},
+    {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"},
+    {file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"},
+    {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"},
+    {file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"},
+    {file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"},
+    {file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"},
+    {file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"},
+    {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"},
+    {file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"},
+    {file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"},
+    {file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"},
+    {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"},
+    {file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"},
+    {file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"},
+    {file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"},
+    {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"},
+    {file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"},
+    {file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"},
+    {file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"},
+]
+
+[package.dependencies]
+cffi = ">=1.12"
+
+[package.extras]
+docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"]
+docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"]
+nox = ["nox"]
+pep8test = ["black", "check-sdist", "mypy", "ruff"]
+sdist = ["build"]
+ssh = ["bcrypt (>=3.1.5)"]
+test = ["pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"]
+test-randomorder = ["pytest-randomly"]
 
 [[package]]
 name = "cycler"
@@ -484,30 +782,30 @@ files = [
 
 [[package]]
 name = "debugpy"
-version = "1.6.4"
+version = "1.6.7.post1"
 description = "An implementation of the Debug Adapter Protocol for Python"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "debugpy-1.6.4-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:6ae238943482c78867ac707c09122688efb700372b617ffd364261e5e41f7a2f"},
-    {file = "debugpy-1.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a39e7da178e1f22f4bc04b57f085e785ed1bcf424aaf318835a1a7129eefe35"},
-    {file = "debugpy-1.6.4-cp310-cp310-win32.whl", hash = "sha256:143f79d0798a9acea21cd1d111badb789f19d414aec95fa6389cfea9485ddfb1"},
-    {file = "debugpy-1.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:563f148f94434365ec0ce94739c749aabf60bf67339e68a9446499f3582d62f3"},
-    {file = "debugpy-1.6.4-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1caee68f7e254267df908576c0d0938f8f88af16383f172cb9f0602e24c30c01"},
-    {file = "debugpy-1.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e2a83d31a16b83666f19fa06d97b2cc311af88e6266590579737949971a17e"},
-    {file = "debugpy-1.6.4-cp37-cp37m-win32.whl", hash = "sha256:82229790442856962aec4767b98ba2559fe0998f897e9f21fb10b4fd24b6c436"},
-    {file = "debugpy-1.6.4-cp37-cp37m-win_amd64.whl", hash = "sha256:67edf033f9e512958f7b472975ff9d9b7ff64bf4440f6f6ae44afdc66b89e6b6"},
-    {file = "debugpy-1.6.4-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:4ab5e938925e5d973f567d6ef32751b17d10f3be3a8c4d73c52f53e727f69bf1"},
-    {file = "debugpy-1.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8df268e9f72fc06efc2e75e8dc8e2b881d6a397356faec26efb2ee70b6863b7"},
-    {file = "debugpy-1.6.4-cp38-cp38-win32.whl", hash = "sha256:86bd25f38f8b6c5d430a5e2931eebbd5f580c640f4819fcd236d0498790c7204"},
-    {file = "debugpy-1.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:62ba4179b372a62abf9c89b56997d70a4100c6dea6c2a4e0e4be5f45920b3253"},
-    {file = "debugpy-1.6.4-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:d2968e589bda4e485a9c61f113754a28e48d88c5152ed8e0b2564a1fadbe50a5"},
-    {file = "debugpy-1.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62b8034ede98932b92268669318848a0d42133d857087a3b9cec03bb844c615"},
-    {file = "debugpy-1.6.4-cp39-cp39-win32.whl", hash = "sha256:3d9c31baf64bf959a593996c108e911c5a9aa1693a296840e5469473f064bcec"},
-    {file = "debugpy-1.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:ea4bf208054e6d41749f17612066da861dff10102729d32c85b47f155223cf2b"},
-    {file = "debugpy-1.6.4-py2.py3-none-any.whl", hash = "sha256:e886a1296cd20a10172e94788009ce74b759e54229ebd64a43fa5c2b4e62cd76"},
-    {file = "debugpy-1.6.4.zip", hash = "sha256:d5ab9bd3f4e7faf3765fd52c7c43c074104ab1e109621dc73219099ed1a5399d"},
+    {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"},
+    {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"},
+    {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"},
+    {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"},
+    {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"},
+    {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"},
+    {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"},
+    {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"},
+    {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"},
+    {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"},
+    {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"},
+    {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"},
+    {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"},
+    {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"},
+    {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"},
+    {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"},
+    {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"},
+    {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"},
 ]
 
 [[package]]
@@ -534,6 +832,40 @@ files = [
     {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
 ]
 
+[[package]]
+name = "deprecation"
+version = "2.1.0"
+description = "A library to handle automated deprecations"
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+    {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"},
+    {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"},
+]
+
+[package.dependencies]
+packaging = "*"
+
+[[package]]
+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 = [
+    {file = "ecdsa-0.18.0-py2.py3-none-any.whl", hash = "sha256:80600258e7ed2f16b9aa1d7c295bd70194109ad5a30fdee0eaeefef1d4c559dd"},
+    {file = "ecdsa-0.18.0.tar.gz", hash = "sha256:190348041559e21b22a1d65cee485282ca11a6f81d503fddb84d5017e9ed1e49"},
+]
+
+[package.dependencies]
+six = ">=1.9.0"
+
+[package.extras]
+gmpy = ["gmpy"]
+gmpy2 = ["gmpy2"]
+
 [[package]]
 name = "entrypoints"
 version = "0.4"
@@ -548,14 +880,14 @@ files = [
 
 [[package]]
 name = "exceptiongroup"
-version = "1.1.0"
+version = "1.1.3"
 description = "Backport of PEP 654 (exception groups)"
-category = "dev"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"},
-    {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"},
+    {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"},
+    {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"},
 ]
 
 [package.extras]
@@ -578,14 +910,14 @@ tests = ["asttokens", "littleutils", "pytest", "rich"]
 
 [[package]]
 name = "fastjsonschema"
-version = "2.16.2"
+version = "2.18.0"
 description = "Fastest Python implementation of JSON schema"
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "fastjsonschema-2.16.2-py3-none-any.whl", hash = "sha256:21f918e8d9a1a4ba9c22e09574ba72267a6762d47822db9add95f6454e51cc1c"},
-    {file = "fastjsonschema-2.16.2.tar.gz", hash = "sha256:01e366f25d9047816fe3d288cbfc3e10541daf0af2044763f3d0ade42476da18"},
+    {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"},
+    {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"},
 ]
 
 [package.extras]
@@ -593,18 +925,50 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc
 
 [[package]]
 name = "fonttools"
-version = "4.38.0"
+version = "4.42.1"
 description = "Tools to manipulate font files"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "fonttools-4.38.0-py3-none-any.whl", hash = "sha256:820466f43c8be8c3009aef8b87e785014133508f0de64ec469e4efb643ae54fb"},
-    {file = "fonttools-4.38.0.zip", hash = "sha256:2bb244009f9bf3fa100fc3ead6aeb99febe5985fa20afbfbaa2f8946c2fbdaf1"},
+    {file = "fonttools-4.42.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ed1a13a27f59d1fc1920394a7f596792e9d546c9ca5a044419dca70c37815d7c"},
+    {file = "fonttools-4.42.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c9b1ce7a45978b821a06d375b83763b27a3a5e8a2e4570b3065abad240a18760"},
+    {file = "fonttools-4.42.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f720fa82a11c0f9042376fd509b5ed88dab7e3cd602eee63a1af08883b37342b"},
+    {file = "fonttools-4.42.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db55cbaea02a20b49fefbd8e9d62bd481aaabe1f2301dabc575acc6b358874fa"},
+    {file = "fonttools-4.42.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a35981d90feebeaef05e46e33e6b9e5b5e618504672ca9cd0ff96b171e4bfff"},
+    {file = "fonttools-4.42.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:68a02bbe020dc22ee0540e040117535f06df9358106d3775e8817d826047f3fd"},
+    {file = "fonttools-4.42.1-cp310-cp310-win32.whl", hash = "sha256:12a7c247d1b946829bfa2f331107a629ea77dc5391dfd34fdcd78efa61f354ca"},
+    {file = "fonttools-4.42.1-cp310-cp310-win_amd64.whl", hash = "sha256:a398bdadb055f8de69f62b0fc70625f7cbdab436bbb31eef5816e28cab083ee8"},
+    {file = "fonttools-4.42.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:689508b918332fb40ce117131633647731d098b1b10d092234aa959b4251add5"},
+    {file = "fonttools-4.42.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e36344e48af3e3bde867a1ca54f97c308735dd8697005c2d24a86054a114a71"},
+    {file = "fonttools-4.42.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19b7db825c8adee96fac0692e6e1ecd858cae9affb3b4812cdb9d934a898b29e"},
+    {file = "fonttools-4.42.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:113337c2d29665839b7d90b39f99b3cac731f72a0eda9306165a305c7c31d341"},
+    {file = "fonttools-4.42.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:37983b6bdab42c501202500a2be3a572f50d4efe3237e0686ee9d5f794d76b35"},
+    {file = "fonttools-4.42.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6ed2662a3d9c832afa36405f8748c250be94ae5dfc5283d668308391f2102861"},
+    {file = "fonttools-4.42.1-cp311-cp311-win32.whl", hash = "sha256:179737095eb98332a2744e8f12037b2977f22948cf23ff96656928923ddf560a"},
+    {file = "fonttools-4.42.1-cp311-cp311-win_amd64.whl", hash = "sha256:f2b82f46917d8722e6b5eafeefb4fb585d23babd15d8246c664cd88a5bddd19c"},
+    {file = "fonttools-4.42.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:62f481ac772fd68901573956231aea3e4b1ad87b9b1089a61613a91e2b50bb9b"},
+    {file = "fonttools-4.42.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f2f806990160d1ce42d287aa419df3ffc42dfefe60d473695fb048355fe0c6a0"},
+    {file = "fonttools-4.42.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:db372213d39fa33af667c2aa586a0c1235e88e9c850f5dd5c8e1f17515861868"},
+    {file = "fonttools-4.42.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d18fc642fd0ac29236ff88ecfccff229ec0386090a839dd3f1162e9a7944a40"},
+    {file = "fonttools-4.42.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8708b98c278012ad267ee8a7433baeb809948855e81922878118464b274c909d"},
+    {file = "fonttools-4.42.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c95b0724a6deea2c8c5d3222191783ced0a2f09bd6d33f93e563f6f1a4b3b3a4"},
+    {file = "fonttools-4.42.1-cp38-cp38-win32.whl", hash = "sha256:4aa79366e442dbca6e2c8595645a3a605d9eeabdb7a094d745ed6106816bef5d"},
+    {file = "fonttools-4.42.1-cp38-cp38-win_amd64.whl", hash = "sha256:acb47f6f8680de24c1ab65ebde39dd035768e2a9b571a07c7b8da95f6c8815fd"},
+    {file = "fonttools-4.42.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb289b7a815638a7613d46bcf324c9106804725b2bb8ad913c12b6958ffc4ec"},
+    {file = "fonttools-4.42.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:53eb5091ddc8b1199330bb7b4a8a2e7995ad5d43376cadce84523d8223ef3136"},
+    {file = "fonttools-4.42.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46a0ec8adbc6ff13494eb0c9c2e643b6f009ce7320cf640de106fb614e4d4360"},
+    {file = "fonttools-4.42.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cc7d685b8eeca7ae69dc6416833fbfea61660684b7089bca666067cb2937dcf"},
+    {file = "fonttools-4.42.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:be24fcb80493b2c94eae21df70017351851652a37de514de553435b256b2f249"},
+    {file = "fonttools-4.42.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:515607ec756d7865f23070682622c49d922901943697871fc292277cf1e71967"},
+    {file = "fonttools-4.42.1-cp39-cp39-win32.whl", hash = "sha256:0eb79a2da5eb6457a6f8ab904838454accc7d4cccdaff1fd2bd3a0679ea33d64"},
+    {file = "fonttools-4.42.1-cp39-cp39-win_amd64.whl", hash = "sha256:7286aed4ea271df9eab8d7a9b29e507094b51397812f7ce051ecd77915a6e26b"},
+    {file = "fonttools-4.42.1-py3-none-any.whl", hash = "sha256:9398f244e28e0596e2ee6024f808b06060109e33ed38dcc9bded452fd9bbb853"},
+    {file = "fonttools-4.42.1.tar.gz", hash = "sha256:c391cd5af88aacaf41dd7cfb96eeedfad297b5899a39e12f4c2c3706d0a3329d"},
 ]
 
 [package.extras]
-all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=14.0.0)", "xattr", "zopfli (>=0.1.4)"]
+all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"]
 graphite = ["lz4 (>=1.7.4.2)"]
 interpolatable = ["munkres", "scipy"]
 lxml = ["lxml (>=4.0,<5)"]
@@ -614,7 +978,7 @@ repacker = ["uharfbuzz (>=0.23.0)"]
 symfont = ["sympy"]
 type1 = ["xattr"]
 ufo = ["fs (>=2.2.0,<3)"]
-unicode = ["unicodedata2 (>=14.0.0)"]
+unicode = ["unicodedata2 (>=15.0.0)"]
 woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"]
 
 [[package]]
@@ -629,6 +993,88 @@ 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 = [
+    {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"},
+]
+
 [[package]]
 name = "git-python"
 version = "1.0.3"
@@ -661,14 +1107,14 @@ smmap = ">=3.0.1,<6"
 
 [[package]]
 name = "gitpython"
-version = "3.1.30"
-description = "GitPython is a python library used to interact with Git repositories"
+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 = [
-    {file = "GitPython-3.1.30-py3-none-any.whl", hash = "sha256:cd455b0000615c60e286208ba540271af9fe531fa6a87cc590a7298785ab2882"},
-    {file = "GitPython-3.1.30.tar.gz", hash = "sha256:769c2d83e13f5d938b7688479da374c4e3d49f71549aaf462b646db9602ea6f8"},
+    {file = "GitPython-3.1.33-py3-none-any.whl", hash = "sha256:11f22466f982211ad8f3bdb456c03be8466c71d4da8774f3a9f68344e89559cb"},
+    {file = "GitPython-3.1.33.tar.gz", hash = "sha256:13aaa3dff88a23afec2d00eb3da3f2e040e2282e41de484c5791669b31146084"},
 ]
 
 [package.dependencies]
@@ -688,45 +1134,48 @@ files = [
 
 [[package]]
 name = "iniconfig"
-version = "1.1.1"
-description = "iniconfig: brain-dead simple config-ini parsing"
+version = "2.0.0"
+description = "brain-dead simple config-ini parsing"
 category = "dev"
 optional = false
-python-versions = "*"
+python-versions = ">=3.7"
 files = [
-    {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
-    {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
+    {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
+    {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
 ]
 
 [[package]]
 name = "ipykernel"
-version = "6.19.4"
+version = "6.25.1"
 description = "IPython Kernel for Jupyter"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "ipykernel-6.19.4-py3-none-any.whl", hash = "sha256:0ecdae0060da61c5222ad221681f3b99b5bef739e11a3b1eb5778aa47f056f1f"},
-    {file = "ipykernel-6.19.4.tar.gz", hash = "sha256:4140c282a6c71cdde59abe5eae2c71bf1eeb4a69316ab76e1c4c25150a49722b"},
+    {file = "ipykernel-6.25.1-py3-none-any.whl", hash = "sha256:c8a2430b357073b37c76c21c52184db42f6b4b0e438e1eb7df3c4440d120497c"},
+    {file = "ipykernel-6.25.1.tar.gz", hash = "sha256:050391364c0977e768e354bdb60cbbfbee7cbb943b1af1618382021136ffd42f"},
 ]
 
 [package.dependencies]
 appnope = {version = "*", markers = "platform_system == \"Darwin\""}
 comm = ">=0.1.1"
-debugpy = ">=1.0"
+debugpy = ">=1.6.5"
 ipython = ">=7.23.1"
 jupyter-client = ">=6.1.12"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 matplotlib-inline = ">=0.1"
 nest-asyncio = "*"
 packaging = "*"
 psutil = "*"
-pyzmq = ">=17"
+pyzmq = ">=20"
 tornado = ">=6.1"
 traitlets = ">=5.4.0"
 
 [package.extras]
 cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"]
-docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"]
+pyqt5 = ["pyqt5"]
+pyside6 = ["pyside6"]
 test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"]
 
 [[package]]
@@ -743,14 +1192,14 @@ files = [
 
 [[package]]
 name = "ipython"
-version = "8.10.0"
+version = "8.14.0"
 description = "IPython: Productive Interactive Computing"
 category = "main"
 optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
 files = [
-    {file = "ipython-8.10.0-py3-none-any.whl", hash = "sha256:b38c31e8fc7eff642fc7c597061fff462537cf2314e3225a19c906b7b0d8a345"},
-    {file = "ipython-8.10.0.tar.gz", hash = "sha256:b13a1d6c1f5818bd388db53b7107d17454129a70de2b87481d555daede5eb49e"},
+    {file = "ipython-8.14.0-py3-none-any.whl", hash = "sha256:248aca623f5c99a6635bc3857677b7320b9b8039f99f070ee0d20a5ca5a8e6bf"},
+    {file = "ipython-8.14.0.tar.gz", hash = "sha256:1d197b907b6ba441b692c48cf2a3a2de280dc0ac91a3405b39349a50272ca0a1"},
 ]
 
 [package.dependencies]
@@ -762,7 +1211,7 @@ jedi = ">=0.16"
 matplotlib-inline = "*"
 pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""}
 pickleshare = "*"
-prompt-toolkit = ">=3.0.30,<3.1.0"
+prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0"
 pygments = ">=2.4.0"
 stack-data = "*"
 traitlets = ">=5"
@@ -794,25 +1243,25 @@ files = [
 
 [[package]]
 name = "ipywidgets"
-version = "8.0.4"
+version = "8.1.0"
 description = "Jupyter interactive widgets"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "ipywidgets-8.0.4-py3-none-any.whl", hash = "sha256:ebb195e743b16c3947fe8827190fb87b4d00979c0fbf685afe4d2c4927059fa1"},
-    {file = "ipywidgets-8.0.4.tar.gz", hash = "sha256:c0005a77a47d77889cafed892b58e33b4a2a96712154404c6548ec22272811ea"},
+    {file = "ipywidgets-8.1.0-py3-none-any.whl", hash = "sha256:6c8396cc7b8c95dfb4e9ab0054f48c002f045e7e5d7ae523f559d64e525a98ab"},
+    {file = "ipywidgets-8.1.0.tar.gz", hash = "sha256:ce97dd90525b3066fd00094690964e7eac14cf9b7745d35565b5eeac20cce687"},
 ]
 
 [package.dependencies]
-ipykernel = ">=4.5.1"
+comm = ">=0.1.3"
 ipython = ">=6.1.0"
-jupyterlab-widgets = ">=3.0,<4.0"
+jupyterlab-widgets = ">=3.0.7,<3.1.0"
 traitlets = ">=4.3.1"
-widgetsnbextension = ">=4.0,<5.0"
+widgetsnbextension = ">=4.0.7,<4.1.0"
 
 [package.extras]
-test = ["jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"]
+test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"]
 
 [[package]]
 name = "isoduration"
@@ -831,22 +1280,22 @@ arrow = ">=0.15.0"
 
 [[package]]
 name = "jedi"
-version = "0.18.2"
+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 = [
-    {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"},
-    {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"},
+    {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"},
+    {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"},
 ]
 
 [package.dependencies]
-parso = ">=0.8.0,<0.9.0"
+parso = ">=0.8.3,<0.9.0"
 
 [package.extras]
 docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"]
-qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
+qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"]
 testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
 
 [[package]]
@@ -869,49 +1318,66 @@ i18n = ["Babel (>=2.7)"]
 
 [[package]]
 name = "joblib"
-version = "1.2.0"
+version = "1.3.2"
 description = "Lightweight pipelining with Python functions"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "joblib-1.2.0-py3-none-any.whl", hash = "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385"},
-    {file = "joblib-1.2.0.tar.gz", hash = "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018"},
+    {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"},
+    {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"},
+]
+
+[[package]]
+name = "json5"
+version = "0.9.14"
+description = "A Python implementation of the JSON5 data format."
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+    {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"},
+    {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"},
 ]
 
+[package.extras]
+dev = ["hypothesis"]
+
 [[package]]
 name = "jsonpointer"
-version = "2.3"
+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.*"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*"
 files = [
-    {file = "jsonpointer-2.3-py2.py3-none-any.whl", hash = "sha256:51801e558539b4e9cd268638c078c6c5746c9ac96bc38152d443400e4f3793e9"},
-    {file = "jsonpointer-2.3.tar.gz", hash = "sha256:97cba51526c829282218feb99dab1b1e6bdf8efd1c43dc9d57be093c0d69c99a"},
+    {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"},
+    {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"},
 ]
 
 [[package]]
 name = "jsonschema"
-version = "4.17.3"
+version = "4.19.0"
 description = "An implementation of JSON Schema validation for Python"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"},
-    {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"},
+    {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"},
+    {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"},
 ]
 
 [package.dependencies]
-attrs = ">=17.4.0"
+attrs = ">=22.2.0"
 fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
 idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
 isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
 jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""}
-pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2"
+jsonschema-specifications = ">=2023.03.6"
+referencing = ">=0.28.4"
 rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
 rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""}
+rpds-py = ">=0.7.1"
 uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""}
 webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""}
 
@@ -919,6 +1385,21 @@ webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-n
 format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"]
 format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"]
 
+[[package]]
+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 = [
+    {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"},
+    {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"},
+]
+
+[package.dependencies]
+referencing = ">=0.28.0"
+
 [[package]]
 name = "jupyter"
 version = "1.0.0"
@@ -942,140 +1423,161 @@ qtconsole = "*"
 
 [[package]]
 name = "jupyter-client"
-version = "7.4.8"
+version = "8.3.1"
 description = "Jupyter protocol implementation and client libraries"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "jupyter_client-7.4.8-py3-none-any.whl", hash = "sha256:d4a67ae86ee014bcb96bd8190714f6af921f2b0f52f4208b086aa5acfd9f8d65"},
-    {file = "jupyter_client-7.4.8.tar.gz", hash = "sha256:109a3c33b62a9cf65aa8325850a0999a795fac155d9de4f7555aef5f310ee35a"},
+    {file = "jupyter_client-8.3.1-py3-none-any.whl", hash = "sha256:5eb9f55eb0650e81de6b7e34308d8b92d04fe4ec41cd8193a913979e33d8e1a5"},
+    {file = "jupyter_client-8.3.1.tar.gz", hash = "sha256:60294b2d5b869356c893f57b1a877ea6510d60d45cf4b38057f1672d85699ac9"},
 ]
 
 [package.dependencies]
-entrypoints = "*"
-jupyter-core = ">=4.9.2"
-nest-asyncio = ">=1.5.4"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 python-dateutil = ">=2.8.2"
 pyzmq = ">=23.0"
 tornado = ">=6.2"
-traitlets = "*"
+traitlets = ">=5.3"
 
 [package.extras]
-doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"]
-test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"]
+docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
+test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"]
 
 [[package]]
 name = "jupyter-console"
-version = "6.4.4"
+version = "6.6.3"
 description = "Jupyter terminal console"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "jupyter_console-6.4.4-py3-none-any.whl", hash = "sha256:756df7f4f60c986e7bc0172e4493d3830a7e6e75c08750bbe59c0a5403ad6dee"},
-    {file = "jupyter_console-6.4.4.tar.gz", hash = "sha256:172f5335e31d600df61613a97b7f0352f2c8250bbd1092ef2d658f77249f89fb"},
+    {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"},
+    {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"},
 ]
 
 [package.dependencies]
-ipykernel = "*"
+ipykernel = ">=6.14"
 ipython = "*"
 jupyter-client = ">=7.0.0"
-prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0"
+jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
+prompt-toolkit = ">=3.0.30"
 pygments = "*"
+pyzmq = ">=17"
+traitlets = ">=5.4"
 
 [package.extras]
-test = ["pexpect"]
+test = ["flaky", "pexpect", "pytest"]
 
 [[package]]
 name = "jupyter-core"
-version = "5.1.1"
+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 = [
-    {file = "jupyter_core-5.1.1-py3-none-any.whl", hash = "sha256:f1038179d0f179b0e92c8fa2289c012b29dafdc9484b41821079f1a496f5a0f2"},
-    {file = "jupyter_core-5.1.1.tar.gz", hash = "sha256:f342d29eb6edb06f8dffa69adea987b3a9ee2b6702338a8cb6911516ea0b432d"},
+    {file = "jupyter_core-5.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"},
+    {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"},
 ]
 
 [package.dependencies]
 platformdirs = ">=2.5"
-pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""}
+pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""}
 traitlets = ">=5.3"
 
 [package.extras]
-docs = ["myst-parser", "sphinxcontrib-github-alt", "traitlets"]
+docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"]
 test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"]
 
 [[package]]
 name = "jupyter-events"
-version = "0.5.0"
+version = "0.7.0"
 description = "Jupyter Event System library"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "jupyter_events-0.5.0-py3-none-any.whl", hash = "sha256:6f7b67bf42b8a370c992187194ed02847dfa02307a7aebe9913e2d3979b9b6b8"},
-    {file = "jupyter_events-0.5.0.tar.gz", hash = "sha256:e27ffdd6138699d47d42cb65ae6d79334ff7c0d923694381c991ce56a140f2cd"},
+    {file = "jupyter_events-0.7.0-py3-none-any.whl", hash = "sha256:4753da434c13a37c3f3c89b500afa0c0a6241633441421f6adafe2fb2e2b924e"},
+    {file = "jupyter_events-0.7.0.tar.gz", hash = "sha256:7be27f54b8388c03eefea123a4f79247c5b9381c49fb1cd48615ee191eb12615"},
 ]
 
 [package.dependencies]
-jsonschema = {version = ">=4.3.0", extras = ["format-nongpl"]}
-python-json-logger = "*"
-pyyaml = "*"
-traitlets = "*"
+jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]}
+python-json-logger = ">=2.0.4"
+pyyaml = ">=5.3"
+referencing = "*"
+rfc3339-validator = "*"
+rfc3986-validator = ">=0.1.1"
+traitlets = ">=5.3"
 
 [package.extras]
 cli = ["click", "rich"]
-test = ["click", "coverage", "pre-commit", "pytest (>=6.1.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"]
+docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"]
+test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"]
+
+[[package]]
+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 = [
+    {file = "jupyter-lsp-2.2.0.tar.gz", hash = "sha256:8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1"},
+    {file = "jupyter_lsp-2.2.0-py3-none-any.whl", hash = "sha256:9e06b8b4f7dd50300b70dd1a78c0c3b0c3d8fa68e0f2d8a5d1fbab62072aca3f"},
+]
+
+[package.dependencies]
+jupyter-server = ">=1.1.2"
 
 [[package]]
 name = "jupyter-server"
-version = "2.0.6"
+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 = [
-    {file = "jupyter_server-2.0.6-py3-none-any.whl", hash = "sha256:6a4c9a3f9fa8679015954586944a568b911a98d7480ae1d56ff55a6a4f055254"},
-    {file = "jupyter_server-2.0.6.tar.gz", hash = "sha256:8dd75992e90b7ca556794a1ed5cca51263c697abc6d0df561af574aa1c0a033f"},
+    {file = "jupyter_server-2.7.3-py3-none-any.whl", hash = "sha256:8e4b90380b59d7a1e31086c4692231f2a2ea4cb269f5516e60aba72ce8317fc9"},
+    {file = "jupyter_server-2.7.3.tar.gz", hash = "sha256:d4916c8581c4ebbc534cebdaa8eca2478d9f3bfdd88eae29fcab0120eac57649"},
 ]
 
 [package.dependencies]
-anyio = ">=3.1.0,<4"
+anyio = ">=3.1.0"
 argon2-cffi = "*"
 jinja2 = "*"
 jupyter-client = ">=7.4.4"
 jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
-jupyter-events = ">=0.4.0"
+jupyter-events = ">=0.6.0"
 jupyter-server-terminals = "*"
 nbconvert = ">=6.4.4"
 nbformat = ">=5.3.0"
+overrides = "*"
 packaging = "*"
 prometheus-client = "*"
 pywinpty = {version = "*", markers = "os_name == \"nt\""}
 pyzmq = ">=24"
-send2trash = "*"
+send2trash = ">=1.8.2"
 terminado = ">=0.8.3"
 tornado = ">=6.2.0"
 traitlets = ">=5.6.0"
 websocket-client = "*"
 
 [package.extras]
-docs = ["docutils (<0.20)", "ipykernel", "jinja2", "jupyter-client", "jupyter-server", "mistune (<1.0.0)", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"]
-test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"]
+docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"]
+test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"]
 
 [[package]]
 name = "jupyter-server-terminals"
-version = "0.4.3"
+version = "0.4.4"
 description = "A Jupyter Server Extension Providing Terminals."
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "jupyter_server_terminals-0.4.3-py3-none-any.whl", hash = "sha256:ec67d3f1895d25cfb586a87a50b8eee13b709898a4afd721058e551e0a0f480d"},
-    {file = "jupyter_server_terminals-0.4.3.tar.gz", hash = "sha256:8421438d95a1f1f6994c48dd5dc10ad167ea7c196972bb5d1d7a9da1e30fde02"},
+    {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"},
+    {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"},
 ]
 
 [package.dependencies]
@@ -1083,9 +1585,41 @@ pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""}
 terminado = ">=0.8.3"
 
 [package.extras]
-docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxemoji", "tornado"]
+docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"]
 test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"]
 
+[[package]]
+name = "jupyterlab"
+version = "4.0.5"
+description = "JupyterLab computational environment"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "jupyterlab-4.0.5-py3-none-any.whl", hash = "sha256:13b3a326e7b95d72746fe20dbe80ee1e71165d6905e01ceaf1320eb809cb1b47"},
+    {file = "jupyterlab-4.0.5.tar.gz", hash = "sha256:de49deb75f9b9aec478ed04754cbefe9c5d22fd796a5783cdc65e212983d3611"},
+]
+
+[package.dependencies]
+async-lru = ">=1.0.0"
+ipykernel = "*"
+jinja2 = ">=3.0.3"
+jupyter-core = "*"
+jupyter-lsp = ">=2.0.0"
+jupyter-server = ">=2.4.0,<3"
+jupyterlab-server = ">=2.19.0,<3"
+notebook-shim = ">=0.2"
+packaging = "*"
+tomli = {version = "*", markers = "python_version < \"3.11\""}
+tornado = ">=6.2.0"
+traitlets = "*"
+
+[package.extras]
+dev = ["black[jupyter] (==23.3.0)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.0.271)"]
+docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8)", "sphinx-copybutton"]
+docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"]
+test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"]
+
 [[package]]
 name = "jupyterlab-pygments"
 version = "0.2.2"
@@ -1098,94 +1632,156 @@ files = [
     {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"},
 ]
 
+[[package]]
+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 = [
+    {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"},
+    {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"},
+]
+
+[package.dependencies]
+babel = ">=2.10"
+jinja2 = ">=3.0.3"
+json5 = ">=0.9.0"
+jsonschema = ">=4.17.3"
+jupyter-server = ">=1.21,<3"
+packaging = ">=21.3"
+requests = ">=2.28"
+
+[package.extras]
+docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"]
+openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"]
+test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"]
+
 [[package]]
 name = "jupyterlab-widgets"
-version = "3.0.5"
+version = "3.0.8"
 description = "Jupyter interactive widgets for JupyterLab"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "jupyterlab_widgets-3.0.5-py3-none-any.whl", hash = "sha256:a04a42e50231b355b7087e16a818f541e53589f7647144ea0344c4bf16f300e5"},
-    {file = "jupyterlab_widgets-3.0.5.tar.gz", hash = "sha256:eeaecdeaf6c03afc960ddae201ced88d5979b4ca9c3891bcb8f6631af705f5ef"},
+    {file = "jupyterlab_widgets-3.0.8-py3-none-any.whl", hash = "sha256:4715912d6ceab839c9db35953c764b3214ebbc9161c809f6e0510168845dfdf5"},
+    {file = "jupyterlab_widgets-3.0.8.tar.gz", hash = "sha256:d428ab97b8d87cc7c54cbf37644d6e0f0e662f23876e05fa460a73ec3257252a"},
 ]
 
 [[package]]
 name = "kiwisolver"
-version = "1.4.4"
+version = "1.4.5"
 description = "A fast implementation of the Cassowary constraint solver"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"},
-    {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"},
-    {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"},
-    {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"},
-    {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"},
-    {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"},
-    {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"},
-    {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"},
-    {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"},
-    {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"},
-    {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"},
-    {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"},
-    {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"},
-    {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"},
-    {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"},
-    {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"},
-    {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"},
-    {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"},
-    {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"},
-    {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"},
-    {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"},
-    {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"},
-    {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"},
-    {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"},
-    {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"},
-    {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"},
-    {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"},
-    {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"},
-    {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"},
-    {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"},
-    {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"},
-    {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"},
-    {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"},
-    {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"},
-    {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"},
-    {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"},
+    {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"},
+    {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"},
+    {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"},
+    {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"},
+    {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"},
+    {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"},
+    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"},
+    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"},
+    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"},
+    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"},
+    {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"},
+    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"},
+    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"},
+    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"},
+    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"},
+    {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"},
+    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"},
+    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"},
+    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"},
+    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"},
+    {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"},
+    {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"},
 ]
 
 [[package]]
@@ -1256,105 +1852,135 @@ files = [
     {file = "llvmlite-0.39.1.tar.gz", hash = "sha256:b43abd7c82e805261c425d50335be9a6c4f84264e34d6d6e475207300005d572"},
 ]
 
+[[package]]
+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 = [
+    {file = "Mako-1.2.4-py3-none-any.whl", hash = "sha256:c97c79c018b9165ac9922ae4f32da095ffd3c4e6872b45eded42926deea46818"},
+    {file = "Mako-1.2.4.tar.gz", hash = "sha256:d60a3903dc3bb01a18ad6a89cdbe2e4eadc69c0bc8ef1e3773ba53d44c3f7a34"},
+]
+
+[package.dependencies]
+MarkupSafe = ">=0.9.2"
+
+[package.extras]
+babel = ["Babel"]
+lingua = ["lingua"]
+testing = ["pytest"]
+
 [[package]]
 name = "markupsafe"
-version = "2.1.1"
+version = "2.1.3"
 description = "Safely add untrusted strings to HTML/XML markup."
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
-    {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
-    {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
-    {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
-    {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
-    {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
-    {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
-    {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
-    {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
-    {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
-    {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
-    {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
-    {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
-    {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
-    {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
-    {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
-    {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
-    {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
-    {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
-    {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
-    {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
-    {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"},
+    {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"},
+    {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"},
+    {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"},
+    {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"},
+    {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"},
+    {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"},
+    {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"},
+    {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"},
+    {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"},
+    {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"},
+    {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"},
+    {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"},
+    {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"},
+    {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"},
 ]
 
 [[package]]
 name = "matplotlib"
-version = "3.6.2"
+version = "3.7.2"
 description = "Python plotting package"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "matplotlib-3.6.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:8d0068e40837c1d0df6e3abf1cdc9a34a6d2611d90e29610fa1d2455aeb4e2e5"},
-    {file = "matplotlib-3.6.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:252957e208c23db72ca9918cb33e160c7833faebf295aaedb43f5b083832a267"},
-    {file = "matplotlib-3.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d50e8c1e571ee39b5dfbc295c11ad65988879f68009dd281a6e1edbc2ff6c18c"},
-    {file = "matplotlib-3.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d840adcad7354be6f2ec28d0706528b0026e4c3934cc6566b84eac18633eab1b"},
-    {file = "matplotlib-3.6.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78ec3c3412cf277e6252764ee4acbdbec6920cc87ad65862272aaa0e24381eee"},
-    {file = "matplotlib-3.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9347cc6822f38db2b1d1ce992f375289670e595a2d1c15961aacbe0977407dfc"},
-    {file = "matplotlib-3.6.2-cp310-cp310-win32.whl", hash = "sha256:e0bbee6c2a5bf2a0017a9b5e397babb88f230e6f07c3cdff4a4c4bc75ed7c617"},
-    {file = "matplotlib-3.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:8a0ae37576ed444fe853709bdceb2be4c7df6f7acae17b8378765bd28e61b3ae"},
-    {file = "matplotlib-3.6.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:5ecfc6559132116dedfc482d0ad9df8a89dc5909eebffd22f3deb684132d002f"},
-    {file = "matplotlib-3.6.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9f335e5625feb90e323d7e3868ec337f7b9ad88b5d633f876e3b778813021dab"},
-    {file = "matplotlib-3.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2604c6450f9dd2c42e223b1f5dca9643a23cfecc9fde4a94bb38e0d2693b136"},
-    {file = "matplotlib-3.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5afe0a7ea0e3a7a257907060bee6724a6002b7eec55d0db16fd32409795f3e1"},
-    {file = "matplotlib-3.6.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0e7a658fbafcddcaefaa07ba8dae9384be2343468a8e011061791588d839fa"},
-    {file = "matplotlib-3.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32d29c8c26362169c80c5718ce367e8c64f4dd068a424e7110df1dd2ed7bd428"},
-    {file = "matplotlib-3.6.2-cp311-cp311-win32.whl", hash = "sha256:5024b8ed83d7f8809982d095d8ab0b179bebc07616a9713f86d30cf4944acb73"},
-    {file = "matplotlib-3.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:52c2bdd7cd0bf9d5ccdf9c1816568fd4ccd51a4d82419cc5480f548981b47dd0"},
-    {file = "matplotlib-3.6.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:8a8dbe2cb7f33ff54b16bb5c500673502a35f18ac1ed48625e997d40c922f9cc"},
-    {file = "matplotlib-3.6.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:380d48c15ec41102a2b70858ab1dedfa33eb77b2c0982cb65a200ae67a48e9cb"},
-    {file = "matplotlib-3.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0844523dfaaff566e39dbfa74e6f6dc42e92f7a365ce80929c5030b84caa563a"},
-    {file = "matplotlib-3.6.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7f716b6af94dc1b6b97c46401774472f0867e44595990fe80a8ba390f7a0a028"},
-    {file = "matplotlib-3.6.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74153008bd24366cf099d1f1e83808d179d618c4e32edb0d489d526523a94d9f"},
-    {file = "matplotlib-3.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f41e57ad63d336fe50d3a67bb8eaa26c09f6dda6a59f76777a99b8ccd8e26aec"},
-    {file = "matplotlib-3.6.2-cp38-cp38-win32.whl", hash = "sha256:d0e9ac04065a814d4cf2c6791a2ad563f739ae3ae830d716d54245c2b96fead6"},
-    {file = "matplotlib-3.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:8a9d899953c722b9afd7e88dbefd8fb276c686c3116a43c577cfabf636180558"},
-    {file = "matplotlib-3.6.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:f04f97797df35e442ed09f529ad1235d1f1c0f30878e2fe09a2676b71a8801e0"},
-    {file = "matplotlib-3.6.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3964934731fd7a289a91d315919cf757f293969a4244941ab10513d2351b4e83"},
-    {file = "matplotlib-3.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:168093410b99f647ba61361b208f7b0d64dde1172b5b1796d765cd243cadb501"},
-    {file = "matplotlib-3.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e16dcaecffd55b955aa5e2b8a804379789c15987e8ebd2f32f01398a81e975b"},
-    {file = "matplotlib-3.6.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83dc89c5fd728fdb03b76f122f43b4dcee8c61f1489e232d9ad0f58020523e1c"},
-    {file = "matplotlib-3.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:795ad83940732b45d39b82571f87af0081c120feff2b12e748d96bb191169e33"},
-    {file = "matplotlib-3.6.2-cp39-cp39-win32.whl", hash = "sha256:19d61ee6414c44a04addbe33005ab1f87539d9f395e25afcbe9a3c50ce77c65c"},
-    {file = "matplotlib-3.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:5ba73aa3aca35d2981e0b31230d58abb7b5d7ca104e543ae49709208d8ce706a"},
-    {file = "matplotlib-3.6.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1836f366272b1557a613f8265db220eb8dd883202bbbabe01bad5a4eadfd0c95"},
-    {file = "matplotlib-3.6.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0eda9d1b43f265da91fb9ae10d6922b5a986e2234470a524e6b18f14095b20d2"},
-    {file = "matplotlib-3.6.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec9be0f4826cdb3a3a517509dcc5f87f370251b76362051ab59e42b6b765f8c4"},
-    {file = "matplotlib-3.6.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3cef89888a466228fc4e4b2954e740ce8e9afde7c4315fdd18caa1b8de58ca17"},
-    {file = "matplotlib-3.6.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:54fa9fe27f5466b86126ff38123261188bed568c1019e4716af01f97a12fe812"},
-    {file = "matplotlib-3.6.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e68be81cd8c22b029924b6d0ee814c337c0e706b8d88495a617319e5dd5441c3"},
-    {file = "matplotlib-3.6.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0ca2c60d3966dfd6608f5f8c49b8a0fcf76de6654f2eda55fc6ef038d5a6f27"},
-    {file = "matplotlib-3.6.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4426c74761790bff46e3d906c14c7aab727543293eed5a924300a952e1a3a3c1"},
-    {file = "matplotlib-3.6.2.tar.gz", hash = "sha256:b03fd10a1709d0101c054883b550f7c4c5e974f751e2680318759af005964990"},
+    {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:2699f7e73a76d4c110f4f25be9d2496d6ab4f17345307738557d345f099e07de"},
+    {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a8035ba590658bae7562786c9cc6ea1a84aa49d3afab157e414c9e2ea74f496d"},
+    {file = "matplotlib-3.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f8e4a49493add46ad4a8c92f63e19d548b2b6ebbed75c6b4c7f46f57d36cdd1"},
+    {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71667eb2ccca4c3537d9414b1bc00554cb7f91527c17ee4ec38027201f8f1603"},
+    {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:152ee0b569a37630d8628534c628456b28686e085d51394da6b71ef84c4da201"},
+    {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070f8dddd1f5939e60aacb8fa08f19551f4b0140fab16a3669d5cd6e9cb28fc8"},
+    {file = "matplotlib-3.7.2-cp310-cp310-win32.whl", hash = "sha256:fdbb46fad4fb47443b5b8ac76904b2e7a66556844f33370861b4788db0f8816a"},
+    {file = "matplotlib-3.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:23fb1750934e5f0128f9423db27c474aa32534cec21f7b2153262b066a581fd1"},
+    {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:30e1409b857aa8a747c5d4f85f63a79e479835f8dffc52992ac1f3f25837b544"},
+    {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:50e0a55ec74bf2d7a0ebf50ac580a209582c2dd0f7ab51bc270f1b4a0027454e"},
+    {file = "matplotlib-3.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac60daa1dc83e8821eed155796b0f7888b6b916cf61d620a4ddd8200ac70cd64"},
+    {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:305e3da477dc8607336ba10bac96986d6308d614706cae2efe7d3ffa60465b24"},
+    {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c308b255efb9b06b23874236ec0f10f026673ad6515f602027cc8ac7805352d"},
+    {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60c521e21031632aa0d87ca5ba0c1c05f3daacadb34c093585a0be6780f698e4"},
+    {file = "matplotlib-3.7.2-cp311-cp311-win32.whl", hash = "sha256:26bede320d77e469fdf1bde212de0ec889169b04f7f1179b8930d66f82b30cbc"},
+    {file = "matplotlib-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4860132c8c05261a5f5f8467f1b269bf1c7c23902d75f2be57c4a7f2394b3e"},
+    {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:a1733b8e84e7e40a9853e505fe68cc54339f97273bdfe6f3ed980095f769ddc7"},
+    {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d9881356dc48e58910c53af82b57183879129fa30492be69058c5b0d9fddf391"},
+    {file = "matplotlib-3.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f081c03f413f59390a80b3e351cc2b2ea0205839714dbc364519bcf51f4b56ca"},
+    {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cd120fca3407a225168238b790bd5c528f0fafde6172b140a2f3ab7a4ea63e9"},
+    {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2c1590b90aa7bd741b54c62b78de05d4186271e34e2377e0289d943b3522273"},
+    {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d2ff3c984b8a569bc1383cd468fc06b70d7b59d5c2854ca39f1436ae8394117"},
+    {file = "matplotlib-3.7.2-cp38-cp38-win32.whl", hash = "sha256:5dea00b62d28654b71ca92463656d80646675628d0828e08a5f3b57e12869e13"},
+    {file = "matplotlib-3.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f506a1776ee94f9e131af1ac6efa6e5bc7cb606a3e389b0ccb6e657f60bb676"},
+    {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6515e878f91894c2e4340d81f0911857998ccaf04dbc1bba781e3d89cbf70608"},
+    {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:71f7a8c6b124e904db550f5b9fe483d28b896d4135e45c4ea381ad3b8a0e3256"},
+    {file = "matplotlib-3.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12f01b92ecd518e0697da4d97d163b2b3aa55eb3eb4e2c98235b3396d7dad55f"},
+    {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7e28d6396563955f7af437894a36bf2b279462239a41028323e04b85179058b"},
+    {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbcf59334ff645e6a67cd5f78b4b2cdb76384cdf587fa0d2dc85f634a72e1a3e"},
+    {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:318c89edde72ff95d8df67d82aca03861240512994a597a435a1011ba18dbc7f"},
+    {file = "matplotlib-3.7.2-cp39-cp39-win32.whl", hash = "sha256:ce55289d5659b5b12b3db4dc9b7075b70cef5631e56530f14b2945e8836f2d20"},
+    {file = "matplotlib-3.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:2ecb5be2b2815431c81dc115667e33da0f5a1bcf6143980d180d09a717c4a12e"},
+    {file = "matplotlib-3.7.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdcd28360dbb6203fb5219b1a5658df226ac9bebc2542a9e8f457de959d713d0"},
+    {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3cca3e842b11b55b52c6fb8bd6a4088693829acbfcdb3e815fa9b7d5c92c1b"},
+    {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebf577c7a6744e9e1bd3fee45fc74a02710b214f94e2bde344912d85e0c9af7c"},
+    {file = "matplotlib-3.7.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:936bba394682049919dda062d33435b3be211dc3dcaa011e09634f060ec878b2"},
+    {file = "matplotlib-3.7.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bc221ffbc2150458b1cd71cdd9ddd5bb37962b036e41b8be258280b5b01da1dd"},
+    {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35d74ebdb3f71f112b36c2629cf32323adfbf42679e2751252acd468f5001c07"},
+    {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:717157e61b3a71d3d26ad4e1770dc85156c9af435659a25ee6407dc866cb258d"},
+    {file = "matplotlib-3.7.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:20f844d6be031948148ba49605c8b96dfe7d3711d1b63592830d650622458c11"},
+    {file = "matplotlib-3.7.2.tar.gz", hash = "sha256:a8cdb91dddb04436bd2f098b8fdf4b81352e68cf4d2c6756fcc414791076569b"},
 ]
 
 [package.dependencies]
@@ -1362,10 +1988,10 @@ contourpy = ">=1.0.1"
 cycler = ">=0.10"
 fonttools = ">=4.22.0"
 kiwisolver = ">=1.0.1"
-numpy = ">=1.19"
+numpy = ">=1.20"
 packaging = ">=20.0"
 pillow = ">=6.2.0"
-pyparsing = ">=2.2.1"
+pyparsing = ">=2.3.1,<3.1"
 python-dateutil = ">=2.7"
 
 [[package]]
@@ -1385,123 +2011,183 @@ traitlets = "*"
 
 [[package]]
 name = "mistune"
-version = "2.0.4"
-description = "A sane Markdown parser with useful plugins and renderers"
+version = "3.0.1"
+description = "A sane and fast Markdown parser with useful plugins and renderers"
 category = "main"
 optional = false
-python-versions = "*"
+python-versions = ">=3.7"
 files = [
-    {file = "mistune-2.0.4-py2.py3-none-any.whl", hash = "sha256:182cc5ee6f8ed1b807de6b7bb50155df7b66495412836b9a74c8fbdfc75fe36d"},
-    {file = "mistune-2.0.4.tar.gz", hash = "sha256:9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808"},
+    {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"},
+    {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"},
 ]
 
 [[package]]
-name = "nbclassic"
-version = "0.4.8"
-description = "A web-based notebook environment for interactive computing"
+name = "multidict"
+version = "6.0.4"
+description = "multidict implementation"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "nbclassic-0.4.8-py3-none-any.whl", hash = "sha256:cbf05df5842b420d5cece0143462380ea9d308ff57c2dc0eb4d6e035b18fbfb3"},
-    {file = "nbclassic-0.4.8.tar.gz", hash = "sha256:c74d8a500f8e058d46b576a41e5bc640711e1032cf7541dde5f73ea49497e283"},
+    {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 = [
+    {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
+    {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
 ]
 
-[package.dependencies]
-argon2-cffi = "*"
-ipykernel = "*"
-ipython-genutils = "*"
-jinja2 = "*"
-jupyter-client = ">=6.1.1"
-jupyter-core = ">=4.6.1"
-jupyter-server = ">=1.8"
-nbconvert = ">=5"
-nbformat = "*"
-nest-asyncio = ">=1.5"
-notebook-shim = ">=0.1.0"
-prometheus-client = "*"
-pyzmq = ">=17"
-Send2Trash = ">=1.8.0"
-terminado = ">=0.8.3"
-tornado = ">=6.1"
-traitlets = ">=4.2.1"
-
-[package.extras]
-docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"]
-json-logging = ["json-logging"]
-test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"]
-
 [[package]]
 name = "nbclient"
-version = "0.7.2"
+version = "0.8.0"
 description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
 category = "main"
 optional = false
-python-versions = ">=3.7.0"
+python-versions = ">=3.8.0"
 files = [
-    {file = "nbclient-0.7.2-py3-none-any.whl", hash = "sha256:d97ac6257de2794f5397609df754fcbca1a603e94e924eb9b99787c031ae2e7c"},
-    {file = "nbclient-0.7.2.tar.gz", hash = "sha256:884a3f4a8c4fc24bb9302f263e0af47d97f0d01fe11ba714171b320c8ac09547"},
+    {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"},
+    {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"},
 ]
 
 [package.dependencies]
 jupyter-client = ">=6.1.12"
 jupyter-core = ">=4.12,<5.0.0 || >=5.1.0"
 nbformat = ">=5.1"
-traitlets = ">=5.3"
+traitlets = ">=5.4"
 
 [package.extras]
 dev = ["pre-commit"]
-docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme"]
-test = ["ipykernel", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"]
+docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"]
+test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"]
 
 [[package]]
 name = "nbconvert"
-version = "7.2.7"
+version = "7.8.0"
 description = "Converting Jupyter Notebooks"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "nbconvert-7.2.7-py3-none-any.whl", hash = "sha256:e057f1f87a6ac50629b724d9a46b40e2ba394d6f20ee7f33f4acef1928a15af3"},
-    {file = "nbconvert-7.2.7.tar.gz", hash = "sha256:8b727b0503bf4e0ff3907c8bea030d3fc4015fbee8669ac6ac2a5a6668b49d5e"},
+    {file = "nbconvert-7.8.0-py3-none-any.whl", hash = "sha256:aec605e051fa682ccc7934ccc338ba1e8b626cfadbab0db592106b630f63f0f2"},
+    {file = "nbconvert-7.8.0.tar.gz", hash = "sha256:f5bc15a1247e14dd41ceef0c0a3bc70020e016576eb0578da62f1c5b4f950479"},
 ]
 
 [package.dependencies]
 beautifulsoup4 = "*"
-bleach = "*"
+bleach = "!=5.0.0"
 defusedxml = "*"
 jinja2 = ">=3.0"
 jupyter-core = ">=4.7"
 jupyterlab-pygments = "*"
 markupsafe = ">=2.0"
-mistune = ">=2.0.3,<3"
+mistune = ">=2.0.3,<4"
 nbclient = ">=0.5.0"
-nbformat = ">=5.1"
+nbformat = ">=5.7"
 packaging = "*"
 pandocfilters = ">=1.4.1"
 pygments = ">=2.4.1"
 tinycss2 = "*"
-traitlets = ">=5.0"
+traitlets = ">=5.1"
 
 [package.extras]
 all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"]
-docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)"]
+docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"]
 qtpdf = ["nbconvert[qtpng]"]
 qtpng = ["pyqtwebengine (>=5.15)"]
 serve = ["tornado (>=6.1)"]
-test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"]
-webpdf = ["pyppeteer (>=1,<1.1)"]
+test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"]
+webpdf = ["playwright"]
 
 [[package]]
 name = "nbformat"
-version = "5.7.1"
+version = "5.9.2"
 description = "The Jupyter Notebook format"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "nbformat-5.7.1-py3-none-any.whl", hash = "sha256:e52ab802ce7f7a2863861e914642f021b9d7c23ad9726d14c36df92a79acd754"},
-    {file = "nbformat-5.7.1.tar.gz", hash = "sha256:3810a0130453ed031970521d20989b8a592f3c2e73283a8280ae34ae1f75b3f8"},
+    {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"},
+    {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"},
 ]
 
 [package.dependencies]
@@ -1511,73 +2197,62 @@ jupyter-core = "*"
 traitlets = ">=5.1"
 
 [package.extras]
-docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"]
+docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
 test = ["pep440", "pre-commit", "pytest", "testpath"]
 
 [[package]]
 name = "nest-asyncio"
-version = "1.5.6"
+version = "1.5.7"
 description = "Patch asyncio to allow nested event loops"
 category = "main"
 optional = false
 python-versions = ">=3.5"
 files = [
-    {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"},
-    {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"},
+    {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"},
+    {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"},
 ]
 
 [[package]]
 name = "notebook"
-version = "6.5.2"
-description = "A web-based notebook environment for interactive computing"
+version = "7.0.3"
+description = "Jupyter Notebook - A web-based notebook environment for interactive computing"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "notebook-6.5.2-py3-none-any.whl", hash = "sha256:e04f9018ceb86e4fa841e92ea8fb214f8d23c1cedfde530cc96f92446924f0e4"},
-    {file = "notebook-6.5.2.tar.gz", hash = "sha256:c1897e5317e225fc78b45549a6ab4b668e4c996fd03a04e938fe5e7af2bfffd0"},
+    {file = "notebook-7.0.3-py3-none-any.whl", hash = "sha256:786ab2e3287c068667adce3029b540dd18fc5d23f49181b4b4ee4f6b48a7ca81"},
+    {file = "notebook-7.0.3.tar.gz", hash = "sha256:07f3c5062fd0e6e69864437a0347abc485d991aae87a92c47d659699f571b729"},
 ]
 
 [package.dependencies]
-argon2-cffi = "*"
-ipykernel = "*"
-ipython-genutils = "*"
-jinja2 = "*"
-jupyter-client = ">=5.3.4"
-jupyter-core = ">=4.6.1"
-nbclassic = ">=0.4.7"
-nbconvert = ">=5"
-nbformat = "*"
-nest-asyncio = ">=1.5"
-prometheus-client = "*"
-pyzmq = ">=17"
-Send2Trash = ">=1.8.0"
-terminado = ">=0.8.3"
-tornado = ">=6.1"
-traitlets = ">=4.2.1"
+jupyter-server = ">=2.4.0,<3"
+jupyterlab = ">=4.0.2,<5"
+jupyterlab-server = ">=2.22.1,<3"
+notebook-shim = ">=0.2,<0.3"
+tornado = ">=6.2.0"
 
 [package.extras]
-docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"]
-json-logging = ["json-logging"]
-test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"]
+dev = ["hatch", "pre-commit"]
+docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"]
+test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"]
 
 [[package]]
 name = "notebook-shim"
-version = "0.2.2"
+version = "0.2.3"
 description = "A shim layer for notebook traits and config"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "notebook_shim-0.2.2-py3-none-any.whl", hash = "sha256:9c6c30f74c4fbea6fce55c1be58e7fd0409b1c681b075dcedceb005db5026949"},
-    {file = "notebook_shim-0.2.2.tar.gz", hash = "sha256:090e0baf9a5582ff59b607af523ca2db68ff216da0c69956b62cab2ef4fc9c3f"},
+    {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"},
+    {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"},
 ]
 
 [package.dependencies]
 jupyter-server = ">=1.8,<3"
 
 [package.extras]
-test = ["pytest", "pytest-console-scripts", "pytest-tornasync"]
+test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"]
 
 [[package]]
 name = "numba"
@@ -1660,60 +2335,99 @@ files = [
     {file = "numpy-1.23.5.tar.gz", hash = "sha256:1b1766d6f397c18153d40015ddfc79ddb715cabadc04d2d228d4e5a8bc4ded1a"},
 ]
 
+[[package]]
+name = "oic"
+version = "1.6.1"
+description = "Python implementation of OAuth2 and OpenID Connect"
+category = "main"
+optional = false
+python-versions = "~=3.7"
+files = [
+    {file = "oic-1.6.1-py3-none-any.whl", hash = "sha256:fcbf948a22e4d4df66f6bf57d327933f32a7b539640d9b42883457634360ba78"},
+    {file = "oic-1.6.1.tar.gz", hash = "sha256:385a1f64bb59519df1e23840530921bf416740240f505ea6d161e331d3d39fad"},
+]
+
+[package.dependencies]
+cryptography = "*"
+defusedxml = "*"
+mako = "*"
+pycryptodomex = "*"
+pydantic-settings = "*"
+pyjwkest = ">=1.3.6"
+requests = "*"
+
+[package.extras]
+develop = ["cherrypy (==3.2.4)", "pyOpenSSL"]
+docs = ["Sphinx", "alabaster", "autodoc-pydantic", "sphinx-autobuild"]
+examples = ["beaker"]
+ldap-authn = ["python-ldap"]
+quality = ["bandit", "black", "eradicate", "isort", "mypy", "pylama", "readme-renderer[md]"]
+testing = ["freezegun", "pytest", "responses", "testfixtures"]
+types = ["types-requests"]
+
+[[package]]
+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 = [
+    {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"},
+    {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"},
+]
+
 [[package]]
 name = "packaging"
-version = "22.0"
+version = "23.1"
 description = "Core utilities for Python packages"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "packaging-22.0-py3-none-any.whl", hash = "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"},
-    {file = "packaging-22.0.tar.gz", hash = "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3"},
+    {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"},
+    {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"},
 ]
 
 [[package]]
 name = "pandas"
-version = "1.5.2"
+version = "1.5.3"
 description = "Powerful data structures for data analysis, time series, and statistics"
 category = "main"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "pandas-1.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e9dbacd22555c2d47f262ef96bb4e30880e5956169741400af8b306bbb24a273"},
-    {file = "pandas-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e2b83abd292194f350bb04e188f9379d36b8dfac24dd445d5c87575f3beaf789"},
-    {file = "pandas-1.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2552bffc808641c6eb471e55aa6899fa002ac94e4eebfa9ec058649122db5824"},
-    {file = "pandas-1.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fc87eac0541a7d24648a001d553406f4256e744d92df1df8ebe41829a915028"},
-    {file = "pandas-1.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0d8fd58df5d17ddb8c72a5075d87cd80d71b542571b5f78178fb067fa4e9c72"},
-    {file = "pandas-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:4aed257c7484d01c9a194d9a94758b37d3d751849c05a0050c087a358c41ad1f"},
-    {file = "pandas-1.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:375262829c8c700c3e7cbb336810b94367b9c4889818bbd910d0ecb4e45dc261"},
-    {file = "pandas-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc3cd122bea268998b79adebbb8343b735a5511ec14efb70a39e7acbc11ccbdc"},
-    {file = "pandas-1.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b4f5a82afa4f1ff482ab8ded2ae8a453a2cdfde2001567b3ca24a4c5c5ca0db3"},
-    {file = "pandas-1.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8092a368d3eb7116e270525329a3e5c15ae796ccdf7ccb17839a73b4f5084a39"},
-    {file = "pandas-1.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6257b314fc14958f8122779e5a1557517b0f8e500cfb2bd53fa1f75a8ad0af2"},
-    {file = "pandas-1.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:82ae615826da838a8e5d4d630eb70c993ab8636f0eff13cb28aafc4291b632b5"},
-    {file = "pandas-1.5.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:457d8c3d42314ff47cc2d6c54f8fc0d23954b47977b2caed09cd9635cb75388b"},
-    {file = "pandas-1.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c009a92e81ce836212ce7aa98b219db7961a8b95999b97af566b8dc8c33e9519"},
-    {file = "pandas-1.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:71f510b0efe1629bf2f7c0eadb1ff0b9cf611e87b73cd017e6b7d6adb40e2b3a"},
-    {file = "pandas-1.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a40dd1e9f22e01e66ed534d6a965eb99546b41d4d52dbdb66565608fde48203f"},
-    {file = "pandas-1.5.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ae7e989f12628f41e804847a8cc2943d362440132919a69429d4dea1f164da0"},
-    {file = "pandas-1.5.2-cp38-cp38-win32.whl", hash = "sha256:530948945e7b6c95e6fa7aa4be2be25764af53fba93fe76d912e35d1c9ee46f5"},
-    {file = "pandas-1.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:73f219fdc1777cf3c45fde7f0708732ec6950dfc598afc50588d0d285fddaefc"},
-    {file = "pandas-1.5.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9608000a5a45f663be6af5c70c3cbe634fa19243e720eb380c0d378666bc7702"},
-    {file = "pandas-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:315e19a3e5c2ab47a67467fc0362cb36c7c60a93b6457f675d7d9615edad2ebe"},
-    {file = "pandas-1.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e18bc3764cbb5e118be139b3b611bc3fbc5d3be42a7e827d1096f46087b395eb"},
-    {file = "pandas-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0183cb04a057cc38fde5244909fca9826d5d57c4a5b7390c0cc3fa7acd9fa883"},
-    {file = "pandas-1.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:344021ed3e639e017b452aa8f5f6bf38a8806f5852e217a7594417fb9bbfa00e"},
-    {file = "pandas-1.5.2-cp39-cp39-win32.whl", hash = "sha256:e7469271497960b6a781eaa930cba8af400dd59b62ec9ca2f4d31a19f2f91090"},
-    {file = "pandas-1.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:c218796d59d5abd8780170c937b812c9637e84c32f8271bbf9845970f8c1351f"},
-    {file = "pandas-1.5.2.tar.gz", hash = "sha256:220b98d15cee0b2cd839a6358bd1f273d0356bf964c1a1aeb32d47db0215488b"},
-]
-
-[package.dependencies]
-numpy = [
-    {version = ">=1.21.0", markers = "python_version >= \"3.10\""},
-    {version = ">=1.23.2", markers = "python_version >= \"3.11\""},
+    {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"},
+    {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"},
+    {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"},
+    {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"},
+    {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"},
+    {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"},
+    {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"},
+    {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"},
+    {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"},
+    {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"},
+    {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"},
+    {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"},
+    {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"},
+    {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"},
+    {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"},
+    {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"},
+    {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"},
+    {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"},
+    {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"},
+    {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"},
+    {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"},
+    {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"},
+    {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"},
+    {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"},
+    {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"},
+    {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"},
+    {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"},
 ]
+
+[package.dependencies]
+numpy = {version = ">=1.21.0", markers = "python_version >= \"3.10\""}
 python-dateutil = ">=2.8.1"
 pytz = ">=2020.1"
 
@@ -1782,6 +2496,18 @@ files = [
 qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
 testing = ["docopt", "pytest (<6.0.0)"]
 
+[[package]]
+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 = [
+    {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"},
+    {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"},
+]
+
 [[package]]
 name = "pexpect"
 version = "4.8.0"
@@ -1811,105 +2537,110 @@ files = [
 
 [[package]]
 name = "pillow"
-version = "9.3.0"
+version = "10.0.0"
 description = "Python Imaging Library (Fork)"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "Pillow-9.3.0-1-cp37-cp37m-win32.whl", hash = "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74"},
-    {file = "Pillow-9.3.0-1-cp37-cp37m-win_amd64.whl", hash = "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa"},
-    {file = "Pillow-9.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2"},
-    {file = "Pillow-9.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3"},
-    {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe"},
-    {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8"},
-    {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c"},
-    {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c"},
-    {file = "Pillow-9.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de"},
-    {file = "Pillow-9.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7"},
-    {file = "Pillow-9.3.0-cp310-cp310-win32.whl", hash = "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91"},
-    {file = "Pillow-9.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b"},
-    {file = "Pillow-9.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20"},
-    {file = "Pillow-9.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4"},
-    {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1"},
-    {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c"},
-    {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193"},
-    {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812"},
-    {file = "Pillow-9.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c"},
-    {file = "Pillow-9.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11"},
-    {file = "Pillow-9.3.0-cp311-cp311-win32.whl", hash = "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c"},
-    {file = "Pillow-9.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef"},
-    {file = "Pillow-9.3.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9"},
-    {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2"},
-    {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f"},
-    {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72"},
-    {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b"},
-    {file = "Pillow-9.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee"},
-    {file = "Pillow-9.3.0-cp37-cp37m-win32.whl", hash = "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29"},
-    {file = "Pillow-9.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4"},
-    {file = "Pillow-9.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4"},
-    {file = "Pillow-9.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f"},
-    {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502"},
-    {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20"},
-    {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040"},
-    {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07"},
-    {file = "Pillow-9.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636"},
-    {file = "Pillow-9.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32"},
-    {file = "Pillow-9.3.0-cp38-cp38-win32.whl", hash = "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0"},
-    {file = "Pillow-9.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc"},
-    {file = "Pillow-9.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad"},
-    {file = "Pillow-9.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535"},
-    {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3"},
-    {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c"},
-    {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b"},
-    {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd"},
-    {file = "Pillow-9.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c"},
-    {file = "Pillow-9.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448"},
-    {file = "Pillow-9.3.0-cp39-cp39-win32.whl", hash = "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48"},
-    {file = "Pillow-9.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2"},
-    {file = "Pillow-9.3.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228"},
-    {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b"},
-    {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02"},
-    {file = "Pillow-9.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e"},
-    {file = "Pillow-9.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb"},
-    {file = "Pillow-9.3.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c"},
-    {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627"},
-    {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699"},
-    {file = "Pillow-9.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65"},
-    {file = "Pillow-9.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8"},
-    {file = "Pillow-9.3.0.tar.gz", hash = "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f"},
-]
-
-[package.extras]
-docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"]
+    {file = "Pillow-10.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891"},
+    {file = "Pillow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614"},
+    {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b"},
+    {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c"},
+    {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1"},
+    {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf"},
+    {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3"},
+    {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992"},
+    {file = "Pillow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de"},
+    {file = "Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485"},
+    {file = "Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f"},
+    {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3"},
+    {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d"},
+    {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd"},
+    {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629"},
+    {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-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"},
+    {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568"},
+    {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223"},
+    {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff"},
+    {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-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"},
+    {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d"},
+    {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530"},
+    {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51"},
+    {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86"},
+    {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7"},
+    {file = "Pillow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0"},
+    {file = "Pillow-10.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa"},
+    {file = "Pillow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90"},
+    {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967"},
+    {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d"},
+    {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3"},
+    {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba"},
+    {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3"},
+    {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017"},
+    {file = "Pillow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6"},
+    {file = "Pillow-10.0.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0"},
+    {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba"},
+    {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3"},
+    {file = "Pillow-10.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334"},
+    {file = "Pillow-10.0.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2"},
+    {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed"},
+    {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684"},
+    {file = "Pillow-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3"},
+    {file = "Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396"},
+]
+
+[package.extras]
+docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"]
 tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
 
+[[package]]
+name = "pip"
+version = "23.2.1"
+description = "The PyPA recommended tool for installing Python packages."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "pip-23.2.1-py3-none-any.whl", hash = "sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be"},
+    {file = "pip-23.2.1.tar.gz", hash = "sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2"},
+]
+
 [[package]]
 name = "platformdirs"
-version = "2.6.0"
+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 = [
-    {file = "platformdirs-2.6.0-py3-none-any.whl", hash = "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca"},
-    {file = "platformdirs-2.6.0.tar.gz", hash = "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e"},
+    {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"},
+    {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"},
 ]
 
 [package.extras]
-docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.4)"]
-test = ["appdirs (==1.4.4)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"]
+docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"]
 
 [[package]]
 name = "pluggy"
-version = "1.0.0"
+version = "1.3.0"
 description = "plugin and hook calling mechanisms for python"
 category = "dev"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
 files = [
-    {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
-    {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
+    {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"},
+    {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"},
 ]
 
 [package.extras]
@@ -1918,19 +2649,19 @@ testing = ["pytest", "pytest-benchmark"]
 
 [[package]]
 name = "pooch"
-version = "1.6.0"
+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.6"
+python-versions = ">=3.7"
 files = [
-    {file = "pooch-1.6.0-py3-none-any.whl", hash = "sha256:3bf0e20027096836b8dbce0152dbb785a269abeb621618eb4bdd275ff1e23c9c"},
-    {file = "pooch-1.6.0.tar.gz", hash = "sha256:57d20ec4b10dd694d2b05bb64bc6b109c6e85a6c1405794ce87ed8b341ab3f44"},
+    {file = "pooch-1.7.0-py3-none-any.whl", hash = "sha256:74258224fc33d58f53113cf955e8d51bf01386b91492927d0d1b6b341a765ad7"},
+    {file = "pooch-1.7.0.tar.gz", hash = "sha256:f174a1041b6447f0eef8860f76d17f60ed2f857dc0efa387a7f08228af05d998"},
 ]
 
 [package.dependencies]
-appdirs = ">=1.3.0"
 packaging = ">=20.0"
+platformdirs = ">=2.5.0"
 requests = ">=2.19.0"
 
 [package.extras]
@@ -1940,14 +2671,14 @@ xxhash = ["xxhash (>=1.4.3)"]
 
 [[package]]
 name = "prometheus-client"
-version = "0.15.0"
+version = "0.17.1"
 description = "Python client for the Prometheus monitoring system."
 category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "prometheus_client-0.15.0-py3-none-any.whl", hash = "sha256:db7c05cbd13a0f79975592d112320f2605a325969b270a94b71dcabc47b931d2"},
-    {file = "prometheus_client-0.15.0.tar.gz", hash = "sha256:be26aa452490cfcf6da953f9436e95a9f2b4d578ca80094b4458930e5f584ab1"},
+    {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"},
+    {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"},
 ]
 
 [package.extras]
@@ -1955,14 +2686,14 @@ twisted = ["twisted"]
 
 [[package]]
 name = "prompt-toolkit"
-version = "3.0.36"
+version = "3.0.39"
 description = "Library for building powerful interactive command lines in Python"
 category = "main"
 optional = false
-python-versions = ">=3.6.2"
+python-versions = ">=3.7.0"
 files = [
-    {file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"},
-    {file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"},
+    {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"},
+    {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"},
 ]
 
 [package.dependencies]
@@ -1970,26 +2701,26 @@ wcwidth = "*"
 
 [[package]]
 name = "psutil"
-version = "5.9.4"
+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 = [
-    {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"},
-    {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"},
-    {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549"},
-    {file = "psutil-5.9.4-cp27-cp27m-win32.whl", hash = "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad"},
-    {file = "psutil-5.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94"},
-    {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24"},
-    {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7"},
-    {file = "psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7"},
-    {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1"},
-    {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08"},
-    {file = "psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff"},
-    {file = "psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4"},
-    {file = "psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e"},
-    {file = "psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62"},
+    {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"},
+    {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"},
+    {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"},
+    {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"},
+    {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"},
+    {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"},
+    {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"},
+    {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"},
+    {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"},
+    {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"},
+    {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"},
+    {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"},
+    {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"},
+    {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"},
 ]
 
 [package.extras]
@@ -2023,15 +2754,15 @@ files = [
 tests = ["pytest"]
 
 [[package]]
-name = "py"
-version = "1.11.0"
-description = "library with cross-python path, ini-parsing, io, code, log facilities"
+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 = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
 files = [
-    {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
-    {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
+    {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"},
+    {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"},
 ]
 
 [[package]]
@@ -2046,21 +2777,235 @@ files = [
     {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"},
 ]
 
+[[package]]
+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 = [
+    {file = "pycryptodomex-3.18.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:160a39a708c36fa0b168ab79386dede588e62aec06eb505add870739329aecc6"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:c2953afebf282a444c51bf4effe751706b4d0d63d7ca2cc51db21f902aa5b84e"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:ba95abd563b0d1b88401658665a260852a8e6c647026ee6a0a65589287681df8"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:192306cf881fe3467dda0e174a4f47bb3a8bb24b90c9cdfbdc248eec5fc0578c"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:f9ab5ef0718f6a8716695dea16d83b671b22c45e9c0c78fd807c32c0192e54b5"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27m-win32.whl", hash = "sha256:50308fcdbf8345e5ec224a5502b4215178bdb5e95456ead8ab1a69ffd94779cb"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27m-win_amd64.whl", hash = "sha256:4d9379c684efea80fdab02a3eb0169372bca7db13f9332cb67483b8dc8b67c37"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5594a125dae30d60e94f37797fc67ce3c744522de7992c7c360d02fdb34918f8"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:8ff129a5a0eb5ff16e45ca4fa70a6051da7f3de303c33b259063c19be0c43d35"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:3d9314ac785a5b75d5aaf924c5f21d6ca7e8df442e5cf4f0fefad4f6e284d422"},
+    {file = "pycryptodomex-3.18.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:f237278836dda412a325e9340ba2e6a84cb0f56b9244781e5b61f10b3905de88"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac614363a86cc53d8ba44b6c469831d1555947e69ab3276ae8d6edc219f570f7"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:302a8f37c224e7b5d72017d462a2be058e28f7be627bdd854066e16722d0fc0c"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:6421d23d6a648e83ba2670a352bcd978542dad86829209f59d17a3f087f4afef"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84e105787f5e5d36ec6a581ff37a1048d12e638688074b2a00bcf402f9aa1c2"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6875eb8666f68ddbd39097867325bd22771f595b4e2b0149739b5623c8bf899b"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:27072a494ce621cc7a9096bbf60ed66826bb94db24b49b7359509e7951033e74"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:1949e09ea49b09c36d11a951b16ff2a05a0ffe969dda1846e4686ee342fe8646"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6ed3606832987018615f68e8ed716a7065c09a0fe94afd7c9ca1b6777f0ac6eb"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-win32.whl", hash = "sha256:d56c9ec41258fd3734db9f5e4d2faeabe48644ba9ca23b18e1839b3bdf093222"},
+    {file = "pycryptodomex-3.18.0-cp35-abi3-win_amd64.whl", hash = "sha256:e00a4bacb83a2627e8210cb353a2e31f04befc1155db2976e5e239dd66482278"},
+    {file = "pycryptodomex-3.18.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:2dc4eab20f4f04a2d00220fdc9258717b82d31913552e766d5f00282c031b70a"},
+    {file = "pycryptodomex-3.18.0-pp27-pypy_73-win32.whl", hash = "sha256:75672205148bdea34669173366df005dbd52be05115e919551ee97171083423d"},
+    {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bec6c80994d4e7a38312072f89458903b65ec99bed2d65aa4de96d997a53ea7a"},
+    {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d35a8ffdc8b05e4b353ba281217c8437f02c57d7233363824e9d794cf753c419"},
+    {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76f0a46bee539dae4b3dfe37216f678769349576b0080fdbe431d19a02da42ff"},
+    {file = "pycryptodomex-3.18.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:71687eed47df7e965f6e0bf3cadef98f368d5221f0fb89d2132effe1a3e6a194"},
+    {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:73d64b32d84cf48d9ec62106aa277dbe99ab5fbfd38c5100bc7bddd3beb569f7"},
+    {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbdcce0a226d9205560a5936b05208c709b01d493ed8307792075dedfaaffa5f"},
+    {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58fc0aceb9c961b9897facec9da24c6a94c5db04597ec832060f53d4d6a07196"},
+    {file = "pycryptodomex-3.18.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:215be2980a6b70704c10796dd7003eb4390e7be138ac6fb8344bf47e71a8d470"},
+    {file = "pycryptodomex-3.18.0.tar.gz", hash = "sha256:3e3ecb5fe979e7c1bb0027e518340acf7ee60415d79295e5251d13c68dde576e"},
+]
+
+[[package]]
+name = "pydantic"
+version = "2.3.0"
+description = "Data validation using Python type hints"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "pydantic-2.3.0-py3-none-any.whl", hash = "sha256:45b5e446c6dfaad9444819a293b921a40e1db1aa61ea08aede0522529ce90e81"},
+    {file = "pydantic-2.3.0.tar.gz", hash = "sha256:1607cc106602284cd4a00882986570472f193fde9cb1259bceeaedb26aa79a6d"},
+]
+
+[package.dependencies]
+annotated-types = ">=0.4.0"
+pydantic-core = "2.6.3"
+typing-extensions = ">=4.6.1"
+
+[package.extras]
+email = ["email-validator (>=2.0.0)"]
+
+[[package]]
+name = "pydantic-core"
+version = "2.6.3"
+description = ""
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "pydantic_core-2.6.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1a0ddaa723c48af27d19f27f1c73bdc615c73686d763388c8683fe34ae777bad"},
+    {file = "pydantic_core-2.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5cfde4fab34dd1e3a3f7f3db38182ab6c95e4ea91cf322242ee0be5c2f7e3d2f"},
+    {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5493a7027bfc6b108e17c3383959485087d5942e87eb62bbac69829eae9bc1f7"},
+    {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84e87c16f582f5c753b7f39a71bd6647255512191be2d2dbf49458c4ef024588"},
+    {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:522a9c4a4d1924facce7270c84b5134c5cabcb01513213662a2e89cf28c1d309"},
+    {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaafc776e5edc72b3cad1ccedb5fd869cc5c9a591f1213aa9eba31a781be9ac1"},
+    {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a750a83b2728299ca12e003d73d1264ad0440f60f4fc9cee54acc489249b728"},
+    {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e8b374ef41ad5c461efb7a140ce4730661aadf85958b5c6a3e9cf4e040ff4bb"},
+    {file = "pydantic_core-2.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b594b64e8568cf09ee5c9501ede37066b9fc41d83d58f55b9952e32141256acd"},
+    {file = "pydantic_core-2.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2a20c533cb80466c1d42a43a4521669ccad7cf2967830ac62c2c2f9cece63e7e"},
+    {file = "pydantic_core-2.6.3-cp310-none-win32.whl", hash = "sha256:04fe5c0a43dec39aedba0ec9579001061d4653a9b53a1366b113aca4a3c05ca7"},
+    {file = "pydantic_core-2.6.3-cp310-none-win_amd64.whl", hash = "sha256:6bf7d610ac8f0065a286002a23bcce241ea8248c71988bda538edcc90e0c39ad"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:6bcc1ad776fffe25ea5c187a028991c031a00ff92d012ca1cc4714087e575973"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:df14f6332834444b4a37685810216cc8fe1fe91f447332cd56294c984ecbff1c"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b7486d85293f7f0bbc39b34e1d8aa26210b450bbd3d245ec3d732864009819"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a892b5b1871b301ce20d40b037ffbe33d1407a39639c2b05356acfef5536d26a"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:883daa467865e5766931e07eb20f3e8152324f0adf52658f4d302242c12e2c32"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4eb77df2964b64ba190eee00b2312a1fd7a862af8918ec70fc2d6308f76ac64"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce8c84051fa292a5dc54018a40e2a1926fd17980a9422c973e3ebea017aa8da"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22134a4453bd59b7d1e895c455fe277af9d9d9fbbcb9dc3f4a97b8693e7e2c9b"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:02e1c385095efbd997311d85c6021d32369675c09bcbfff3b69d84e59dc103f6"},
+    {file = "pydantic_core-2.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d79f1f2f7ebdb9b741296b69049ff44aedd95976bfee38eb4848820628a99b50"},
+    {file = "pydantic_core-2.6.3-cp311-none-win32.whl", hash = "sha256:430ddd965ffd068dd70ef4e4d74f2c489c3a313adc28e829dd7262cc0d2dd1e8"},
+    {file = "pydantic_core-2.6.3-cp311-none-win_amd64.whl", hash = "sha256:84f8bb34fe76c68c9d96b77c60cef093f5e660ef8e43a6cbfcd991017d375950"},
+    {file = "pydantic_core-2.6.3-cp311-none-win_arm64.whl", hash = "sha256:5a2a3c9ef904dcdadb550eedf3291ec3f229431b0084666e2c2aa8ff99a103a2"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8421cf496e746cf8d6b677502ed9a0d1e4e956586cd8b221e1312e0841c002d5"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bb128c30cf1df0ab78166ded1ecf876620fb9aac84d2413e8ea1594b588c735d"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a822f630712817b6ecc09ccc378192ef5ff12e2c9bae97eb5968a6cdf3b862"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:240a015102a0c0cc8114f1cba6444499a8a4d0333e178bc504a5c2196defd456"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f90e5e3afb11268628c89f378f7a1ea3f2fe502a28af4192e30a6cdea1e7d5e"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:340e96c08de1069f3d022a85c2a8c63529fd88709468373b418f4cf2c949fb0e"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1480fa4682e8202b560dcdc9eeec1005f62a15742b813c88cdc01d44e85308e5"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f14546403c2a1d11a130b537dda28f07eb6c1805a43dae4617448074fd49c282"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a87c54e72aa2ef30189dc74427421e074ab4561cf2bf314589f6af5b37f45e6d"},
+    {file = "pydantic_core-2.6.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f93255b3e4d64785554e544c1c76cd32f4a354fa79e2eeca5d16ac2e7fdd57aa"},
+    {file = "pydantic_core-2.6.3-cp312-none-win32.whl", hash = "sha256:f70dc00a91311a1aea124e5f64569ea44c011b58433981313202c46bccbec0e1"},
+    {file = "pydantic_core-2.6.3-cp312-none-win_amd64.whl", hash = "sha256:23470a23614c701b37252618e7851e595060a96a23016f9a084f3f92f5ed5881"},
+    {file = "pydantic_core-2.6.3-cp312-none-win_arm64.whl", hash = "sha256:1ac1750df1b4339b543531ce793b8fd5c16660a95d13aecaab26b44ce11775e9"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:a53e3195f134bde03620d87a7e2b2f2046e0e5a8195e66d0f244d6d5b2f6d31b"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:f2969e8f72c6236c51f91fbb79c33821d12a811e2a94b7aa59c65f8dbdfad34a"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:672174480a85386dd2e681cadd7d951471ad0bb028ed744c895f11f9d51b9ebe"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:002d0ea50e17ed982c2d65b480bd975fc41086a5a2f9c924ef8fc54419d1dea3"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ccc13afee44b9006a73d2046068d4df96dc5b333bf3509d9a06d1b42db6d8bf"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:439a0de139556745ae53f9cc9668c6c2053444af940d3ef3ecad95b079bc9987"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d63b7545d489422d417a0cae6f9898618669608750fc5e62156957e609e728a5"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b44c42edc07a50a081672e25dfe6022554b47f91e793066a7b601ca290f71e42"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1c721bfc575d57305dd922e6a40a8fe3f762905851d694245807a351ad255c58"},
+    {file = "pydantic_core-2.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5e4a2cf8c4543f37f5dc881de6c190de08096c53986381daebb56a355be5dfe6"},
+    {file = "pydantic_core-2.6.3-cp37-none-win32.whl", hash = "sha256:d9b4916b21931b08096efed090327f8fe78e09ae8f5ad44e07f5c72a7eedb51b"},
+    {file = "pydantic_core-2.6.3-cp37-none-win_amd64.whl", hash = "sha256:a8acc9dedd304da161eb071cc7ff1326aa5b66aadec9622b2574ad3ffe225525"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:5e9c068f36b9f396399d43bfb6defd4cc99c36215f6ff33ac8b9c14ba15bdf6b"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e61eae9b31799c32c5f9b7be906be3380e699e74b2db26c227c50a5fc7988698"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85463560c67fc65cd86153a4975d0b720b6d7725cf7ee0b2d291288433fc21b"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9616567800bdc83ce136e5847d41008a1d602213d024207b0ff6cab6753fe645"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e9b65a55bbabda7fccd3500192a79f6e474d8d36e78d1685496aad5f9dbd92c"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f468d520f47807d1eb5d27648393519655eadc578d5dd862d06873cce04c4d1b"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9680dd23055dd874173a3a63a44e7f5a13885a4cfd7e84814be71be24fba83db"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a718d56c4d55efcfc63f680f207c9f19c8376e5a8a67773535e6f7e80e93170"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8ecbac050856eb6c3046dea655b39216597e373aa8e50e134c0e202f9c47efec"},
+    {file = "pydantic_core-2.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:788be9844a6e5c4612b74512a76b2153f1877cd845410d756841f6c3420230eb"},
+    {file = "pydantic_core-2.6.3-cp38-none-win32.whl", hash = "sha256:07a1aec07333bf5adebd8264047d3dc518563d92aca6f2f5b36f505132399efc"},
+    {file = "pydantic_core-2.6.3-cp38-none-win_amd64.whl", hash = "sha256:621afe25cc2b3c4ba05fff53525156d5100eb35c6e5a7cf31d66cc9e1963e378"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:813aab5bfb19c98ae370952b6f7190f1e28e565909bfc219a0909db168783465"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:50555ba3cb58f9861b7a48c493636b996a617db1a72c18da4d7f16d7b1b9952b"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19e20f8baedd7d987bd3f8005c146e6bcbda7cdeefc36fad50c66adb2dd2da48"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0a5d7edb76c1c57b95df719af703e796fc8e796447a1da939f97bfa8a918d60"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f06e21ad0b504658a3a9edd3d8530e8cea5723f6ea5d280e8db8efc625b47e49"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea053cefa008fda40f92aab937fb9f183cf8752e41dbc7bc68917884454c6362"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:171a4718860790f66d6c2eda1d95dd1edf64f864d2e9f9115840840cf5b5713f"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ed7ceca6aba5331ece96c0e328cd52f0dcf942b8895a1ed2642de50800b79d3"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:acafc4368b289a9f291e204d2c4c75908557d4f36bd3ae937914d4529bf62a76"},
+    {file = "pydantic_core-2.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1aa712ba150d5105814e53cb141412217146fedc22621e9acff9236d77d2a5ef"},
+    {file = "pydantic_core-2.6.3-cp39-none-win32.whl", hash = "sha256:44b4f937b992394a2e81a5c5ce716f3dcc1237281e81b80c748b2da6dd5cf29a"},
+    {file = "pydantic_core-2.6.3-cp39-none-win_amd64.whl", hash = "sha256:9b33bf9658cb29ac1a517c11e865112316d09687d767d7a0e4a63d5c640d1b17"},
+    {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d7050899026e708fb185e174c63ebc2c4ee7a0c17b0a96ebc50e1f76a231c057"},
+    {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:99faba727727b2e59129c59542284efebbddade4f0ae6a29c8b8d3e1f437beb7"},
+    {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fa159b902d22b283b680ef52b532b29554ea2a7fc39bf354064751369e9dbd7"},
+    {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:046af9cfb5384f3684eeb3f58a48698ddab8dd870b4b3f67f825353a14441418"},
+    {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:930bfe73e665ebce3f0da2c6d64455098aaa67e1a00323c74dc752627879fc67"},
+    {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:85cc4d105747d2aa3c5cf3e37dac50141bff779545ba59a095f4a96b0a460e70"},
+    {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b25afe9d5c4f60dcbbe2b277a79be114e2e65a16598db8abee2a2dcde24f162b"},
+    {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e49ce7dc9f925e1fb010fc3d555250139df61fa6e5a0a95ce356329602c11ea9"},
+    {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2dd50d6a1aef0426a1d0199190c6c43ec89812b1f409e7fe44cb0fbf6dfa733c"},
+    {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6595b0d8c8711e8e1dc389d52648b923b809f68ac1c6f0baa525c6440aa0daa"},
+    {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ef724a059396751aef71e847178d66ad7fc3fc969a1a40c29f5aac1aa5f8784"},
+    {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3c8945a105f1589ce8a693753b908815e0748f6279959a4530f6742e1994dcb6"},
+    {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c8c6660089a25d45333cb9db56bb9e347241a6d7509838dbbd1931d0e19dbc7f"},
+    {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:692b4ff5c4e828a38716cfa92667661a39886e71136c97b7dac26edef18767f7"},
+    {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f1a5d8f18877474c80b7711d870db0eeef9442691fcdb00adabfc97e183ee0b0"},
+    {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:3796a6152c545339d3b1652183e786df648ecdf7c4f9347e1d30e6750907f5bb"},
+    {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b962700962f6e7a6bd77e5f37320cabac24b4c0f76afeac05e9f93cf0c620014"},
+    {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56ea80269077003eaa59723bac1d8bacd2cd15ae30456f2890811efc1e3d4413"},
+    {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c0ebbebae71ed1e385f7dfd9b74c1cff09fed24a6df43d326dd7f12339ec34"},
+    {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:252851b38bad3bfda47b104ffd077d4f9604a10cb06fe09d020016a25107bf98"},
+    {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6656a0ae383d8cd7cc94e91de4e526407b3726049ce8d7939049cbfa426518c8"},
+    {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d9140ded382a5b04a1c030b593ed9bf3088243a0a8b7fa9f071a5736498c5483"},
+    {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d38bbcef58220f9c81e42c255ef0bf99735d8f11edef69ab0b499da77105158a"},
+    {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c9d469204abcca28926cbc28ce98f28e50e488767b084fb3fbdf21af11d3de26"},
+    {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48c1ed8b02ffea4d5c9c220eda27af02b8149fe58526359b3c07eb391cb353a2"},
+    {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2b1bfed698fa410ab81982f681f5b1996d3d994ae8073286515ac4d165c2e7"},
+    {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf9d42a71a4d7a7c1f14f629e5c30eac451a6fc81827d2beefd57d014c006c4a"},
+    {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4292ca56751aebbe63a84bbfc3b5717abb09b14d4b4442cc43fd7c49a1529efd"},
+    {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7dc2ce039c7290b4ef64334ec7e6ca6494de6eecc81e21cb4f73b9b39991408c"},
+    {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:615a31b1629e12445c0e9fc8339b41aaa6cc60bd53bf802d5fe3d2c0cda2ae8d"},
+    {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1fa1f6312fb84e8c281f32b39affe81984ccd484da6e9d65b3d18c202c666149"},
+    {file = "pydantic_core-2.6.3.tar.gz", hash = "sha256:1508f37ba9e3ddc0189e6ff4e2228bd2d3c3a4641cbe8c07177162f76ed696c7"},
+]
+
+[package.dependencies]
+typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
+
+[[package]]
+name = "pydantic-settings"
+version = "2.0.3"
+description = "Settings management using Pydantic"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+files = [
+    {file = "pydantic_settings-2.0.3-py3-none-any.whl", hash = "sha256:ddd907b066622bd67603b75e2ff791875540dc485b7307c4fffc015719da8625"},
+    {file = "pydantic_settings-2.0.3.tar.gz", hash = "sha256:962dc3672495aad6ae96a4390fac7e593591e144625e5112d359f8f67fb75945"},
+]
+
+[package.dependencies]
+pydantic = ">=2.0.1"
+python-dotenv = ">=0.21.0"
+
 [[package]]
 name = "pygments"
-version = "2.13.0"
+version = "2.16.1"
 description = "Pygments is a syntax highlighting package written in Python."
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 files = [
-    {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"},
-    {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"},
+    {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"},
+    {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"},
 ]
 
 [package.extras]
 plugins = ["importlib-metadata"]
 
+[[package]]
+name = "pyjwkest"
+version = "1.4.2"
+description = "Python implementation of JWT, JWE, JWS and JWK"
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+    {file = "pyjwkest-1.4.2.tar.gz", hash = "sha256:5560fd5ba08655f29ff6ad1df1e15dc05abc9d976fcbcec8d2b5167f49b70222"},
+]
+
+[package.dependencies]
+future = "*"
+pycryptodomex = "*"
+requests = "*"
+six = "*"
+
 [[package]]
 name = "pyparsing"
 version = "3.0.9"
@@ -2076,57 +3021,19 @@ files = [
 [package.extras]
 diagrams = ["jinja2", "railroad-diagrams"]
 
-[[package]]
-name = "pyrsistent"
-version = "0.19.3"
-description = "Persistent/Functional/Immutable data structures"
-category = "main"
-optional = false
-python-versions = ">=3.7"
-files = [
-    {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"},
-    {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"},
-    {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"},
-    {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"},
-    {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"},
-    {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"},
-    {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"},
-    {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"},
-    {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"},
-    {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"},
-    {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"},
-]
-
 [[package]]
 name = "pytest"
-version = "7.2.0"
+version = "7.4.0"
 description = "pytest: simple powerful testing with Python"
 category = "dev"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"},
-    {file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"},
+    {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"},
+    {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"},
 ]
 
 [package.dependencies]
-attrs = ">=19.2.0"
 colorama = {version = "*", markers = "sys_platform == \"win32\""}
 exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
 iniconfig = "*"
@@ -2135,7 +3042,7 @@ pluggy = ">=0.12,<2.0"
 tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""}
 
 [package.extras]
-testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
+testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"]
 
 [[package]]
 name = "python-dateutil"
@@ -2152,218 +3059,293 @@ files = [
 [package.dependencies]
 six = ">=1.5"
 
+[[package]]
+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 = [
+    {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"},
+    {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"},
+]
+
+[package.extras]
+cli = ["click (>=5.0)"]
+
+[[package]]
+name = "python-jose"
+version = "3.3.0"
+description = "JOSE implementation in Python"
+category = "main"
+optional = false
+python-versions = "*"
+files = [
+    {file = "python-jose-3.3.0.tar.gz", hash = "sha256:55779b5e6ad599c6336191246e95eb2293a9ddebd555f796a65f838f07e5d78a"},
+    {file = "python_jose-3.3.0-py2.py3-none-any.whl", hash = "sha256:9b1376b023f8b298536eedd47ae1089bcdb848f1535ab30555cd92002d78923a"},
+]
+
+[package.dependencies]
+ecdsa = "!=0.15"
+pyasn1 = "*"
+rsa = "*"
+
+[package.extras]
+cryptography = ["cryptography (>=3.4.0)"]
+pycrypto = ["pyasn1", "pycrypto (>=2.6.0,<2.7.0)"]
+pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"]
+
 [[package]]
 name = "python-json-logger"
-version = "2.0.4"
+version = "2.0.7"
 description = "A python library adding a json log formatter"
 category = "main"
 optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.6"
+files = [
+    {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"},
+    {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"},
+]
+
+[[package]]
+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 = [
-    {file = "python-json-logger-2.0.4.tar.gz", hash = "sha256:764d762175f99fcc4630bd4853b09632acb60a6224acb27ce08cd70f0b1b81bd"},
-    {file = "python_json_logger-2.0.4-py3-none-any.whl", hash = "sha256:3b03487b14eb9e4f77e4fc2a023358b5394b82fd89cecf5586259baed57d8c6f"},
+    {file = "python_keycloak-3.3.0-py3-none-any.whl", hash = "sha256:57cd0bd0610e07ad11888197d3f753a00611cb9975742e70444b93a566889a51"},
+    {file = "python_keycloak-3.3.0.tar.gz", hash = "sha256:cc868126f535aa4f320dc9eab24e46af381c13bcc88d9b0701b04293ea75cd24"},
 ]
 
+[package.dependencies]
+deprecation = ">=2.1.0"
+python-jose = ">=3.3.0"
+requests = ">=2.20.0"
+requests-toolbelt = ">=1.0.0"
+
+[package.extras]
+docs = ["Sphinx (>=5.3.0,<6.0.0)", "alabaster (>=0.7.12,<0.8.0)", "commonmark (>=0.9.1,<0.10.0)", "m2r2 (>=0.3.2,<0.4.0)", "mock (>=4.0.3,<5.0.0)", "readthedocs-sphinx-ext (>=2.1.9,<3.0.0)", "recommonmark (>=0.7.1,<0.8.0)", "sphinx-autoapi (>=2.0.0,<3.0.0)", "sphinx-rtd-theme (>=1.0.0,<2.0.0)"]
+
 [[package]]
 name = "pytz"
-version = "2022.7"
+version = "2023.3"
 description = "World timezone definitions, modern and historical"
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "pytz-2022.7-py2.py3-none-any.whl", hash = "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd"},
-    {file = "pytz-2022.7.tar.gz", hash = "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a"},
+    {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"},
+    {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"},
 ]
 
 [[package]]
 name = "pywin32"
-version = "305"
+version = "306"
 description = "Python for Window Extensions"
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "pywin32-305-cp310-cp310-win32.whl", hash = "sha256:421f6cd86e84bbb696d54563c48014b12a23ef95a14e0bdba526be756d89f116"},
-    {file = "pywin32-305-cp310-cp310-win_amd64.whl", hash = "sha256:73e819c6bed89f44ff1d690498c0a811948f73777e5f97c494c152b850fad478"},
-    {file = "pywin32-305-cp310-cp310-win_arm64.whl", hash = "sha256:742eb905ce2187133a29365b428e6c3b9001d79accdc30aa8969afba1d8470f4"},
-    {file = "pywin32-305-cp311-cp311-win32.whl", hash = "sha256:19ca459cd2e66c0e2cc9a09d589f71d827f26d47fe4a9d09175f6aa0256b51c2"},
-    {file = "pywin32-305-cp311-cp311-win_amd64.whl", hash = "sha256:326f42ab4cfff56e77e3e595aeaf6c216712bbdd91e464d167c6434b28d65990"},
-    {file = "pywin32-305-cp311-cp311-win_arm64.whl", hash = "sha256:4ecd404b2c6eceaca52f8b2e3e91b2187850a1ad3f8b746d0796a98b4cea04db"},
-    {file = "pywin32-305-cp36-cp36m-win32.whl", hash = "sha256:48d8b1659284f3c17b68587af047d110d8c44837736b8932c034091683e05863"},
-    {file = "pywin32-305-cp36-cp36m-win_amd64.whl", hash = "sha256:13362cc5aa93c2beaf489c9c9017c793722aeb56d3e5166dadd5ef82da021fe1"},
-    {file = "pywin32-305-cp37-cp37m-win32.whl", hash = "sha256:a55db448124d1c1484df22fa8bbcbc45c64da5e6eae74ab095b9ea62e6d00496"},
-    {file = "pywin32-305-cp37-cp37m-win_amd64.whl", hash = "sha256:109f98980bfb27e78f4df8a51a8198e10b0f347257d1e265bb1a32993d0c973d"},
-    {file = "pywin32-305-cp38-cp38-win32.whl", hash = "sha256:9dd98384da775afa009bc04863426cb30596fd78c6f8e4e2e5bbf4edf8029504"},
-    {file = "pywin32-305-cp38-cp38-win_amd64.whl", hash = "sha256:56d7a9c6e1a6835f521788f53b5af7912090674bb84ef5611663ee1595860fc7"},
-    {file = "pywin32-305-cp39-cp39-win32.whl", hash = "sha256:9d968c677ac4d5cbdaa62fd3014ab241718e619d8e36ef8e11fb930515a1e918"},
-    {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"},
+    {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"},
+    {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"},
+    {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"},
+    {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"},
+    {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"},
+    {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"},
+    {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"},
+    {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"},
+    {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"},
+    {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"},
+    {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"},
+    {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"},
+    {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"},
+    {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"},
 ]
 
 [[package]]
 name = "pywinpty"
-version = "2.0.9"
+version = "2.0.11"
 description = "Pseudo terminal support for Windows from Python."
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "pywinpty-2.0.9-cp310-none-win_amd64.whl", hash = "sha256:30a7b371446a694a6ce5ef906d70ac04e569de5308c42a2bdc9c3bc9275ec51f"},
-    {file = "pywinpty-2.0.9-cp311-none-win_amd64.whl", hash = "sha256:d78ef6f4bd7a6c6f94dc1a39ba8fb028540cc39f5cb593e756506db17843125f"},
-    {file = "pywinpty-2.0.9-cp37-none-win_amd64.whl", hash = "sha256:5ed36aa087e35a3a183f833631b3e4c1ae92fe2faabfce0fa91b77ed3f0f1382"},
-    {file = "pywinpty-2.0.9-cp38-none-win_amd64.whl", hash = "sha256:2352f44ee913faaec0a02d3c112595e56b8af7feeb8100efc6dc1a8685044199"},
-    {file = "pywinpty-2.0.9-cp39-none-win_amd64.whl", hash = "sha256:ba75ec55f46c9e17db961d26485b033deb20758b1731e8e208e1e8a387fcf70c"},
-    {file = "pywinpty-2.0.9.tar.gz", hash = "sha256:01b6400dd79212f50a2f01af1c65b781290ff39610853db99bf03962eb9a615f"},
+    {file = "pywinpty-2.0.11-cp310-none-win_amd64.whl", hash = "sha256:452f10ac9ff8ab9151aa8cea9e491a9612a12250b1899278c6a56bc184afb47f"},
+    {file = "pywinpty-2.0.11-cp311-none-win_amd64.whl", hash = "sha256:6701867d42aec1239bc0fedf49a336570eb60eb886e81763db77ea2b6c533cc3"},
+    {file = "pywinpty-2.0.11-cp38-none-win_amd64.whl", hash = "sha256:0ffd287751ad871141dc9724de70ea21f7fc2ff1af50861e0d232cf70739d8c4"},
+    {file = "pywinpty-2.0.11-cp39-none-win_amd64.whl", hash = "sha256:e4e7f023c28ca7aa8e1313e53ba80a4d10171fe27857b7e02f99882dfe3e8638"},
+    {file = "pywinpty-2.0.11.tar.gz", hash = "sha256:e244cffe29a894876e2cd251306efd0d8d64abd5ada0a46150a4a71c0b9ad5c5"},
 ]
 
 [[package]]
 name = "pyyaml"
-version = "6.0"
+version = "6.0.1"
 description = "YAML parser and emitter for Python"
 category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"},
-    {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"},
-    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"},
-    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"},
-    {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"},
-    {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"},
-    {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"},
-    {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"},
-    {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"},
-    {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"},
-    {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"},
-    {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"},
-    {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"},
-    {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"},
-    {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"},
-    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"},
-    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"},
-    {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"},
-    {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"},
-    {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"},
-    {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"},
-    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"},
-    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"},
-    {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"},
-    {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"},
-    {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"},
-    {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"},
-    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"},
-    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"},
-    {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"},
-    {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"},
-    {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"},
-    {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"},
-    {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"},
-    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"},
-    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"},
-    {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"},
-    {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"},
-    {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"},
-    {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"},
+    {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
+    {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
+    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
+    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
+    {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
+    {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
+    {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
+    {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
+    {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
+    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
+    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
+    {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
+    {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
+    {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
+    {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
+    {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
+    {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
+    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
+    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
+    {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
+    {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
+    {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
+    {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
+    {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
+    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
+    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
+    {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
+    {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
+    {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
+    {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
 ]
 
 [[package]]
 name = "pyzmq"
-version = "24.0.1"
+version = "25.1.1"
 description = "Python bindings for 0MQ"
 category = "main"
 optional = false
 python-versions = ">=3.6"
 files = [
-    {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:28b119ba97129d3001673a697b7cce47fe6de1f7255d104c2f01108a5179a066"},
-    {file = "pyzmq-24.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bcbebd369493d68162cddb74a9c1fcebd139dfbb7ddb23d8f8e43e6c87bac3a6"},
-    {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae61446166983c663cee42c852ed63899e43e484abf080089f771df4b9d272ef"},
-    {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f7ac99b15270db8d53f28c3c7b968612993a90a5cf359da354efe96f5372b4"},
-    {file = "pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca7c3956b03b7663fac4d150f5e6d4f6f38b2462c1e9afd83bcf7019f17913"},
-    {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8c78bfe20d4c890cb5580a3b9290f700c570e167d4cdcc55feec07030297a5e3"},
-    {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:48f721f070726cd2a6e44f3c33f8ee4b24188e4b816e6dd8ba542c8c3bb5b246"},
-    {file = "pyzmq-24.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:afe1f3bc486d0ce40abb0a0c9adb39aed3bbac36ebdc596487b0cceba55c21c1"},
-    {file = "pyzmq-24.0.1-cp310-cp310-win32.whl", hash = "sha256:3e6192dbcefaaa52ed81be88525a54a445f4b4fe2fffcae7fe40ebb58bd06bfd"},
-    {file = "pyzmq-24.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:86de64468cad9c6d269f32a6390e210ca5ada568c7a55de8e681ca3b897bb340"},
-    {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:838812c65ed5f7c2bd11f7b098d2e5d01685a3f6d1f82849423b570bae698c00"},
-    {file = "pyzmq-24.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfb992dbcd88d8254471760879d48fb20836d91baa90f181c957122f9592b3dc"},
-    {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7abddb2bd5489d30ffeb4b93a428130886c171b4d355ccd226e83254fcb6b9ef"},
-    {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:94010bd61bc168c103a5b3b0f56ed3b616688192db7cd5b1d626e49f28ff51b3"},
-    {file = "pyzmq-24.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8242543c522d84d033fe79be04cb559b80d7eb98ad81b137ff7e0a9020f00ace"},
-    {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ccb94342d13e3bf3ffa6e62f95b5e3f0bc6bfa94558cb37f4b3d09d6feb536ff"},
-    {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6640f83df0ae4ae1104d4c62b77e9ef39be85ebe53f636388707d532bee2b7b8"},
-    {file = "pyzmq-24.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a180dbd5ea5d47c2d3b716d5c19cc3fb162d1c8db93b21a1295d69585bfddac1"},
-    {file = "pyzmq-24.0.1-cp311-cp311-win32.whl", hash = "sha256:624321120f7e60336be8ec74a172ae7fba5c3ed5bf787cc85f7e9986c9e0ebc2"},
-    {file = "pyzmq-24.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:1724117bae69e091309ffb8255412c4651d3f6355560d9af312d547f6c5bc8b8"},
-    {file = "pyzmq-24.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:15975747462ec49fdc863af906bab87c43b2491403ab37a6d88410635786b0f4"},
-    {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b947e264f0e77d30dcbccbb00f49f900b204b922eb0c3a9f0afd61aaa1cedc3d"},
-    {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ec91f1bad66f3ee8c6deb65fa1fe418e8ad803efedd69c35f3b5502f43bd1dc"},
-    {file = "pyzmq-24.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:db03704b3506455d86ec72c3358a779e9b1d07b61220dfb43702b7b668edcd0d"},
-    {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e7e66b4e403c2836ac74f26c4b65d8ac0ca1eef41dfcac2d013b7482befaad83"},
-    {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:7a23ccc1083c260fa9685c93e3b170baba45aeed4b524deb3f426b0c40c11639"},
-    {file = "pyzmq-24.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fa0ae3275ef706c0309556061185dd0e4c4cd3b7d6f67ae617e4e677c7a41e2e"},
-    {file = "pyzmq-24.0.1-cp36-cp36m-win32.whl", hash = "sha256:f01de4ec083daebf210531e2cca3bdb1608dbbbe00a9723e261d92087a1f6ebc"},
-    {file = "pyzmq-24.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:de4217b9eb8b541cf2b7fde4401ce9d9a411cc0af85d410f9d6f4333f43640be"},
-    {file = "pyzmq-24.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:78068e8678ca023594e4a0ab558905c1033b2d3e806a0ad9e3094e231e115a33"},
-    {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77c2713faf25a953c69cf0f723d1b7dd83827b0834e6c41e3fb3bbc6765914a1"},
-    {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bb4af15f305056e95ca1bd086239b9ebc6ad55e9f49076d27d80027f72752f6"},
-    {file = "pyzmq-24.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0f14cffd32e9c4c73da66db97853a6aeceaac34acdc0fae9e5bbc9370281864c"},
-    {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0108358dab8c6b27ff6b985c2af4b12665c1bc659648284153ee501000f5c107"},
-    {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d66689e840e75221b0b290b0befa86f059fb35e1ee6443bce51516d4d61b6b99"},
-    {file = "pyzmq-24.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae08ac90aa8fa14caafc7a6251bd218bf6dac518b7bff09caaa5e781119ba3f2"},
-    {file = "pyzmq-24.0.1-cp37-cp37m-win32.whl", hash = "sha256:8421aa8c9b45ea608c205db9e1c0c855c7e54d0e9c2c2f337ce024f6843cab3b"},
-    {file = "pyzmq-24.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54d8b9c5e288362ec8595c1d98666d36f2070fd0c2f76e2b3c60fbad9bd76227"},
-    {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:acbd0a6d61cc954b9f535daaa9ec26b0a60a0d4353c5f7c1438ebc88a359a47e"},
-    {file = "pyzmq-24.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:47b11a729d61a47df56346283a4a800fa379ae6a85870d5a2e1e4956c828eedc"},
-    {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abe6eb10122f0d746a0d510c2039ae8edb27bc9af29f6d1b05a66cc2401353ff"},
-    {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:07bec1a1b22dacf718f2c0e71b49600bb6a31a88f06527dfd0b5aababe3fa3f7"},
-    {file = "pyzmq-24.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0d945a85b70da97ae86113faf9f1b9294efe66bd4a5d6f82f2676d567338b66"},
-    {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1b7928bb7580736ffac5baf814097be342ba08d3cfdfb48e52773ec959572287"},
-    {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b946da90dc2799bcafa682692c1d2139b2a96ec3c24fa9fc6f5b0da782675330"},
-    {file = "pyzmq-24.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c8840f064b1fb377cffd3efeaad2b190c14d4c8da02316dae07571252d20b31f"},
-    {file = "pyzmq-24.0.1-cp38-cp38-win32.whl", hash = "sha256:4854f9edc5208f63f0841c0c667260ae8d6846cfa233c479e29fdc85d42ebd58"},
-    {file = "pyzmq-24.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:42d4f97b9795a7aafa152a36fe2ad44549b83a743fd3e77011136def512e6c2a"},
-    {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:52afb0ac962963fff30cf1be775bc51ae083ef4c1e354266ab20e5382057dd62"},
-    {file = "pyzmq-24.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bad8210ad4df68c44ff3685cca3cda448ee46e20d13edcff8909eba6ec01ca4"},
-    {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dabf1a05318d95b1537fd61d9330ef4313ea1216eea128a17615038859da3b3b"},
-    {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5bd3d7dfd9cd058eb68d9a905dec854f86649f64d4ddf21f3ec289341386c44b"},
-    {file = "pyzmq-24.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8012bce6836d3f20a6c9599f81dfa945f433dab4dbd0c4917a6fb1f998ab33d"},
-    {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c31805d2c8ade9b11feca4674eee2b9cce1fec3e8ddb7bbdd961a09dc76a80ea"},
-    {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:3104f4b084ad5d9c0cb87445cc8cfd96bba710bef4a66c2674910127044df209"},
-    {file = "pyzmq-24.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:df0841f94928f8af9c7a1f0aaaffba1fb74607af023a152f59379c01c53aee58"},
-    {file = "pyzmq-24.0.1-cp39-cp39-win32.whl", hash = "sha256:a435ef8a3bd95c8a2d316d6e0ff70d0db524f6037411652803e118871d703333"},
-    {file = "pyzmq-24.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:2032d9cb994ce3b4cba2b8dfae08c7e25bc14ba484c770d4d3be33c27de8c45b"},
-    {file = "pyzmq-24.0.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bb5635c851eef3a7a54becde6da99485eecf7d068bd885ac8e6d173c4ecd68b0"},
-    {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:83ea1a398f192957cb986d9206ce229efe0ee75e3c6635baff53ddf39bd718d5"},
-    {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:941fab0073f0a54dc33d1a0460cb04e0d85893cb0c5e1476c785000f8b359409"},
-    {file = "pyzmq-24.0.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8f482c44ccb5884bf3f638f29bea0f8dc68c97e38b2061769c4cb697f6140d"},
-    {file = "pyzmq-24.0.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:613010b5d17906c4367609e6f52e9a2595e35d5cc27d36ff3f1b6fa6e954d944"},
-    {file = "pyzmq-24.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:65c94410b5a8355cfcf12fd600a313efee46ce96a09e911ea92cf2acf6708804"},
-    {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:20e7eeb1166087db636c06cae04a1ef59298627f56fb17da10528ab52a14c87f"},
-    {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2712aee7b3834ace51738c15d9ee152cc5a98dc7d57dd93300461b792ab7b43"},
-    {file = "pyzmq-24.0.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a7c280185c4da99e0cc06c63bdf91f5b0b71deb70d8717f0ab870a43e376db8"},
-    {file = "pyzmq-24.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:858375573c9225cc8e5b49bfac846a77b696b8d5e815711b8d4ba3141e6e8879"},
-    {file = "pyzmq-24.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:80093b595921eed1a2cead546a683b9e2ae7f4a4592bb2ab22f70d30174f003a"},
-    {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f3f3154fde2b1ff3aa7b4f9326347ebc89c8ef425ca1db8f665175e6d3bd42f"},
-    {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abb756147314430bee5d10919b8493c0ccb109ddb7f5dfd2fcd7441266a25b75"},
-    {file = "pyzmq-24.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44e706bac34e9f50779cb8c39f10b53a4d15aebb97235643d3112ac20bd577b4"},
-    {file = "pyzmq-24.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:687700f8371643916a1d2c61f3fdaa630407dd205c38afff936545d7b7466066"},
-    {file = "pyzmq-24.0.1.tar.gz", hash = "sha256:216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77"},
+    {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"},
+    {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"},
+    {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"},
+    {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"},
+    {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"},
+    {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"},
+    {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"},
+    {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"},
+    {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"},
+    {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"},
+    {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"},
+    {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"},
+    {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"},
+    {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"},
+    {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"},
+    {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"},
+    {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"},
+    {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"},
+    {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"},
+    {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"},
+    {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"},
+    {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"},
+    {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"},
+    {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"},
+    {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"},
+    {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"},
+    {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"},
+    {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"},
+    {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"},
+    {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"},
+    {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"},
+    {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"},
+    {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"},
+    {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"},
+    {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"},
+    {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"},
+    {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"},
+    {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"},
+    {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"},
+    {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"},
+    {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"},
+    {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"},
+    {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"},
+    {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"},
+    {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"},
+    {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"},
+    {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"},
+    {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"},
+    {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"},
+    {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"},
+    {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"},
+    {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"},
+    {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"},
+    {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"},
+    {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"},
+    {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"},
+    {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"},
+    {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"},
+    {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"},
+    {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"},
+    {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"},
+    {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"},
+    {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"},
+    {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"},
+    {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"},
+    {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"},
+    {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"},
+    {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"},
+    {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"},
+    {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"},
+    {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"},
+    {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"},
+    {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"},
+    {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"},
+    {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"},
+    {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"},
+    {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"},
+    {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"},
+    {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"},
+    {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"},
+    {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"},
+    {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"},
+    {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"},
+    {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"},
+    {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"},
+    {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"},
+    {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"},
+    {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"},
+    {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"},
+    {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"},
+    {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"},
+    {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"},
+    {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"},
 ]
 
 [package.dependencies]
 cffi = {version = "*", markers = "implementation_name == \"pypy\""}
-py = {version = "*", markers = "implementation_name == \"pypy\""}
 
 [[package]]
 name = "qtconsole"
-version = "5.4.0"
+version = "5.4.3"
 description = "Jupyter Qt console"
 category = "main"
 optional = false
 python-versions = ">= 3.7"
 files = [
-    {file = "qtconsole-5.4.0-py3-none-any.whl", hash = "sha256:be13560c19bdb3b54ed9741a915aa701a68d424519e8341ac479a91209e694b2"},
-    {file = "qtconsole-5.4.0.tar.gz", hash = "sha256:57748ea2fd26320a0b77adba20131cfbb13818c7c96d83fafcb110ff55f58b35"},
+    {file = "qtconsole-5.4.3-py3-none-any.whl", hash = "sha256:35fd6e87b1f6d1fd41801b07e69339f8982e76afd4fa8ef35595bc6036717189"},
+    {file = "qtconsole-5.4.3.tar.gz", hash = "sha256:5e4082a86a201796b2a5cfd4298352d22b158b51b57736531824715fc2a979dd"},
 ]
 
 [package.dependencies]
@@ -2371,6 +3353,7 @@ ipykernel = ">=4.1"
 ipython-genutils = "*"
 jupyter-client = ">=4.1"
 jupyter-core = "*"
+packaging = "*"
 pygments = "*"
 pyzmq = ">=17.1"
 qtpy = ">=2.0.1"
@@ -2382,14 +3365,14 @@ test = ["flaky", "pytest", "pytest-qt"]
 
 [[package]]
 name = "qtpy"
-version = "2.3.0"
+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 = [
-    {file = "QtPy-2.3.0-py3-none-any.whl", hash = "sha256:8d6d544fc20facd27360ea189592e6135c614785f0dec0b4f083289de6beb408"},
-    {file = "QtPy-2.3.0.tar.gz", hash = "sha256:0603c9c83ccc035a4717a12908bf6bc6cb22509827ea2ec0e94c2da7c9ed57c5"},
+    {file = "QtPy-2.4.0-py3-none-any.whl", hash = "sha256:4d4f045a41e09ac9fa57fcb47ef05781aa5af294a0a646acc1b729d14225e741"},
+    {file = "QtPy-2.4.0.tar.gz", hash = "sha256:db2d508167aa6106781565c8da5c6f1487debacba33519cedc35fa8997d424d4"},
 ]
 
 [package.dependencies]
@@ -2398,28 +3381,59 @@ packaging = "*"
 [package.extras]
 test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"]
 
+[[package]]
+name = "referencing"
+version = "0.30.2"
+description = "JSON Referencing + Python"
+category = "main"
+optional = false
+python-versions = ">=3.8"
+files = [
+    {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"},
+    {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"},
+]
+
+[package.dependencies]
+attrs = ">=22.2.0"
+rpds-py = ">=0.7.0"
+
 [[package]]
 name = "requests"
-version = "2.28.1"
+version = "2.31.0"
 description = "Python HTTP for Humans."
 category = "main"
 optional = false
-python-versions = ">=3.7, <4"
+python-versions = ">=3.7"
 files = [
-    {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"},
-    {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"},
+    {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
+    {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
 ]
 
 [package.dependencies]
 certifi = ">=2017.4.17"
-charset-normalizer = ">=2,<3"
+charset-normalizer = ">=2,<4"
 idna = ">=2.5,<4"
-urllib3 = ">=1.21.1,<1.27"
+urllib3 = ">=1.21.1,<3"
 
 [package.extras]
 socks = ["PySocks (>=1.5.6,!=1.5.7)"]
 use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
 
+[[package]]
+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 = [
+    {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"},
+    {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"},
+]
+
+[package.dependencies]
+requests = ">=2.0.1,<3.0.0"
+
 [[package]]
 name = "resampy"
 version = "0.4.2"
@@ -2468,98 +3482,224 @@ files = [
     {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"},
 ]
 
+[[package]]
+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 = [
+    {file = "rpds_py-0.10.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c1e0e9916301e3b3d970814b1439ca59487f0616d30f36a44cead66ee1748c31"},
+    {file = "rpds_py-0.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ce8caa29ebbdcde67e5fd652c811d34bc01f249dbc0d61e5cc4db05ae79a83b"},
+    {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad277f74b1c164f7248afa968700e410651eb858d7c160d109fb451dc45a2f09"},
+    {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e1c68303ccf7fceb50fbab79064a2636119fd9aca121f28453709283dbca727"},
+    {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:780fcb855be29153901c67fc9c5633d48aebef21b90aa72812fa181d731c6b00"},
+    {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbd7b24d108509a1b9b6679fcc1166a7dd031dbef1f3c2c73788f42e3ebb3beb"},
+    {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0700c2133ba203c4068aaecd6a59bda22e06a5e46255c9da23cbf68c6942215d"},
+    {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:576da63eae7809f375932bfcbca2cf20620a1915bf2fedce4b9cc8491eceefe3"},
+    {file = "rpds_py-0.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23750a9b8a329844ba1fe267ca456bb3184984da2880ed17ae641c5af8de3fef"},
+    {file = "rpds_py-0.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d08395595c42bcd82c3608762ce734504c6d025eef1c06f42326a6023a584186"},
+    {file = "rpds_py-0.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1d7b7b71bcb82d8713c7c2e9c5f061415598af5938666beded20d81fa23e7640"},
+    {file = "rpds_py-0.10.0-cp310-none-win32.whl", hash = "sha256:97f5811df21703446b42303475b8b855ee07d6ab6cdf8565eff115540624f25d"},
+    {file = "rpds_py-0.10.0-cp310-none-win_amd64.whl", hash = "sha256:cdbed8f21204398f47de39b0a9b180d7e571f02dfb18bf5f1b618e238454b685"},
+    {file = "rpds_py-0.10.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:7a3a3d3e4f1e3cd2a67b93a0b6ed0f2499e33f47cc568e3a0023e405abdc0ff1"},
+    {file = "rpds_py-0.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fc72ae476732cdb7b2c1acb5af23b478b8a0d4b6fcf19b90dd150291e0d5b26b"},
+    {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0583f69522732bdd79dca4cd3873e63a29acf4a299769c7541f2ca1e4dd4bc6"},
+    {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8b9a7cd381970e64849070aca7c32d53ab7d96c66db6c2ef7aa23c6e803f514"},
+    {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d292cabd7c8335bdd3237ded442480a249dbcdb4ddfac5218799364a01a0f5c"},
+    {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6903cdca64f1e301af9be424798328c1fe3b4b14aede35f04510989fc72f012"},
+    {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bed57543c99249ab3a4586ddc8786529fbc33309e5e8a1351802a06ca2baf4c2"},
+    {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15932ec5f224b0e35764dc156514533a4fca52dcfda0dfbe462a1a22b37efd59"},
+    {file = "rpds_py-0.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb2d59bc196e6d3b1827c7db06c1a898bfa0787c0574af398e65ccf2e97c0fbe"},
+    {file = "rpds_py-0.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f99d74ddf9d3b6126b509e81865f89bd1283e3fc1b568b68cd7bd9dfa15583d7"},
+    {file = "rpds_py-0.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f70bec8a14a692be6dbe7ce8aab303e88df891cbd4a39af091f90b6702e28055"},
+    {file = "rpds_py-0.10.0-cp311-none-win32.whl", hash = "sha256:5f7487be65b9c2c510819e744e375bd41b929a97e5915c4852a82fbb085df62c"},
+    {file = "rpds_py-0.10.0-cp311-none-win_amd64.whl", hash = "sha256:748e472345c3a82cfb462d0dff998a7bf43e621eed73374cb19f307e97e08a83"},
+    {file = "rpds_py-0.10.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:d4639111e73997567343df6551da9dd90d66aece1b9fc26c786d328439488103"},
+    {file = "rpds_py-0.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f4760e1b02173f4155203054f77a5dc0b4078de7645c922b208d28e7eb99f3e2"},
+    {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a6420a36975e0073acaeee44ead260c1f6ea56812cfc6c31ec00c1c48197173"},
+    {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58fc4d66ee349a23dbf08c7e964120dc9027059566e29cf0ce6205d590ed7eca"},
+    {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:063411228b852fb2ed7485cf91f8e7d30893e69b0acb207ec349db04cccc8225"},
+    {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65af12f70355de29e1092f319f85a3467f4005e959ab65129cb697169ce94b86"},
+    {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:298e8b5d8087e0330aac211c85428c8761230ef46a1f2c516d6a2f67fb8803c5"},
+    {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5b9bf77008f2c55dabbd099fd3ac87009471d223a1c7ebea36873d39511b780a"},
+    {file = "rpds_py-0.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c7853f27195598e550fe089f78f0732c66ee1d1f0eaae8ad081589a5a2f5d4af"},
+    {file = "rpds_py-0.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:75dbfd41a61bc1fb0536bf7b1abf272dc115c53d4d77db770cd65d46d4520882"},
+    {file = "rpds_py-0.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b25136212a3d064a8f0b9ebbb6c57094c5229e0de76d15c79b76feff26aeb7b8"},
+    {file = "rpds_py-0.10.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:9affee8cb1ec453382c27eb9043378ab32f49cd4bc24a24275f5c39bf186c279"},
+    {file = "rpds_py-0.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4d55528ef13af4b4e074d067977b1f61408602f53ae4537dccf42ba665c2c7bd"},
+    {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7865df1fb564092bcf46dac61b5def25342faf6352e4bc0e61a286e3fa26a3d"},
+    {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3f5cc8c7bc99d2bbcd704cef165ca7d155cd6464c86cbda8339026a42d219397"},
+    {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbae50d352e4717ffc22c566afc2d0da744380e87ed44a144508e3fb9114a3f4"},
+    {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fccbf0cd3411719e4c9426755df90bf3449d9fc5a89f077f4a7f1abd4f70c910"},
+    {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d10c431073dc6ebceed35ab22948a016cc2b5120963c13a41e38bdde4a7212"},
+    {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1b401e8b9aece651512e62c431181e6e83048a651698a727ea0eb0699e9f9b74"},
+    {file = "rpds_py-0.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:7618a082c55cf038eede4a918c1001cc8a4411dfe508dc762659bcd48d8f4c6e"},
+    {file = "rpds_py-0.10.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b3226b246facae14909b465061ddcfa2dfeadb6a64f407f24300d42d69bcb1a1"},
+    {file = "rpds_py-0.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a8edd467551c1102dc0f5754ab55cd0703431cd3044edf8c8e7d9208d63fa453"},
+    {file = "rpds_py-0.10.0-cp38-none-win32.whl", hash = "sha256:71333c22f7cf5f0480b59a0aef21f652cf9bbaa9679ad261b405b65a57511d1e"},
+    {file = "rpds_py-0.10.0-cp38-none-win_amd64.whl", hash = "sha256:a8ab1adf04ae2d6d65835995218fd3f3eb644fe20655ca8ee233e2c7270ff53b"},
+    {file = "rpds_py-0.10.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:87c93b25d538c433fb053da6228c6290117ba53ff6a537c133b0f2087948a582"},
+    {file = "rpds_py-0.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7996aed3f65667c6dcc8302a69368435a87c2364079a066750a2eac75ea01e"},
+    {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8856aa76839dc234d3469f1e270918ce6bec1d6a601eba928f45d68a15f04fc3"},
+    {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00215f6a9058fbf84f9d47536902558eb61f180a6b2a0fa35338d06ceb9a2e5a"},
+    {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23a059143c1393015c68936370cce11690f7294731904bdae47cc3e16d0b2474"},
+    {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e5c26905aa651cc8c0ddc45e0e5dea2a1296f70bdc96af17aee9d0493280a17"},
+    {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c651847545422c8131660704c58606d841e228ed576c8f1666d98b3d318f89da"},
+    {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:80992eb20755701753e30a6952a96aa58f353d12a65ad3c9d48a8da5ec4690cf"},
+    {file = "rpds_py-0.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ffcf18ad3edf1c170e27e88b10282a2c449aa0358659592462448d71b2000cfc"},
+    {file = "rpds_py-0.10.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:08e08ccf5b10badb7d0a5c84829b914c6e1e1f3a716fdb2bf294e2bd01562775"},
+    {file = "rpds_py-0.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7150b83b3e3ddaac81a8bb6a9b5f93117674a0e7a2b5a5b32ab31fdfea6df27f"},
+    {file = "rpds_py-0.10.0-cp39-none-win32.whl", hash = "sha256:3455ecc46ea443b5f7d9c2f946ce4017745e017b0d0f8b99c92564eff97e97f5"},
+    {file = "rpds_py-0.10.0-cp39-none-win_amd64.whl", hash = "sha256:afe6b5a04b2ab1aa89bad32ca47bf71358e7302a06fdfdad857389dca8fb5f04"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:b1cb078f54af0abd835ca76f93a3152565b73be0f056264da45117d0adf5e99c"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8e7e2b3577e97fa43c2c2b12a16139b2cedbd0770235d5179c0412b4794efd9b"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae46a50d235f1631d9ec4670503f7b30405103034830bc13df29fd947207f795"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f869e34d2326e417baee430ae998e91412cc8e7fdd83d979277a90a0e79a5b47"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d544a614055b131111bed6edfa1cb0fb082a7265761bcb03321f2dd7b5c6c48"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ee9c2f6ca9774c2c24bbf7b23086264e6b5fa178201450535ec0859739e6f78d"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2da4a8c6d465fde36cea7d54bf47b5cf089073452f0e47c8632ecb9dec23c07"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac00c41dd315d147b129976204839ca9de699d83519ff1272afbe4fb9d362d12"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0155c33af0676fc38e1107679be882077680ad1abb6303956b97259c3177e85e"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:db6585b600b2e76e98131e0ac0e5195759082b51687ad0c94505970c90718f4a"},
+    {file = "rpds_py-0.10.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:7b6975d3763d0952c111700c0634968419268e6bbc0b55fe71138987fa66f309"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:6388e4e95a26717b94a05ced084e19da4d92aca883f392dffcf8e48c8e221a24"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:18f87baa20e02e9277ad8960cd89b63c79c05caf106f4c959a9595c43f2a34a5"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f05fc7d832e970047662b3440b190d24ea04f8d3c760e33e7163b67308c878"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:291c9ce3929a75b45ce8ddde2aa7694fc8449f2bc8f5bd93adf021efaae2d10b"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:861d25ae0985a1dd5297fee35f476b60c6029e2e6e19847d5b4d0a43a390b696"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:668d2b45d62c68c7a370ac3dce108ffda482b0a0f50abd8b4c604a813a59e08f"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:344b89384c250ba6a4ce1786e04d01500e4dac0f4137ceebcaad12973c0ac0b3"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:885e023e73ce09b11b89ab91fc60f35d80878d2c19d6213a32b42ff36543c291"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:841128a22e6ac04070a0f84776d07e9c38c4dcce8e28792a95e45fc621605517"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:899b5e7e2d5a8bc92aa533c2d4e55e5ebba095c485568a5e4bedbc163421259a"},
+    {file = "rpds_py-0.10.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e7947d9a6264c727a556541b1630296bbd5d0a05068d21c38dde8e7a1c703ef0"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4992266817169997854f81df7f6db7bdcda1609972d8ffd6919252f09ec3c0f6"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:26d9fd624649a10e4610fab2bc820e215a184d193e47d0be7fe53c1c8f67f370"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0028eb0967942d0d2891eae700ae1a27b7fd18604cfcb16a1ef486a790fee99e"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9e7e493ded7042712a374471203dd43ae3fff5b81e3de1a0513fa241af9fd41"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d68a8e8a3a816629283faf82358d8c93fe5bd974dd2704152394a3de4cec22a"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6d5f061f6a2aa55790b9e64a23dfd87b6664ab56e24cd06c78eb43986cb260b"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c7c4266c1b61eb429e8aeb7d8ed6a3bfe6c890a1788b18dbec090c35c6b93fa"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:80772e3bda6787510d9620bc0c7572be404a922f8ccdfd436bf6c3778119464c"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b98e75b21fc2ba5285aef8efaf34131d16af1c38df36bdca2f50634bea2d3060"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:d63787f289944cc4bde518ad2b5e70a4f0d6e2ce76324635359c74c113fd188f"},
+    {file = "rpds_py-0.10.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:872f3dcaa8bf2245944861d7311179d2c0c9b2aaa7d3b464d99a7c2e401f01fa"},
+    {file = "rpds_py-0.10.0.tar.gz", hash = "sha256:e36d7369363d2707d5f68950a64c4e025991eb0177db01ccb6aa6facae48b69f"},
+]
+
+[[package]]
+name = "rsa"
+version = "4.9"
+description = "Pure-Python RSA implementation"
+category = "main"
+optional = false
+python-versions = ">=3.6,<4"
+files = [
+    {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"},
+    {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"},
+]
+
+[package.dependencies]
+pyasn1 = ">=0.1.3"
+
 [[package]]
 name = "scikit-learn"
-version = "1.2.0"
+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 = [
-    {file = "scikit-learn-1.2.0.tar.gz", hash = "sha256:680b65b3caee469541385d2ca5b03ff70408f6c618c583948312f0d2125df680"},
-    {file = "scikit_learn-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1beaa631434d1f17a20b1eef5d842e58c195875d2bc11901a1a70b5fe544745b"},
-    {file = "scikit_learn-1.2.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d395730f26d8fc752321f1953ddf72647c892d8bed74fad4d7c816ec9b602dfa"},
-    {file = "scikit_learn-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd3480c982b9e616b9f76ad8587804d3f4e91b4e2a6752e7dafb8a2e1f541098"},
-    {file = "scikit_learn-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:184a42842a4e698ffa4d849b6019de50a77a0aa24d26afa28fa49c9190bb144b"},
-    {file = "scikit_learn-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:867023a044fdfe59e5014a7fec7a3086a8928f10b5dce9382eedf4135f6709a2"},
-    {file = "scikit_learn-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5546a8894a0616e92489ef995b39a0715829f3df96e801bb55cbf196be0d9649"},
-    {file = "scikit_learn-1.2.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:bc7073e025b62c1067cbfb76e69d08650c6b9d7a0e7afdfa20cb92d4afe516f6"},
-    {file = "scikit_learn-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc0a72237f0c56780cf550df87201a702d3bdcbbb23c6ef7d54c19326fa23f19"},
-    {file = "scikit_learn-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e1ea0bc1706da45589bcf2490cde6276490a1b88f9af208dbb396fdc3a0babf"},
-    {file = "scikit_learn-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:f17420a8e3f40129aeb7e0f5ee35822d6178617007bb8f69521a2cefc20d5f00"},
-    {file = "scikit_learn-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25ba705ee1600ffc5df1dccd8fae129d7c6836e44ffcbb52d78536c9eaf8fcf9"},
-    {file = "scikit_learn-1.2.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:6b63ca2b0643d30fbf9d25d93017ed3fb8351f31175d82d104bfec60cba7bb87"},
-    {file = "scikit_learn-1.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c772fa8c64776ad769fd764752c8452844307adcf10dee3adcc43988260f21"},
-    {file = "scikit_learn-1.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0834e4cec2a2e0d8978f39cb8fe1cad3be6c27a47927e1774bf5737ea65ec228"},
-    {file = "scikit_learn-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:da29d2e379c396a63af5ed4b671ad2005cd690ac373a23bee5a0f66504e05272"},
-    {file = "scikit_learn-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:23a88883ca60c571a06278e4726b3b51b3709cfa4c93cacbf5568b22ba960899"},
-    {file = "scikit_learn-1.2.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:40f3ff68c505cb9d1f3693397c73991875d609da905087e00e7b4477645ec67b"},
-    {file = "scikit_learn-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9535e867281ae6987bb80620ba14cf1649e936bfe45f48727b978b7a2dbe835"},
-    {file = "scikit_learn-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de897720173b26842e21bed54362f5294e282422116b61cd931d4f5d870b9855"},
-    {file = "scikit_learn-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:ceb0008f345188aa236e49c973dc160b9ed504a3abd7b321a0ecabcb669be0bd"},
+    {file = "scikit-learn-1.3.0.tar.gz", hash = "sha256:8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a"},
+    {file = "scikit_learn-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:981287869e576d42c682cf7ca96af0c6ac544ed9316328fd0d9292795c742cf5"},
+    {file = "scikit_learn-1.3.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:436aaaae2c916ad16631142488e4c82f4296af2404f480e031d866863425d2a2"},
+    {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7e28d8fa47a0b30ae1bd7a079519dd852764e31708a7804da6cb6f8b36e3630"},
+    {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80c08834a473d08a204d966982a62e11c976228d306a2648c575e3ead12111"},
+    {file = "scikit_learn-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:552fd1b6ee22900cf1780d7386a554bb96949e9a359999177cf30211e6b20df6"},
+    {file = "scikit_learn-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79970a6d759eb00a62266a31e2637d07d2d28446fca8079cf9afa7c07b0427f8"},
+    {file = "scikit_learn-1.3.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:850a00b559e636b23901aabbe79b73dc604b4e4248ba9e2d6e72f95063765603"},
+    {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee04835fb016e8062ee9fe9074aef9b82e430504e420bff51e3e5fffe72750ca"},
+    {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d953531f5d9f00c90c34fa3b7d7cfb43ecff4c605dac9e4255a20b114a27369"},
+    {file = "scikit_learn-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:151ac2bf65ccf363664a689b8beafc9e6aae36263db114b4ca06fbbbf827444a"},
+    {file = "scikit_learn-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a885a9edc9c0a341cab27ec4f8a6c58b35f3d449c9d2503a6fd23e06bbd4f6a"},
+    {file = "scikit_learn-1.3.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9877af9c6d1b15486e18a94101b742e9d0d2f343d35a634e337411ddb57783f3"},
+    {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c470f53cea065ff3d588050955c492793bb50c19a92923490d18fcb637f6383a"},
+    {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6e2d7389542eae01077a1ee0318c4fec20c66c957f45c7aac0c6eb0fe3c612"},
+    {file = "scikit_learn-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:3a11936adbc379a6061ea32fa03338d4ca7248d86dd507c81e13af428a5bc1db"},
+    {file = "scikit_learn-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:998d38fcec96584deee1e79cd127469b3ad6fefd1ea6c2dfc54e8db367eb396b"},
+    {file = "scikit_learn-1.3.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ded35e810438a527e17623ac6deae3b360134345b7c598175ab7741720d7ffa7"},
+    {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8102d5036e28d08ab47166b48c8d5e5810704daecf3a476a4282d562be9a28"},
+    {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7617164951c422747e7c32be4afa15d75ad8044f42e7d70d3e2e0429a50e6718"},
+    {file = "scikit_learn-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:1d54fb9e6038284548072df22fd34777e434153f7ffac72c8596f2d6987110dd"},
 ]
 
 [package.dependencies]
 joblib = ">=1.1.1"
 numpy = ">=1.17.3"
-scipy = ">=1.3.2"
+scipy = ">=1.5.0"
 threadpoolctl = ">=2.0.0"
 
 [package.extras]
 benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"]
-docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=4.0.1)", "sphinx-gallery (>=0.7.0)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"]
-examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.10.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"]
-tests = ["black (>=22.3.0)", "flake8 (>=3.8.2)", "matplotlib (>=3.1.3)", "mypy (>=0.961)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=5.3.1)", "pytest-cov (>=2.9.0)", "scikit-image (>=0.16.2)"]
+docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"]
+examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"]
+tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"]
 
 [[package]]
 name = "scipy"
-version = "1.9.3"
+version = "1.11.2"
 description = "Fundamental algorithms for scientific computing in Python"
 category = "main"
 optional = false
-python-versions = ">=3.8"
-files = [
-    {file = "scipy-1.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1884b66a54887e21addf9c16fb588720a8309a57b2e258ae1c7986d4444d3bc0"},
-    {file = "scipy-1.9.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:83b89e9586c62e787f5012e8475fbb12185bafb996a03257e9675cd73d3736dd"},
-    {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a72d885fa44247f92743fc20732ae55564ff2a519e8302fb7e18717c5355a8b"},
-    {file = "scipy-1.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d01e1dd7b15bd2449c8bfc6b7cc67d630700ed655654f0dfcf121600bad205c9"},
-    {file = "scipy-1.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:68239b6aa6f9c593da8be1509a05cb7f9efe98b80f43a5861cd24c7557e98523"},
-    {file = "scipy-1.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b41bc822679ad1c9a5f023bc93f6d0543129ca0f37c1ce294dd9d386f0a21096"},
-    {file = "scipy-1.9.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:90453d2b93ea82a9f434e4e1cba043e779ff67b92f7a0e85d05d286a3625df3c"},
-    {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83c06e62a390a9167da60bedd4575a14c1f58ca9dfde59830fc42e5197283dab"},
-    {file = "scipy-1.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abaf921531b5aeaafced90157db505e10345e45038c39e5d9b6c7922d68085cb"},
-    {file = "scipy-1.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:06d2e1b4c491dc7d8eacea139a1b0b295f74e1a1a0f704c375028f8320d16e31"},
-    {file = "scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a04cd7d0d3eff6ea4719371cbc44df31411862b9646db617c99718ff68d4840"},
-    {file = "scipy-1.9.3-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:545c83ffb518094d8c9d83cce216c0c32f8c04aaf28b92cc8283eda0685162d5"},
-    {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d54222d7a3ba6022fdf5773931b5d7c56efe41ede7f7128c7b1637700409108"},
-    {file = "scipy-1.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff3a5295234037e39500d35316a4c5794739433528310e117b8a9a0c76d20fc"},
-    {file = "scipy-1.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:2318bef588acc7a574f5bfdff9c172d0b1bf2c8143d9582e05f878e580a3781e"},
-    {file = "scipy-1.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d644a64e174c16cb4b2e41dfea6af722053e83d066da7343f333a54dae9bc31c"},
-    {file = "scipy-1.9.3-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:da8245491d73ed0a994ed9c2e380fd058ce2fa8a18da204681f2fe1f57f98f95"},
-    {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4db5b30849606a95dcf519763dd3ab6fe9bd91df49eba517359e450a7d80ce2e"},
-    {file = "scipy-1.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c68db6b290cbd4049012990d7fe71a2abd9ffbe82c0056ebe0f01df8be5436b0"},
-    {file = "scipy-1.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:5b88e6d91ad9d59478fafe92a7c757d00c59e3bdc3331be8ada76a4f8d683f58"},
-    {file = "scipy-1.9.3.tar.gz", hash = "sha256:fbc5c05c85c1a02be77b1ff591087c83bc44579c6d2bd9fb798bb64ea5e1a027"},
+python-versions = "<3.13,>=3.9"
+files = [
+    {file = "scipy-1.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2b997a5369e2d30c97995dcb29d638701f8000d04df01b8e947f206e5d0ac788"},
+    {file = "scipy-1.11.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:95763fbda1206bec41157582bea482f50eb3702c85fffcf6d24394b071c0e87a"},
+    {file = "scipy-1.11.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e367904a0fec76433bf3fbf3e85bf60dae8e9e585ffd21898ab1085a29a04d16"},
+    {file = "scipy-1.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d690e1ca993c8f7ede6d22e5637541217fc6a4d3f78b3672a6fe454dbb7eb9a7"},
+    {file = "scipy-1.11.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d2b813bfbe8dec6a75164523de650bad41f4405d35b0fa24c2c28ae07fcefb20"},
+    {file = "scipy-1.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:afdb0d983f6135d50770dd979df50bf1c7f58b5b33e0eb8cf5c73c70600eae1d"},
+    {file = "scipy-1.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d9886f44ef8c9e776cb7527fb01455bf4f4a46c455c4682edc2c2cc8cd78562"},
+    {file = "scipy-1.11.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1342ca385c673208f32472830c10110a9dcd053cf0c4b7d4cd7026d0335a6c1d"},
+    {file = "scipy-1.11.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b133f237bd8ba73bad51bc12eb4f2d84cbec999753bf25ba58235e9fc2096d80"},
+    {file = "scipy-1.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aeb87661de987f8ec56fa6950863994cd427209158255a389fc5aea51fa7055"},
+    {file = "scipy-1.11.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90d3b1364e751d8214e325c371f0ee0dd38419268bf4888b2ae1040a6b266b2a"},
+    {file = "scipy-1.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:f73102f769ee06041a3aa26b5841359b1a93cc364ce45609657751795e8f4a4a"},
+    {file = "scipy-1.11.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa4909c6c20c3d91480533cddbc0e7c6d849e7d9ded692918c76ce5964997898"},
+    {file = "scipy-1.11.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ac74b1512d38718fb6a491c439aa7b3605b96b1ed3be6599c17d49d6c60fca18"},
+    {file = "scipy-1.11.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8425fa963a32936c9773ee3ce44a765d8ff67eed5f4ac81dc1e4a819a238ee9"},
+    {file = "scipy-1.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:542a757e2a6ec409e71df3d8fd20127afbbacb1c07990cb23c5870c13953d899"},
+    {file = "scipy-1.11.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ea932570b1c2a30edafca922345854ff2cd20d43cd9123b6dacfdecebfc1a80b"},
+    {file = "scipy-1.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:4447ad057d7597476f9862ecbd9285bbf13ba9d73ce25acfa4e4b11c6801b4c9"},
+    {file = "scipy-1.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b0620240ef445b5ddde52460e6bc3483b7c9c750275369379e5f609a1050911c"},
+    {file = "scipy-1.11.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:f28f1f6cfeb48339c192efc6275749b2a25a7e49c4d8369a28b6591da02fbc9a"},
+    {file = "scipy-1.11.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:214cdf04bbae7a54784f8431f976704ed607c4bc69ba0d5d5d6a9df84374df76"},
+    {file = "scipy-1.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10eb6af2f751aa3424762948e5352f707b0dece77288206f227864ddf675aca0"},
+    {file = "scipy-1.11.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0f3261f14b767b316d7137c66cc4f33a80ea05841b9c87ad83a726205b901423"},
+    {file = "scipy-1.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:2c91cf049ffb5575917f2a01da1da082fd24ed48120d08a6e7297dfcac771dcd"},
+    {file = "scipy-1.11.2.tar.gz", hash = "sha256:b29318a5e39bd200ca4381d80b065cdf3076c7d7281c5e36569e99273867f61d"},
 ]
 
 [package.dependencies]
-numpy = ">=1.18.5,<1.26.0"
+numpy = ">=1.21.6,<1.28.0"
 
 [package.extras]
-dev = ["flake8", "mypy", "pycodestyle", "typing_extensions"]
-doc = ["matplotlib (>2)", "numpydoc", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-panels (>=0.5.2)", "sphinx-tabs"]
-test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
+dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"]
+doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"]
+test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"]
 
 [[package]]
 name = "send2trash"
-version = "1.8.0"
-description = "Send file to trash natively under Mac OS X, Windows and Linux."
+version = "1.8.2"
+description = "Send file to trash natively under Mac OS X, Windows and Linux"
 category = "main"
 optional = false
-python-versions = "*"
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
 files = [
-    {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"},
-    {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"},
+    {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"},
+    {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"},
 ]
 
 [package.extras]
@@ -2569,19 +3709,19 @@ win32 = ["pywin32"]
 
 [[package]]
 name = "setuptools"
-version = "65.6.3"
+version = "68.1.2"
 description = "Easily download, build, install, upgrade, and uninstall Python packages"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54"},
-    {file = "setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75"},
+    {file = "setuptools-68.1.2-py3-none-any.whl", hash = "sha256:3d8083eed2d13afc9426f227b24fd1659489ec107c0e86cec2ffdde5c92e790b"},
+    {file = "setuptools-68.1.2.tar.gz", hash = "sha256:3d4dfa6d95f1b101d695a6160a7626e15583af71a5f52176efa5d39a054d475d"},
 ]
 
 [package.extras]
-docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
-testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
+docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5,<=7.1.2)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"]
+testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
 testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
 
 [[package]]
@@ -2622,18 +3762,20 @@ files = [
 
 [[package]]
 name = "soundfile"
-version = "0.11.0"
+version = "0.12.1"
 description = "An audio library based on libsndfile, CFFI and NumPy"
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "soundfile-0.11.0-py2.py3-none-any.whl", hash = "sha256:f4e4f832b1958403fb9726eeea54e0ebf1c7fc2599ff296a7ab1ac062f8048c9"},
-    {file = "soundfile-0.11.0-py2.py3-none-macosx_10_9_arm64.macosx_11_0_arm64.whl", hash = "sha256:9e6a62eefad0a7f856cc8f5ede7f1a0c196b65d2901c00fffc74a3d7e81d89c8"},
-    {file = "soundfile-0.11.0-py2.py3-none-macosx_10_9_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:12f66fe9dcddedaa6c808bc3e104fc67fcee59dc64214bf7f43605e69836c497"},
-    {file = "soundfile-0.11.0-py2.py3-none-win32.whl", hash = "sha256:08d9636815692f332e042990d449e79b888d288f0752226d8602e91523a0a29b"},
-    {file = "soundfile-0.11.0-py2.py3-none-win_amd64.whl", hash = "sha256:a4ab6f66ad222d8e144dcb6abc73fbb867c11da2934b677f9b129778a6c65112"},
-    {file = "soundfile-0.11.0.tar.gz", hash = "sha256:931738a1c93e8684c2d3e1d514ac63440ce827ec783ea0a2d3e4730e3dc58c18"},
+    {file = "soundfile-0.12.1-py2.py3-none-any.whl", hash = "sha256:828a79c2e75abab5359f780c81dccd4953c45a2c4cd4f05ba3e233ddf984b882"},
+    {file = "soundfile-0.12.1-py2.py3-none-macosx_10_9_x86_64.whl", hash = "sha256:d922be1563ce17a69582a352a86f28ed8c9f6a8bc951df63476ffc310c064bfa"},
+    {file = "soundfile-0.12.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:bceaab5c4febb11ea0554566784bcf4bc2e3977b53946dda2b12804b4fe524a8"},
+    {file = "soundfile-0.12.1-py2.py3-none-manylinux_2_17_x86_64.whl", hash = "sha256:2dc3685bed7187c072a46ab4ffddd38cef7de9ae5eb05c03df2ad569cf4dacbc"},
+    {file = "soundfile-0.12.1-py2.py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:074247b771a181859d2bc1f98b5ebf6d5153d2c397b86ee9e29ba602a8dfe2a6"},
+    {file = "soundfile-0.12.1-py2.py3-none-win32.whl", hash = "sha256:59dfd88c79b48f441bbf6994142a19ab1de3b9bb7c12863402c2bc621e49091a"},
+    {file = "soundfile-0.12.1-py2.py3-none-win_amd64.whl", hash = "sha256:0d86924c00b62552b650ddd28af426e3ff2d4dc2e9047dae5b3d8452e0a49a77"},
+    {file = "soundfile-0.12.1.tar.gz", hash = "sha256:e8e1017b2cf1dda767aef19d2fd9ee5ebe07e050d430f77a0a7c66ba08b8cdae"},
 ]
 
 [package.dependencies]
@@ -2644,14 +3786,14 @@ numpy = ["numpy"]
 
 [[package]]
 name = "soupsieve"
-version = "2.3.2.post1"
+version = "2.4.1"
 description = "A modern CSS selector implementation for Beautiful Soup."
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 files = [
-    {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"},
-    {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"},
+    {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"},
+    {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"},
 ]
 
 [[package]]
@@ -2676,14 +3818,14 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"]
 
 [[package]]
 name = "tenacity"
-version = "8.2.1"
+version = "8.2.3"
 description = "Retry code until it succeeds"
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 files = [
-    {file = "tenacity-8.2.1-py3-none-any.whl", hash = "sha256:dd1b769ca7002fda992322939feca5bee4fa11f39146b0af14e0b8d9f27ea854"},
-    {file = "tenacity-8.2.1.tar.gz", hash = "sha256:c7bb4b86425b977726a7b49971542d4f67baf72096597d283f3ffd01f33b92df"},
+    {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"},
+    {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"},
 ]
 
 [package.extras]
@@ -2724,14 +3866,14 @@ files = [
 
 [[package]]
 name = "threadpoolctl"
-version = "3.1.0"
+version = "3.2.0"
 description = "threadpoolctl"
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
 files = [
-    {file = "threadpoolctl-3.1.0-py3-none-any.whl", hash = "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b"},
-    {file = "threadpoolctl-3.1.0.tar.gz", hash = "sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380"},
+    {file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"},
+    {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"},
 ]
 
 [[package]]
@@ -2753,11 +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 = "dev"
+category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
@@ -2767,118 +3921,158 @@ files = [
 
 [[package]]
 name = "tornado"
-version = "6.2"
+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.7"
+python-versions = ">= 3.8"
 files = [
-    {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"},
-    {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"},
-    {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"},
-    {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"},
-    {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"},
-    {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"},
-    {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"},
-    {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"},
-    {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"},
-    {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"},
-    {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"},
+    {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"},
+    {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"},
+    {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"},
+    {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"},
+    {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"},
+    {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"},
+    {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"},
+    {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"},
+    {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"},
+    {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"},
+    {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"},
 ]
 
 [[package]]
 name = "tqdm"
-version = "4.64.1"
+version = "4.66.1"
 description = "Fast, Extensible Progress Meter"
 category = "main"
 optional = false
-python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
+python-versions = ">=3.7"
 files = [
-    {file = "tqdm-4.64.1-py2.py3-none-any.whl", hash = "sha256:6fee160d6ffcd1b1c68c65f14c829c22832bc401726335ce92c52d395944a6a1"},
-    {file = "tqdm-4.64.1.tar.gz", hash = "sha256:5f4f682a004951c1b450bc753c710e9280c5746ce6ffedee253ddbcbf54cf1e4"},
+    {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"},
+    {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"},
 ]
 
 [package.dependencies]
 colorama = {version = "*", markers = "platform_system == \"Windows\""}
 
 [package.extras]
-dev = ["py-make (>=0.1.0)", "twine", "wheel"]
+dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"]
 notebook = ["ipywidgets (>=6)"]
 slack = ["slack-sdk"]
 telegram = ["requests"]
 
 [[package]]
 name = "traitlets"
-version = "5.8.0"
+version = "5.9.0"
 description = "Traitlets Python configuration system"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "traitlets-5.8.0-py3-none-any.whl", hash = "sha256:c864831efa0ba6576d09b44884b34e41defc18c0d7e720b4a2d6698c842cab3e"},
-    {file = "traitlets-5.8.0.tar.gz", hash = "sha256:6cc57d6dc28c85d5365961726ffd19b538739347749e13ebe34e03323a0e8f84"},
+    {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"},
+    {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"},
 ]
 
 [package.extras]
 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 = [
+    {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"},
+    {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"},
+]
+
 [[package]]
 name = "uri-template"
-version = "1.2.0"
+version = "1.3.0"
 description = "RFC 6570 URI Template Processor"
 category = "main"
 optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.7"
 files = [
-    {file = "uri_template-1.2.0-py3-none-any.whl", hash = "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db"},
-    {file = "uri_template-1.2.0.tar.gz", hash = "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06"},
+    {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"},
+    {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"},
 ]
 
 [package.extras]
-dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-noqa", "flake8-requirements", "flake8-type-annotations", "flake8-use-fstring", "mypy", "pep8-naming"]
+dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"]
 
 [[package]]
 name = "urllib3"
-version = "1.26.13"
+version = "2.0.4"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
 category = "main"
 optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+python-versions = ">=3.7"
 files = [
-    {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"},
-    {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"},
+    {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"},
+    {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"},
 ]
 
 [package.extras]
-brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
-secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"]
-socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
+secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"]
+socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
+zstd = ["zstandard (>=0.18.0)"]
 
 [[package]]
 name = "wcwidth"
-version = "0.2.5"
+version = "0.2.6"
 description = "Measures the displayed width of unicode strings in a terminal"
 category = "main"
 optional = false
 python-versions = "*"
 files = [
-    {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
-    {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
+    {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"},
+    {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"},
 ]
 
 [[package]]
 name = "webcolors"
-version = "1.12"
-description = "A library for working with color names and color values formats defined by HTML and CSS."
+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 = [
-    {file = "webcolors-1.12-py3-none-any.whl", hash = "sha256:d98743d81d498a2d3eaf165196e65481f0d2ea85281463d856b1e51b09f62dce"},
-    {file = "webcolors-1.12.tar.gz", hash = "sha256:16d043d3a08fd6a1b1b7e3e9e62640d09790dce80d2bdd4792a175b35fe794a9"},
+    {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"},
+    {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"},
 ]
 
+[package.extras]
+docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"]
+tests = ["pytest", "pytest-cov"]
+
 [[package]]
 name = "webencodings"
 version = "0.5.1"
@@ -2893,34 +4087,122 @@ files = [
 
 [[package]]
 name = "websocket-client"
-version = "1.4.2"
+version = "1.6.2"
 description = "WebSocket client for Python with low level API options"
 category = "main"
 optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
 files = [
-    {file = "websocket-client-1.4.2.tar.gz", hash = "sha256:d6e8f90ca8e2dd4e8027c4561adeb9456b54044312dba655e7cae652ceb9ae59"},
-    {file = "websocket_client-1.4.2-py3-none-any.whl", hash = "sha256:d6b06432f184438d99ac1f456eaf22fe1ade524c3dd16e661142dc54e9cba574"},
+    {file = "websocket-client-1.6.2.tar.gz", hash = "sha256:53e95c826bf800c4c465f50093a8c4ff091c7327023b10bfaff40cf1ef170eaa"},
+    {file = "websocket_client-1.6.2-py3-none-any.whl", hash = "sha256:ce54f419dfae71f4bdba69ebe65bf7f0a93fe71bc009ad3a010aacc3eebad537"},
 ]
 
 [package.extras]
-docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"]
+docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"]
 optional = ["python-socks", "wsaccel"]
 test = ["websockets"]
 
 [[package]]
 name = "widgetsnbextension"
-version = "4.0.5"
+version = "4.0.8"
 description = "Jupyter interactive widgets for Jupyter Notebook"
 category = "main"
 optional = false
 python-versions = ">=3.7"
 files = [
-    {file = "widgetsnbextension-4.0.5-py3-none-any.whl", hash = "sha256:eaaaf434fb9b08bd197b2a14ffe45ddb5ac3897593d43c69287091e5f3147bf7"},
-    {file = "widgetsnbextension-4.0.5.tar.gz", hash = "sha256:003f716d930d385be3fd9de42dd9bf008e30053f73bddde235d14fbeaeff19af"},
+    {file = "widgetsnbextension-4.0.8-py3-none-any.whl", hash = "sha256:2e37f0ce9da11651056280c7efe96f2db052fe8fc269508e3724f5cbd6c93018"},
+    {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 = "7bf1a00837513734f37c12c47369c7c9c1379a1f98af1f34d76331a94875bd9c"
+python-versions = "3.10.*"
+content-hash = "0821c482ad42cd1b32b3a6dc4f836986f50ece1207603ac165337971c32ff626"
diff --git a/pyproject.toml b/pyproject.toml
index b517850c5cab3063044714296216af1413547052..a38b16056a8863c00f6c5f468c0a7579ff5188a4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,10 +4,10 @@ version = "0.1.0"
 description = ""
 authors = ["Lukas Mahler <e11908553@student.tuwien.ac.at>"]
 readme = "README.md"
-packages = [{include = "dbrepo_ismir"}]
+packages = [{include = "fairnb"}]
 
 [tool.poetry.dependencies]
-python = "^3.10"
+python = "3.10.*"
 ipykernel = "^6.19.4"
 requests = "^2.28.1"
 pandas = "^1.5.2"
@@ -20,10 +20,15 @@ jupyter = "^1.0.0"
 git-python = "^1.0.3"
 ipynb = "^0.5.1"
 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]
 pytest = "^7.2.0"
+pip = "*"
 
 [build-system]
 requires = ["poetry-core"]
diff --git a/resource/5_ml_model/ml_model_artefact_metadata.yml b/resource/5_ml_model/ml_model_entity_metadata.yml
similarity index 100%
rename from resource/5_ml_model/ml_model_artefact_metadata.yml
rename to resource/5_ml_model/ml_model_entity_metadata.yml
diff --git a/test/integration/__init__.py b/test/integration/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/test/integration/test_download_entities.py b/test/integration/test_download_entities.py
new file mode 100644
index 0000000000000000000000000000000000000000..55d1c4bc87ea33ede59ca378fdc600150d523ebd
--- /dev/null
+++ b/test/integration/test_download_entities.py
@@ -0,0 +1,31 @@
+import yaml
+from pytest import fixture
+
+from fairnb.api.dbrepo import DBRepoConnector
+from fairnb.entity.dbrepo_entity import DbRepoEntity
+from definitions import BASE_PATH
+
+
+@fixture
+def connector():
+    with open(BASE_PATH / "config" / "test-config.yml", "r") as file:
+        config = yaml.safe_load(file)["dbrepo"]
+
+    return DBRepoConnector(
+        config["credentials"]["username"],
+        config["credentials"]["password"],
+        config["credentials"]["client_secret_key"],
+        config["host"],
+        config["container-id"],
+        config["database-id"]
+    )
+
+
+def test_download_dbrepo_existing_works(connector: DBRepoConnector):
+    entity = DbRepoEntity.existing(
+        id="1",
+        location=BASE_PATH / "tmp" / "test" / "dbrepo_entity.csv",
+        dbrepo_connector=connector,
+    )
+
+    entity.download()
diff --git a/test/test.ipynb b/test/test.ipynb
index e46d973bb3ef6b585077ad715ba2417b2d372b26..018a660533c8cf47a3c029e10a00773569026130 100644
--- a/test/test.ipynb
+++ b/test/test.ipynb
@@ -1,4 +1,4 @@
-{
+
  "cells": [
   {
    "cell_type": "code",
@@ -51,13 +51,12 @@
     "## DBREPO"
    ]
   },
-  {
-   "cell_type": "code",
+  { "cell_type": "code",
    "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
-    "from dbrepo_ismir.dbrepo import DBRepoConnector"
+    "from fairnb.dbrepo import DBRepoConnector"
    ]
   },
   {
diff --git a/test/test_dbrepo.py b/test/test_dbrepo.py
index 2afa0acaa3a8cf625e8395c7f7566562cfd2736e..91c66d7414a6aa5d3568845baca53f06a440392a 100644
--- a/test/test_dbrepo.py
+++ b/test/test_dbrepo.py
@@ -2,7 +2,7 @@ import unittest
 import pandas as pd
 from unittest import mock
 import yaml
-from dbrepo_ismir.dbrepo import DBRepoConnector
+from fairnb.api.dbrepo import DBRepoConnector
 from definitions import BASE_PATH
 
 
@@ -59,7 +59,7 @@ class DBRepoConnectorTester(unittest.TestCase):
         assert self.connector_wrong_pw.__token is None
         
     @mock.patch(
-        'dbrepo_ismir.dbrepo.DBRepoConnector.download_table', 
+        'fairnb.dbrepo.DBRepoConnector.download_table',
         mocked_download_table
     )
     def test_download_table_as_df(self):