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": "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" + }, + "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):