From cfb575f0872b65359982361e0b1dfd5646287fc0 Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 10:23:48 +0100 Subject: [PATCH 01/15] dogfooding changes for dataset/team objects --- darwin/future/meta/objects/dataset.py | 96 +---------- darwin/future/meta/objects/team.py | 91 +++++++++- darwin/future/meta/queries/dataset.py | 2 +- darwin/future/tests/meta/objects/fixtures.py | 7 + .../tests/meta/objects/test_datasetmeta.py | 153 +++-------------- .../tests/meta/objects/test_teammeta.py | 157 +++++++++++++++++- 6 files changed, 278 insertions(+), 228 deletions(-) diff --git a/darwin/future/meta/objects/dataset.py b/darwin/future/meta/objects/dataset.py index be870afaf..049ab8138 100644 --- a/darwin/future/meta/objects/dataset.py +++ b/darwin/future/meta/objects/dataset.py @@ -51,12 +51,8 @@ def item_ids(self) -> List[UUID]: assert self.meta_params["team_slug"] is not None and type(self.meta_params["team_slug"]) == str return get_item_ids(self.client, self.meta_params["team_slug"], str(self._element.id)) - def get_dataset_by_id(self) -> DatasetCore: - # TODO: implement - raise NotImplementedError() - @classmethod - def create_dataset(cls, client: ClientCore, slug: str) -> Tuple[Optional[List[Exception]], Optional[DatasetCore]]: + def create_dataset(cls, client: ClientCore, slug: str) -> DatasetCore: """ Creates a new dataset for the given team @@ -71,101 +67,25 @@ def create_dataset(cls, client: ClientCore, slug: str) -> Tuple[Optional[List[Ex A tuple containing a list of exceptions and the dataset created """ - exceptions = [] dataset: Optional[DatasetCore] = None - - try: - cls._validate_slug(slug) - dataset = create_dataset(client, slug) - except Exception as e: - exceptions.append(e) - - return exceptions or None, dataset + cls._validate_slug(slug) + dataset = create_dataset(client, slug) + return dataset def update_dataset(self) -> DatasetCore: # TODO: implement in IO-1018 raise NotImplementedError() - @classmethod - def delete_dataset(cls, client: ClientCore, dataset_id: Union[int, str]) -> Tuple[Optional[List[Exception]], int]: + def delete(self) -> int: """ - Deletes a dataset by id or slug - - Parameters - ---------- - dataset_id: Union[int, str] - The id or slug of the dataset to delete - - Returns - ------- - Tuple[Optional[List[Exception]], int] - A tuple containing a list of exceptions and the number of datasets deleted - """ - exceptions = [] - dataset_deleted = -1 - - try: - if isinstance(dataset_id, str): - dataset_deleted = cls._delete_by_slug(client, dataset_id) - else: - dataset_deleted = cls._delete_by_id(client, dataset_id) - - except Exception as e: - exceptions.append(e) - - return exceptions or None, dataset_deleted - - @staticmethod - def _delete_by_slug(client: ClientCore, slug: str) -> int: - """ - (internal) Deletes a dataset by slug - - Parameters - ---------- - client: MetaClient - The client to use to make the request - - slug: str - The slug of the dataset to delete + Deletes a current dataset Returns ------- int - The dataset deleted - """ - assert_is(isinstance(client, ClientCore), "client must be a Core Client") - assert_is(isinstance(slug, str), "slug must be a string") - - dataset = get_dataset(client, slug) - if dataset and dataset.id: - dataset_deleted = remove_dataset(client, dataset.id) - else: - raise MissingDataset(f"Dataset with slug {slug} not found") - - return dataset_deleted - - @staticmethod - def _delete_by_id(client: ClientCore, dataset_id: int) -> int: + The id of dataset deleted """ - (internal) Deletes a dataset by id - - Parameters - ---------- - client: Client - The client to use to make the request - - dataset_id: int - The id of the dataset to delete - - Returns - ------- - int - The dataset deleted - """ - assert_is(isinstance(client, ClientCore), "client must be a Client") - assert_is(isinstance(dataset_id, int), "dataset_id must be an integer") - - dataset_deleted = remove_dataset(client, dataset_id) + dataset_deleted = remove_dataset(self.client, self.id) return dataset_deleted @staticmethod diff --git a/darwin/future/meta/objects/team.py b/darwin/future/meta/objects/team.py index 4783f4484..c7fa76feb 100644 --- a/darwin/future/meta/objects/team.py +++ b/darwin/future/meta/objects/team.py @@ -1,10 +1,13 @@ -from typing import List, Optional +from typing import List, Optional, Tuple, Union from darwin.future.core.client import ClientCore +from darwin.future.core.datasets import get_dataset, remove_dataset from darwin.future.core.team.get_team import get_team from darwin.future.data_objects.team import TeamCore +from darwin.future.exceptions import MissingDataset from darwin.future.helpers.assertion import assert_is from darwin.future.meta.objects.base import MetaBase +from darwin.future.meta.objects.dataset import Dataset from darwin.future.meta.queries.dataset import DatasetQuery from darwin.future.meta.queries.team_member import TeamMemberQuery from darwin.future.meta.queries.workflow import WorkflowQuery @@ -55,3 +58,89 @@ def workflows(self) -> WorkflowQuery: def __str__(self) -> str: return f"TeamMeta(name='{self.name}', slug='{self.slug}', id='{self.id}' - {len(self._element.members if self._element.members else [])} members)" + + @classmethod + def delete_dataset(cls, client: ClientCore, dataset_id: Union[int, str]) -> Tuple[Optional[List[Exception]], int]: + """ + Deletes a dataset by id or slug + + Parameters + ---------- + dataset_id: Union[int, str] + The id or slug of the dataset to delete + + Returns + ------- + Tuple[Optional[List[Exception]], int] + A tuple containing a list of exceptions and the number of datasets deleted + """ + exceptions = [] + dataset_deleted = -1 + + try: + if isinstance(dataset_id, str): + dataset_deleted = cls._delete_dataset_by_slug(client, dataset_id) + else: + dataset_deleted = cls._delete_dataset_by_id(client, dataset_id) + + except Exception as e: + exceptions.append(e) + + return exceptions or None, dataset_deleted + + @staticmethod + def _delete_dataset_by_slug(client: ClientCore, slug: str) -> int: + """ + (internal) Deletes a dataset by slug + + Parameters + ---------- + client: MetaClient + The client to use to make the request + + slug: str + The slug of the dataset to delete + + Returns + ------- + int + The dataset deleted + """ + assert_is(isinstance(client, ClientCore), "client must be a Core Client") + assert_is(isinstance(slug, str), "slug must be a string") + + dataset = get_dataset(client, slug) + if dataset and dataset.id: + dataset_deleted = remove_dataset(client, dataset.id) + else: + raise MissingDataset(f"Dataset with slug {slug} not found") + + return dataset_deleted + + @staticmethod + def _delete_dataset_by_id(client: ClientCore, dataset_id: int) -> int: + """ + (internal) Deletes a dataset by id + + Parameters + ---------- + client: Client + The client to use to make the request + + dataset_id: int + The id of the dataset to delete + + Returns + ------- + int + The dataset deleted + """ + assert_is(isinstance(client, ClientCore), "client must be a Client") + assert_is(isinstance(dataset_id, int), "dataset_id must be an integer") + + dataset_deleted = remove_dataset(client, dataset_id) + return dataset_deleted + + def create_dataset(self, slug: str) -> Dataset: + core = Dataset.create_dataset(self.client, slug) + return Dataset(self.client, core, meta_params={"team_slug": self.slug}) diff --git a/darwin/future/meta/queries/dataset.py b/darwin/future/meta/queries/dataset.py index daf3dc24e..b80e49d90 100644 --- a/darwin/future/meta/queries/dataset.py +++ b/darwin/future/meta/queries/dataset.py @@ -23,7 +23,7 @@ def _collect(self) -> List[Dataset]: if exceptions: # TODO: print and or raise exceptions, tbd how we want to handle this pass - datasets_meta = [Dataset(self.client, dataset) for dataset in datasets] + datasets_meta = [Dataset(self.client, dataset, self.meta_params) for dataset in datasets] if not self.filters: self.filters = [] diff --git a/darwin/future/tests/meta/objects/fixtures.py b/darwin/future/tests/meta/objects/fixtures.py index fd84327a0..395102f3a 100644 --- a/darwin/future/tests/meta/objects/fixtures.py +++ b/darwin/future/tests/meta/objects/fixtures.py @@ -4,9 +4,11 @@ from pytest import fixture, raises from darwin.future.core.client import ClientCore +from darwin.future.data_objects.dataset import DatasetCore from darwin.future.data_objects.team import TeamCore from darwin.future.data_objects.workflow import WFStageCore, WorkflowCore from darwin.future.meta.objects import stage +from darwin.future.meta.objects.dataset import Dataset from darwin.future.meta.objects.stage import Stage from darwin.future.meta.objects.team import Team from darwin.future.meta.objects.workflow import Workflow @@ -36,3 +38,8 @@ def base_meta_stage(base_client: ClientCore, base_stage: WFStageCore, base_UUID: @fixture def base_meta_stage_list(base_meta_stage: Stage, base_UUID: UUID) -> List[Stage]: return [base_meta_stage] + + +@fixture +def base_meta_dataset(base_client: ClientCore, base_dataset: DatasetCore) -> Dataset: + return Dataset(base_client, base_dataset, meta_params={"team_slug": "test_team"}) diff --git a/darwin/future/tests/meta/objects/test_datasetmeta.py b/darwin/future/tests/meta/objects/test_datasetmeta.py index 7d3088b38..2b60f8c06 100644 --- a/darwin/future/tests/meta/objects/test_datasetmeta.py +++ b/darwin/future/tests/meta/objects/test_datasetmeta.py @@ -3,25 +3,14 @@ from unittest.mock import Mock, patch from pytest import fixture, mark, raises +from requests import HTTPError from responses import RequestsMock from darwin.future.core.client import DarwinConfig from darwin.future.meta.client import Client from darwin.future.meta.objects.dataset import Dataset from darwin.future.tests.core.fixtures import * - - -@fixture -def _delete_by_slug_mock() -> Generator: - with patch.object(Dataset, "_delete_by_slug") as mock: - yield mock - - -@fixture -def _delete_by_id_mock() -> Generator: - with patch.object(Dataset, "_delete_by_id") as mock: - yield mock - +from darwin.future.tests.meta.objects.fixtures import * # `datasets` tests # TODO datasets tests @@ -31,20 +20,15 @@ def _delete_by_id_mock() -> Generator: # `create_dataset` tests -def test_create_dataset_returns_exceptions_thrown(base_config: DarwinConfig) -> None: +def test_create_dataset_raises_HTTPError(base_config: DarwinConfig) -> None: valid_client = Client(base_config) valid_slug = "test_dataset" base_url = base_config.base_url + "api/datasets" - with RequestsMock() as rsps: + with RequestsMock() as rsps, raises(HTTPError): rsps.add(rsps.POST, base_url, status=500) - - exceptions, dataset_created = Dataset.create_dataset(valid_client, valid_slug) - - assert exceptions is not None - assert "500 Server Error" in str(exceptions[0]) - assert dataset_created is None + dataset_created = Dataset.create_dataset(valid_client, valid_slug) def test_create_dataset_returns_dataset_created_if_dataset_created(base_config: DarwinConfig) -> None: @@ -61,9 +45,8 @@ def test_create_dataset_returns_dataset_created_if_dataset_created(base_config: status=201, ) - exceptions, dataset_created = Dataset.create_dataset(valid_client, valid_slug) + dataset_created = Dataset.create_dataset(valid_client, valid_slug) - assert exceptions is None assert dataset_created is not None assert dataset_created.id == 1 assert dataset_created.name == "test dataset" @@ -74,128 +57,30 @@ def test_create_dataset_returns_dataset_created_if_dataset_created(base_config: # TODO update_dataset tests -# `delete_dataset` tests -def test_delete_dataset_returns_exceptions_thrown( - base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock -) -> None: - _delete_by_slug_mock.side_effect = Exception("test exception") - - valid_client = Client(base_config) - - exceptions, dataset_deleted = Dataset.delete_dataset(valid_client, "test_dataset") - - assert exceptions is not None - assert str(exceptions[0]) == "test exception" - assert dataset_deleted == -1 - - assert _delete_by_slug_mock.call_count == 1 - assert _delete_by_id_mock.call_count == 0 - - -def test_delete_dataset_calls_delete_by_slug_as_appropriate( - base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock -) -> None: - valid_client = Client(base_config) - - exceptions, _ = Dataset.delete_dataset(valid_client, "test_dataset") - - assert exceptions is None - assert _delete_by_slug_mock.call_count == 1 - assert _delete_by_id_mock.call_count == 0 - - -def test_delete_dataset_calls_delete_by_id_as_appropriate( - base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock -) -> None: - valid_client = Client(base_config) - - exceptions, _ = Dataset.delete_dataset(valid_client, 1) - - assert exceptions is None - assert _delete_by_slug_mock.call_count == 0 - assert _delete_by_id_mock.call_count == 1 - - -# Test `_delete_by_slug` -def test_delete_by_slug_raises_exception_if_not_passed_str_and_client(base_config: DarwinConfig) -> None: - valid_client = Client(base_config) - valid_slug = "test_dataset" - invalid_client = "client" - invalid_slug = 1 - - with raises(AssertionError): - Dataset._delete_by_slug(valid_client, invalid_slug) # type: ignore - +@mark.parametrize( + "invalid_slug", + ["", " ", "test dataset", *[f"dataset_{c}" for c in string.punctuation if c not in ["-", "_", "."]]], +) +def test_validate_slugh_raises_exception_if_passed_invalid_inputs(invalid_slug: str) -> None: with raises(AssertionError): - Dataset._delete_by_slug(invalid_client, valid_slug) # type: ignore - - -def test_delete_by_slug__returns_dataset_deleted_if_dataset_found(base_config: DarwinConfig) -> None: - valid_client = Client(base_config) - valid_slug = "test_dataset" - - base_url = base_config.base_url + "api/datasets" - - with RequestsMock() as rsps: - rsps.add( - rsps.GET, - base_url + "?id=test_dataset", - json={"id": 1, "name": "Test Dataset", "slug": "test_dataset"}, - status=200, - ) - rsps.add( - rsps.PUT, - base_url + "/1/archive", - json={"id": 1, "name": "Test Dataset", "slug": "test_dataset"}, - status=200, - ) - dataset_deleted = Dataset._delete_by_slug(valid_client, valid_slug) - - assert dataset_deleted == 1 - - -# Test `_delete_by_id` -def test_delete_by_id_raises_exception_if_not_passed_int_and_client(base_config: DarwinConfig) -> None: - valid_client = Client(base_config) - valid_id = 1 - invalid_client = "client" - invalid_id = "1" + Dataset._validate_slug(invalid_slug) - with raises(AssertionError): - Dataset._delete_by_id(valid_client, invalid_id) # type: ignore - with raises(AssertionError): - Dataset._delete_by_id(invalid_client, valid_id) # type: ignore +def test_validate_slug_returns_none_if_passed_valid_slug() -> None: + valid_slug = "test-dataset" + assert Dataset._validate_slug(valid_slug) is None -def test_delete_by_id_returns_dataset_deleted_if_dataset_found(base_config: DarwinConfig) -> None: - valid_client = Client(base_config) - valid_id = 1 +def test_delete(base_meta_dataset: Dataset, base_config: DarwinConfig) -> None: base_url = base_config.base_url + "api/datasets" - with RequestsMock() as rsps: rsps.add( rsps.PUT, - base_url + "/1/archive", - json={"id": 1, "name": "Test Dataset", "slug": "test_dataset"}, + base_url + f"/{base_meta_dataset.id}/archive", + json={"id": base_meta_dataset.id, "name": "Test Dataset", "slug": "test_dataset"}, status=200, ) - dataset_deleted = Dataset._delete_by_id(valid_client, valid_id) + dataset_deleted = base_meta_dataset.delete() assert dataset_deleted == 1 - - -@mark.parametrize( - "invalid_slug", - ["", " ", "test dataset", *[f"dataset_{c}" for c in string.punctuation if c not in ["-", "_", "."]]], -) -def test_validate_slugh_raises_exception_if_passed_invalid_inputs(invalid_slug: str) -> None: - with raises(AssertionError): - Dataset._validate_slug(invalid_slug) - - -def test_validate_slug_returns_none_if_passed_valid_slug() -> None: - valid_slug = "test-dataset" - - assert Dataset._validate_slug(valid_slug) is None diff --git a/darwin/future/tests/meta/objects/test_teammeta.py b/darwin/future/tests/meta/objects/test_teammeta.py index 06370b4d7..c2d78d30b 100644 --- a/darwin/future/tests/meta/objects/test_teammeta.py +++ b/darwin/future/tests/meta/objects/test_teammeta.py @@ -1,21 +1,170 @@ +from typing import Generator from unittest.mock import Mock, patch -import responses from pytest import fixture, raises +from responses import RequestsMock -from darwin.future.core.client import ClientCore +from darwin.future.core.client import ClientCore, DarwinConfig +from darwin.future.data_objects.dataset import DatasetCore from darwin.future.data_objects.team import TeamMemberCore +from darwin.future.meta.client import Client +from darwin.future.meta.objects.dataset import Dataset from darwin.future.meta.objects.team import Team from darwin.future.tests.core.fixtures import * from darwin.future.tests.meta.objects.fixtures import * +@fixture +def _delete_by_slug_mock() -> Generator: + with patch.object(Team, "_delete_dataset_by_slug") as mock: + yield mock + + +@fixture +def _delete_by_id_mock() -> Generator: + with patch.object(Team, "_delete_dataset_by_id") as mock: + yield mock + + def test_team_meta_collects_members( base_meta_team: Team, base_client: ClientCore, base_team_member: TeamMemberCore, base_team_member_json: dict ) -> None: - with responses.RequestsMock() as rsps: + with RequestsMock() as rsps: endpoint = base_client.config.api_endpoint + "memberships" - rsps.add(responses.GET, endpoint, json=[base_team_member_json]) + rsps.add(rsps.GET, endpoint, json=[base_team_member_json]) members = base_meta_team.members._collect() assert len(members) == 1 assert members[0]._element == base_team_member + + +# `delete_dataset` tests +def test_delete_dataset_returns_exceptions_thrown( + base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock +) -> None: + _delete_by_slug_mock.side_effect = Exception("test exception") + + valid_client = Client(base_config) + + exceptions, dataset_deleted = Team.delete_dataset(valid_client, "test_dataset") + + assert exceptions is not None + assert str(exceptions[0]) == "test exception" + assert dataset_deleted == -1 + + assert _delete_by_slug_mock.call_count == 1 + assert _delete_by_id_mock.call_count == 0 + + +def test_delete_dataset_calls_delete_by_slug_as_appropriate( + base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock +) -> None: + valid_client = Client(base_config) + + exceptions, _ = Team.delete_dataset(valid_client, "test_dataset") + + assert exceptions is None + assert _delete_by_slug_mock.call_count == 1 + assert _delete_by_id_mock.call_count == 0 + + +def test_delete_dataset_calls_delete_by_id_as_appropriate( + base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock +) -> None: + valid_client = Client(base_config) + + exceptions, _ = Team.delete_dataset(valid_client, 1) + + assert exceptions is None + assert _delete_by_slug_mock.call_count == 0 + assert _delete_by_id_mock.call_count == 1 + + +def test_delete_by_slug__returns_dataset_deleted_if_dataset_found(base_config: DarwinConfig) -> None: + valid_client = Client(base_config) + valid_slug = "test_dataset" + + base_url = base_config.base_url + "api/datasets" + + with RequestsMock() as rsps: + rsps.add( + rsps.GET, + base_url + "?id=test_dataset", + json={"id": 1, "name": "Test Dataset", "slug": "test_dataset"}, + status=200, + ) + rsps.add( + rsps.PUT, + base_url + "/1/archive", + json={"id": 1, "name": "Test Dataset", "slug": "test_dataset"}, + status=200, + ) + dataset_deleted = Team._delete_dataset_by_slug(valid_client, valid_slug) + + assert dataset_deleted == 1 + + +def test_delete_by_id_returns_dataset_deleted_if_dataset_found(base_config: DarwinConfig) -> None: + valid_client = Client(base_config) + valid_id = 1 + + base_url = base_config.base_url + "api/datasets" + + with RequestsMock() as rsps: + rsps.add( + rsps.PUT, + base_url + "/1/archive", + json={"id": 1, "name": "Test Dataset", "slug": "test_dataset"}, + status=200, + ) + dataset_deleted = Team._delete_dataset_by_id(valid_client, valid_id) + + assert dataset_deleted == 1 + + +# Test `_delete_by_id` +def test_delete_by_id_raises_exception_if_not_passed_int_and_client(base_config: DarwinConfig) -> None: + valid_client = Client(base_config) + valid_id = 1 + invalid_client = "client" + invalid_id = "1" + + with raises(AssertionError): + Team._delete_dataset_by_id(valid_client, invalid_id) # type: ignore + + with raises(AssertionError): + Team._delete_dataset_by_id(invalid_client, valid_id) # type: ignore + + +# Test `_delete_by_slug` +def test_delete_by_slug_raises_exception_if_not_passed_str_and_client(base_config: DarwinConfig) -> None: + valid_client = Client(base_config) + valid_slug = "test_dataset" + invalid_client = "client" + invalid_slug = 1 + + with raises(AssertionError): + Team._delete_dataset_by_slug(valid_client, invalid_slug) # type: ignore + + with raises(AssertionError): + Team._delete_dataset_by_slug(invalid_client, valid_slug) # type: ignore + + +def test_create_dataset(base_meta_team: Team, base_config: DarwinConfig) -> None: + base_url = base_config.base_url + "api/datasets" + valid_slug = "test_dataset" + valid_name = "test dataset" + with RequestsMock() as rsps: + rsps.add( + rsps.POST, + base_url, + json={"id": 1, "name": valid_name, "slug": valid_slug}, + status=201, + ) + + dataset_created = base_meta_team.create_dataset(valid_slug) + assert dataset_created is not None + assert isinstance(dataset_created, Dataset) + assert isinstance(dataset_created._element, DatasetCore) + assert dataset_created.id == 1 + assert dataset_created.name == valid_name + assert dataset_created.slug == valid_slug From 42c8423a1392b76e2be09488a9a8b23e6d8d5baf Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 10:44:44 +0100 Subject: [PATCH 02/15] WIP ruff fixes --- darwin/future/core/client.py | 2 +- darwin/future/core/team/get_team.py | 1 - darwin/future/core/types/common.py | 2 -- darwin/future/core/types/query.py | 4 +--- darwin/future/core/utils/pathutils.py | 2 +- darwin/future/core/workflows/list_workflows.py | 1 - darwin/future/data_objects/team.py | 2 +- darwin/future/exceptions.py | 2 +- darwin/future/meta/client.py | 4 +--- darwin/future/meta/objects/base.py | 4 ++-- darwin/future/meta/objects/dataset.py | 5 ++--- darwin/future/meta/objects/team_member.py | 2 -- darwin/future/meta/objects/workflow.py | 2 -- darwin/future/meta/queries/dataset.py | 2 +- darwin/future/meta/queries/stage.py | 2 +- darwin/future/meta/queries/team_member.py | 2 +- darwin/future/meta/queries/workflow.py | 4 ++-- darwin/future/tests/core/datasets/test_create_dataset.py | 1 - darwin/future/tests/core/fixtures.py | 1 - darwin/future/tests/core/items/test_get_items.py | 2 +- darwin/future/tests/core/items/test_move_items.py | 4 ++-- darwin/future/tests/core/test_client.py | 5 ++--- darwin/future/tests/core/types/test_querystring.py | 2 +- darwin/future/tests/core/workflows/test_get_workflow.py | 1 - .../future/tests/core/workflows/test_list_workflows.py | 1 - darwin/future/tests/data_objects/fixtures.py | 3 --- .../tests/data_objects/test_general_darwin_objects.py | 9 ++++----- darwin/future/tests/data_objects/test_team.py | 3 +-- darwin/future/tests/data_objects/workflow/test_wfedge.py | 1 - .../future/tests/data_objects/workflow/test_wfstage.py | 1 - .../tests/data_objects/workflow/test_wfstage_config.py | 1 - darwin/future/tests/data_objects/workflow/test_wfuser.py | 1 - darwin/future/tests/meta/fixtures.py | 2 +- darwin/future/tests/meta/objects/fixtures.py | 3 +-- darwin/future/tests/meta/objects/test_datasetmeta.py | 6 ++---- darwin/future/tests/meta/objects/test_stagemeta.py | 5 +---- darwin/future/tests/meta/queries/test_dataset.py | 4 +--- darwin/future/tests/meta/queries/test_stage.py | 5 ++--- darwin/future/tests/meta/queries/test_team_member.py | 2 +- darwin/future/tests/meta/queries/test_workflow.py | 4 +--- darwin/future/tests/meta/test_client.py | 2 -- 41 files changed, 36 insertions(+), 76 deletions(-) diff --git a/darwin/future/core/client.py b/darwin/future/core/client.py index 8787170b5..fae7b415e 100644 --- a/darwin/future/core/client.py +++ b/darwin/future/core/client.py @@ -1,7 +1,7 @@ from __future__ import annotations from pathlib import Path -from typing import Any, Callable, Dict, List, Optional, Union, overload +from typing import Callable, Dict, Optional, overload from urllib.parse import urlparse import requests diff --git a/darwin/future/core/team/get_team.py b/darwin/future/core/team/get_team.py index 619c5e649..72317fce9 100644 --- a/darwin/future/core/team/get_team.py +++ b/darwin/future/core/team/get_team.py @@ -1,7 +1,6 @@ from typing import List, Optional, Tuple from darwin.future.core.client import ClientCore -from darwin.future.core.types.common import JSONType from darwin.future.data_objects.team import TeamCore, TeamMemberCore diff --git a/darwin/future/core/types/common.py b/darwin/future/core/types/common.py index 297eb3d4b..d3d112d7a 100644 --- a/darwin/future/core/types/common.py +++ b/darwin/future/core/types/common.py @@ -1,7 +1,5 @@ from typing import Any, Dict, List, Union -import pydantic -from pydantic import BaseModel from darwin.future.data_objects import validators as darwin_validators from darwin.future.data_objects.typing import UnknownType diff --git a/darwin/future/core/types/query.py b/darwin/future/core/types/query.py index ac45d2903..c5277ff91 100644 --- a/darwin/future/core/types/query.py +++ b/darwin/future/core/types/query.py @@ -9,9 +9,7 @@ Generic, List, Optional, - Tuple, TypeVar, - overload, ) from darwin.future.core.client import ClientCore @@ -119,7 +117,7 @@ class Query(Generic[T], ABC): def __init__( self, client: ClientCore, filters: Optional[List[QueryFilter]] = None, meta_params: Optional[Param] = None ): - self.meta_params: dict = meta_params or dict() + self.meta_params: dict = meta_params or {} self.client = client self.filters = filters or [] self.results: Optional[List[T]] = None diff --git a/darwin/future/core/utils/pathutils.py b/darwin/future/core/utils/pathutils.py index ccaebdeba..5ad6eda90 100644 --- a/darwin/future/core/utils/pathutils.py +++ b/darwin/future/core/utils/pathutils.py @@ -1,6 +1,6 @@ import json from pathlib import Path -from typing import Any, Optional +from typing import Optional import yaml diff --git a/darwin/future/core/workflows/list_workflows.py b/darwin/future/core/workflows/list_workflows.py index e28e766d5..a1013d234 100644 --- a/darwin/future/core/workflows/list_workflows.py +++ b/darwin/future/core/workflows/list_workflows.py @@ -1,6 +1,5 @@ from typing import List, Optional, Tuple -from pydantic import ValidationError from darwin.future.core.client import ClientCore from darwin.future.data_objects.workflow import WorkflowCore, WorkflowListValidator diff --git a/darwin/future/data_objects/team.py b/darwin/future/data_objects/team.py index c766fd591..da697ec90 100644 --- a/darwin/future/data_objects/team.py +++ b/darwin/future/data_objects/team.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import List, Optional, Tuple +from typing import List, Optional from pydantic import validator diff --git a/darwin/future/exceptions.py b/darwin/future/exceptions.py index bfd6cd0b3..e68fd5e8f 100644 --- a/darwin/future/exceptions.py +++ b/darwin/future/exceptions.py @@ -1,4 +1,4 @@ -from typing import Any, List, Optional +from typing import List, Optional from darwin.future.data_objects.typing import KeyValuePairDict, UnknownType diff --git a/darwin/future/meta/client.py b/darwin/future/meta/client.py index 8d230dfb2..ceb4a182f 100644 --- a/darwin/future/meta/client.py +++ b/darwin/future/meta/client.py @@ -1,14 +1,12 @@ from __future__ import annotations from pathlib import Path -from typing import List, Optional +from typing import Optional from requests.adapters import Retry from darwin.future.core.client import ClientCore, DarwinConfig from darwin.future.meta.objects.team import Team -from darwin.future.meta.objects.workflow import Workflow -from darwin.future.meta.queries.workflow import WorkflowQuery class Client(ClientCore): diff --git a/darwin/future/meta/objects/base.py b/darwin/future/meta/objects/base.py index aa51789f1..7a9b84624 100644 --- a/darwin/future/meta/objects/base.py +++ b/darwin/future/meta/objects/base.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Dict, Generic, List, Optional, TypeVar +from typing import Dict, Generic, Optional, TypeVar from darwin.future.core.client import ClientCore from darwin.future.pydantic_base import DefaultDarwin @@ -16,7 +16,7 @@ class MetaBase(Generic[R]): def __init__(self, client: ClientCore, element: R, meta_params: Optional[Param] = None) -> None: self.client = client self._element = element - self.meta_params = meta_params or dict() + self.meta_params = meta_params or {} def __str__(self) -> str: return str(self._element) diff --git a/darwin/future/meta/objects/dataset.py b/darwin/future/meta/objects/dataset.py index 049ab8138..3db63a1b2 100644 --- a/darwin/future/meta/objects/dataset.py +++ b/darwin/future/meta/objects/dataset.py @@ -1,16 +1,15 @@ from __future__ import annotations -from typing import List, Optional, Sequence, Tuple, Union +from typing import List, Optional, Sequence, Union from uuid import UUID from darwin.cli_functions import upload_data from darwin.dataset.upload_manager import LocalFile from darwin.datatypes import PathLike from darwin.future.core.client import ClientCore -from darwin.future.core.datasets import create_dataset, get_dataset, remove_dataset +from darwin.future.core.datasets import create_dataset, remove_dataset from darwin.future.core.items import get_item_ids from darwin.future.data_objects.dataset import DatasetCore -from darwin.future.exceptions import MissingDataset from darwin.future.helpers.assertion import assert_is from darwin.future.meta.objects.base import MetaBase diff --git a/darwin/future/meta/objects/team_member.py b/darwin/future/meta/objects/team_member.py index 222e24454..089fd8be1 100644 --- a/darwin/future/meta/objects/team_member.py +++ b/darwin/future/meta/objects/team_member.py @@ -1,6 +1,4 @@ -from typing import List, Optional -from darwin.future.core.client import ClientCore from darwin.future.data_objects.team import TeamMemberCore from darwin.future.data_objects.team_member_role import TeamMemberRole from darwin.future.meta.objects.base import MetaBase diff --git a/darwin/future/meta/objects/workflow.py b/darwin/future/meta/objects/workflow.py index f28671243..ae55e7fdf 100644 --- a/darwin/future/meta/objects/workflow.py +++ b/darwin/future/meta/objects/workflow.py @@ -1,7 +1,5 @@ from __future__ import annotations -from enum import auto -from pathlib import Path from typing import List, Optional, Sequence, Union from uuid import UUID diff --git a/darwin/future/meta/queries/dataset.py b/darwin/future/meta/queries/dataset.py index b80e49d90..bfcfa4046 100644 --- a/darwin/future/meta/queries/dataset.py +++ b/darwin/future/meta/queries/dataset.py @@ -3,7 +3,7 @@ from typing import List from darwin.future.core.datasets import list_datasets -from darwin.future.core.types.query import Param, Query, QueryFilter +from darwin.future.core.types.query import Query, QueryFilter from darwin.future.meta.objects.dataset import Dataset diff --git a/darwin/future/meta/queries/stage.py b/darwin/future/meta/queries/stage.py index 3c8bd86db..37fe042c8 100644 --- a/darwin/future/meta/queries/stage.py +++ b/darwin/future/meta/queries/stage.py @@ -3,7 +3,7 @@ from typing import List from uuid import UUID -from darwin.future.core.types.query import Param, Query, QueryFilter +from darwin.future.core.types.query import Query, QueryFilter from darwin.future.core.workflows import get_workflow from darwin.future.meta.objects.stage import Stage diff --git a/darwin/future/meta/queries/team_member.py b/darwin/future/meta/queries/team_member.py index 0fa192208..4d38ead0d 100644 --- a/darwin/future/meta/queries/team_member.py +++ b/darwin/future/meta/queries/team_member.py @@ -3,7 +3,7 @@ from typing import List from darwin.future.core.team.get_team import get_team_members -from darwin.future.core.types.query import Param, Query, QueryFilter +from darwin.future.core.types.query import Query, QueryFilter from darwin.future.meta.objects.team_member import TeamMember diff --git a/darwin/future/meta/queries/workflow.py b/darwin/future/meta/queries/workflow.py index 552a49dfa..6e3e1510a 100644 --- a/darwin/future/meta/queries/workflow.py +++ b/darwin/future/meta/queries/workflow.py @@ -3,7 +3,7 @@ from uuid import UUID from darwin.exceptions import DarwinException -from darwin.future.core.types.query import Param, Query, QueryFilter +from darwin.future.core.types.query import Query, QueryFilter from darwin.future.core.workflows import list_workflows from darwin.future.data_objects.workflow import WFStageCore from darwin.future.helpers.exception_handler import handle_exception @@ -81,7 +81,7 @@ def _execute_filters(self, workflows: List[Workflow], filter: QueryFilter) -> Li return [w for w in workflows if w._element is not None and str(w._element.dataset) in datasets_to_find_name] if filter.name == "has_stages": - stages_to_find = [s for s in filter.param.split(",")] + stages_to_find = list(filter.param.split(",")) return [ w for w in workflows diff --git a/darwin/future/tests/core/datasets/test_create_dataset.py b/darwin/future/tests/core/datasets/test_create_dataset.py index fd323fed1..cd9fd8f64 100644 --- a/darwin/future/tests/core/datasets/test_create_dataset.py +++ b/darwin/future/tests/core/datasets/test_create_dataset.py @@ -1,4 +1,3 @@ -from typing import Union import responses from pytest import raises diff --git a/darwin/future/tests/core/fixtures.py b/darwin/future/tests/core/fixtures.py index f929d191c..00f167367 100644 --- a/darwin/future/tests/core/fixtures.py +++ b/darwin/future/tests/core/fixtures.py @@ -8,7 +8,6 @@ from darwin.future.data_objects.dataset import DatasetCore from darwin.future.data_objects.team import TeamCore, TeamMemberCore from darwin.future.data_objects.team_member_role import TeamMemberRole -from darwin.future.data_objects.workflow import WFTypeCore @pytest.fixture diff --git a/darwin/future/tests/core/items/test_get_items.py b/darwin/future/tests/core/items/test_get_items.py index 0bee40afd..49d756518 100644 --- a/darwin/future/tests/core/items/test_get_items.py +++ b/darwin/future/tests/core/items/test_get_items.py @@ -14,7 +14,7 @@ def test_get_item_ids(UUIDs: List[UUID], UUIDs_str: List[str], base_client: Clie rsps.add( rsps.GET, base_client.config.api_endpoint - + f"v2/teams/default-team/items/ids?not_statuses=archived,error&sort[id]=desc&dataset_ids=1337", + + "v2/teams/default-team/items/ids?not_statuses=archived,error&sort[id]=desc&dataset_ids=1337", json={"item_ids": UUIDs_str}, status=200, ) diff --git a/darwin/future/tests/core/items/test_move_items.py b/darwin/future/tests/core/items/test_move_items.py index e3ea7bea6..370b61380 100644 --- a/darwin/future/tests/core/items/test_move_items.py +++ b/darwin/future/tests/core/items/test_move_items.py @@ -1,5 +1,5 @@ from typing import Dict, List -from uuid import UUID, uuid4 +from uuid import UUID import pytest import responses @@ -37,5 +37,5 @@ def test_move_items( json={"success": UUIDs_str}, status=200, ) - item_ids = move_items_to_stage(base_client, "default-team", workflow_id, 1337, stage_id, UUIDs) + move_items_to_stage(base_client, "default-team", workflow_id, 1337, stage_id, UUIDs) assert rsps.assert_call_count(base_client.config.api_endpoint + "v2/teams/default-team/items/stage", 1) diff --git a/darwin/future/tests/core/test_client.py b/darwin/future/tests/core/test_client.py index 2ee03ad2c..4881dad2a 100644 --- a/darwin/future/tests/core/test_client.py +++ b/darwin/future/tests/core/test_client.py @@ -1,4 +1,3 @@ -import unittest from pathlib import Path import pytest @@ -6,7 +5,7 @@ from pydantic import ValidationError from requests import HTTPError -from darwin.future.core.client import ClientCore, DarwinConfig, TeamsConfig +from darwin.future.core.client import ClientCore, DarwinConfig from darwin.future.exceptions import DarwinException, NotFound, Unauthorized from darwin.future.tests.core.fixtures import * from darwin.future.tests.fixtures import * @@ -35,7 +34,7 @@ def test_config_base_url(base_config: DarwinConfig) -> None: @pytest.mark.parametrize("base_url", ["test_url.com", "ftp://test_url.com", ""]) def test_invalid_config_url_validation(base_url: str, tmp_path: Path) -> None: with pytest.raises(ValidationError): - config = DarwinConfig( + DarwinConfig( api_key="test_key", datasets_dir=tmp_path, api_endpoint="http://test_url.com/api/", diff --git a/darwin/future/tests/core/types/test_querystring.py b/darwin/future/tests/core/types/test_querystring.py index 11a3a0bce..bf38d054a 100644 --- a/darwin/future/tests/core/types/test_querystring.py +++ b/darwin/future/tests/core/types/test_querystring.py @@ -10,7 +10,7 @@ def test_querystring_happy_path() -> None: query_string_2 = QueryString({"foo": "bar", "baz": "qux"}) assert str(query_string_2) == "?foo=bar&baz=qux" - query_string_3 = QueryString(dict()) + query_string_3 = QueryString({}) assert str(query_string_3) == "?" assert query_string.value == {"foo": "bar"} diff --git a/darwin/future/tests/core/workflows/test_get_workflow.py b/darwin/future/tests/core/workflows/test_get_workflow.py index c0f443635..f6197ae16 100644 --- a/darwin/future/tests/core/workflows/test_get_workflow.py +++ b/darwin/future/tests/core/workflows/test_get_workflow.py @@ -1,4 +1,3 @@ -import pytest import responses from pydantic import ValidationError from requests import HTTPError diff --git a/darwin/future/tests/core/workflows/test_list_workflows.py b/darwin/future/tests/core/workflows/test_list_workflows.py index c959cea1d..2f4dda31f 100644 --- a/darwin/future/tests/core/workflows/test_list_workflows.py +++ b/darwin/future/tests/core/workflows/test_list_workflows.py @@ -1,6 +1,5 @@ from typing import List -import pytest import responses from pydantic import ValidationError from requests import HTTPError diff --git a/darwin/future/tests/data_objects/fixtures.py b/darwin/future/tests/data_objects/fixtures.py index 8f0849e3a..4e0a56a7d 100644 --- a/darwin/future/tests/data_objects/fixtures.py +++ b/darwin/future/tests/data_objects/fixtures.py @@ -1,10 +1,7 @@ -import json from pathlib import Path -from typing import List import pytest -from darwin.future.data_objects.workflow import WFStageCore, WorkflowCore test_data_path: Path = Path(__file__).parent / "workflow" / "data" valid_stage_json = test_data_path / "stage.json" diff --git a/darwin/future/tests/data_objects/test_general_darwin_objects.py b/darwin/future/tests/data_objects/test_general_darwin_objects.py index 0a9382d39..e851ce93d 100644 --- a/darwin/future/tests/data_objects/test_general_darwin_objects.py +++ b/darwin/future/tests/data_objects/test_general_darwin_objects.py @@ -1,4 +1,3 @@ -import unittest import pytest from pydantic import BaseModel, ValidationError @@ -19,11 +18,11 @@ def test_integrated_parsing_works_with_raw(basic_combined: dict) -> None: def test_broken_obj_raises(broken_combined: dict) -> None: - with pytest.raises(ValidationError) as e_info: - broken = TeamCore.parse_obj(broken_combined) + with pytest.raises(ValidationError): + TeamCore.parse_obj(broken_combined) @pytest.mark.parametrize("test_object", [TeamCore, DatasetCore, ReleaseCore]) def test_empty_obj_raises(test_object: BaseModel) -> None: - with pytest.raises(ValidationError) as e_info: - broken = test_object.parse_obj({}) + with pytest.raises(ValidationError): + test_object.parse_obj({}) diff --git a/darwin/future/tests/data_objects/test_team.py b/darwin/future/tests/data_objects/test_team.py index 1e17bed9e..c279c9541 100644 --- a/darwin/future/tests/data_objects/test_team.py +++ b/darwin/future/tests/data_objects/test_team.py @@ -1,4 +1,3 @@ -import unittest import pytest import responses @@ -28,7 +27,7 @@ def test_get_team_fails_on_incorrect_input(base_client: ClientCore, base_team: T rsps.add(responses.GET, endpoint, json={}) with pytest.raises(ValidationError): - team = get_team(base_client, slug) + get_team(base_client, slug) def test_get_team_members_returns_valid_list(base_client: ClientCore, base_team_member_json: dict) -> None: diff --git a/darwin/future/tests/data_objects/workflow/test_wfedge.py b/darwin/future/tests/data_objects/workflow/test_wfedge.py index c3d0c7b8c..c20b8c5a9 100644 --- a/darwin/future/tests/data_objects/workflow/test_wfedge.py +++ b/darwin/future/tests/data_objects/workflow/test_wfedge.py @@ -1,6 +1,5 @@ from pathlib import Path -import pytest from darwin.future.data_objects.workflow import WFEdgeCore diff --git a/darwin/future/tests/data_objects/workflow/test_wfstage.py b/darwin/future/tests/data_objects/workflow/test_wfstage.py index a03613aaf..3416478c1 100644 --- a/darwin/future/tests/data_objects/workflow/test_wfstage.py +++ b/darwin/future/tests/data_objects/workflow/test_wfstage.py @@ -1,5 +1,4 @@ from json import loads -from pathlib import Path from uuid import UUID import pytest diff --git a/darwin/future/tests/data_objects/workflow/test_wfstage_config.py b/darwin/future/tests/data_objects/workflow/test_wfstage_config.py index 7a5ad2ef3..53ea142b8 100644 --- a/darwin/future/tests/data_objects/workflow/test_wfstage_config.py +++ b/darwin/future/tests/data_objects/workflow/test_wfstage_config.py @@ -1,6 +1,5 @@ from pathlib import Path -import pytest from darwin.future.data_objects.workflow import WFStageConfigCore diff --git a/darwin/future/tests/data_objects/workflow/test_wfuser.py b/darwin/future/tests/data_objects/workflow/test_wfuser.py index 8619a73e7..d69026ad5 100644 --- a/darwin/future/tests/data_objects/workflow/test_wfuser.py +++ b/darwin/future/tests/data_objects/workflow/test_wfuser.py @@ -1,6 +1,5 @@ from pathlib import Path -import pytest from darwin.future.data_objects.workflow import WFUserCore diff --git a/darwin/future/tests/meta/fixtures.py b/darwin/future/tests/meta/fixtures.py index 0a78cc9e0..2132a511b 100644 --- a/darwin/future/tests/meta/fixtures.py +++ b/darwin/future/tests/meta/fixtures.py @@ -1,4 +1,4 @@ -from pytest import fixture, raises +from pytest import fixture from darwin.future.core.client import DarwinConfig from darwin.future.meta.client import Client diff --git a/darwin/future/tests/meta/objects/fixtures.py b/darwin/future/tests/meta/objects/fixtures.py index 395102f3a..665f2c136 100644 --- a/darwin/future/tests/meta/objects/fixtures.py +++ b/darwin/future/tests/meta/objects/fixtures.py @@ -1,13 +1,12 @@ from typing import List from uuid import UUID -from pytest import fixture, raises +from pytest import fixture from darwin.future.core.client import ClientCore from darwin.future.data_objects.dataset import DatasetCore from darwin.future.data_objects.team import TeamCore from darwin.future.data_objects.workflow import WFStageCore, WorkflowCore -from darwin.future.meta.objects import stage from darwin.future.meta.objects.dataset import Dataset from darwin.future.meta.objects.stage import Stage from darwin.future.meta.objects.team import Team diff --git a/darwin/future/tests/meta/objects/test_datasetmeta.py b/darwin/future/tests/meta/objects/test_datasetmeta.py index 2b60f8c06..855fc53f6 100644 --- a/darwin/future/tests/meta/objects/test_datasetmeta.py +++ b/darwin/future/tests/meta/objects/test_datasetmeta.py @@ -1,8 +1,6 @@ import string -from typing import Generator -from unittest.mock import Mock, patch -from pytest import fixture, mark, raises +from pytest import mark, raises from requests import HTTPError from responses import RequestsMock @@ -28,7 +26,7 @@ def test_create_dataset_raises_HTTPError(base_config: DarwinConfig) -> None: with RequestsMock() as rsps, raises(HTTPError): rsps.add(rsps.POST, base_url, status=500) - dataset_created = Dataset.create_dataset(valid_client, valid_slug) + Dataset.create_dataset(valid_client, valid_slug) def test_create_dataset_returns_dataset_created_if_dataset_created(base_config: DarwinConfig) -> None: diff --git a/darwin/future/tests/meta/objects/test_stagemeta.py b/darwin/future/tests/meta/objects/test_stagemeta.py index 99f4dfef5..99faf61c1 100644 --- a/darwin/future/tests/meta/objects/test_stagemeta.py +++ b/darwin/future/tests/meta/objects/test_stagemeta.py @@ -2,11 +2,8 @@ from uuid import UUID import responses -from pytest import fixture, mark, raises -from responses import RequestsMock -from sklearn import base +from pytest import fixture -from darwin.future.core.client import DarwinConfig from darwin.future.data_objects.workflow import WFStageCore, WFTypeCore from darwin.future.meta.client import Client from darwin.future.meta.objects.stage import Stage diff --git a/darwin/future/tests/meta/queries/test_dataset.py b/darwin/future/tests/meta/queries/test_dataset.py index 3d3e163d9..75903b2da 100644 --- a/darwin/future/tests/meta/queries/test_dataset.py +++ b/darwin/future/tests/meta/queries/test_dataset.py @@ -1,8 +1,6 @@ import responses -from pytest import fixture, mark from darwin.future.core.client import ClientCore -from darwin.future.data_objects.dataset import DatasetCore from darwin.future.meta.objects.dataset import Dataset from darwin.future.meta.queries.dataset import DatasetQuery from darwin.future.tests.core.fixtures import * @@ -15,7 +13,7 @@ def test_dataset_collects_basic(base_client: ClientCore, base_datasets_json: dic rsps.add(responses.GET, endpoint, json=base_datasets_json) datasets = query._collect() assert len(datasets) == 2 - assert all([isinstance(dataset, Dataset) for dataset in datasets]) + assert all(isinstance(dataset, Dataset) for dataset in datasets) def test_datasetquery_only_passes_back_correctly_formed_objects( diff --git a/darwin/future/tests/meta/queries/test_stage.py b/darwin/future/tests/meta/queries/test_stage.py index a9cc61267..2821366ba 100644 --- a/darwin/future/tests/meta/queries/test_stage.py +++ b/darwin/future/tests/meta/queries/test_stage.py @@ -1,4 +1,3 @@ -from typing import List import pytest import responses @@ -24,7 +23,7 @@ def base_workflow_meta(base_client: ClientCore, base_single_workflow_object: dic @pytest.fixture def multi_stage_workflow_object(base_single_workflow_object: dict) -> dict: stage = base_single_workflow_object["stages"][0] - types = [t for t in WFTypeCore.__members__.values()] * 3 + types = list(WFTypeCore.__members__.values()) * 3 stages = [] for i, t in enumerate(types): temp = stage.copy() @@ -65,7 +64,7 @@ def test_stage_filters_basic( assert stages[0]._element.name == "stage1" -@pytest.mark.parametrize("wf_type", [t for t in WFTypeCore.__members__.values()]) +@pytest.mark.parametrize("wf_type", list(WFTypeCore.__members__.values())) def test_stage_filters_WFType( wf_type: WFTypeCore, filled_query: StageQuery, multi_stage_workflow_object: dict, base_workflow_meta: Workflow ) -> None: diff --git a/darwin/future/tests/meta/queries/test_team_member.py b/darwin/future/tests/meta/queries/test_team_member.py index 19b19a2e2..8fc79d7b6 100644 --- a/darwin/future/tests/meta/queries/test_team_member.py +++ b/darwin/future/tests/meta/queries/test_team_member.py @@ -30,7 +30,7 @@ def test_team_member_only_passes_back_correct(base_client: ClientCore, base_team assert isinstance(members[0], TeamMember) -@pytest.mark.parametrize("role", [role for role in TeamMemberRole]) +@pytest.mark.parametrize("role", list(TeamMemberRole)) def test_team_member_filters_role( role: TeamMemberRole, base_client: ClientCore, base_team_members_json: List[dict] ) -> None: diff --git a/darwin/future/tests/meta/queries/test_workflow.py b/darwin/future/tests/meta/queries/test_workflow.py index 71f77c802..42aa9bed9 100644 --- a/darwin/future/tests/meta/queries/test_workflow.py +++ b/darwin/future/tests/meta/queries/test_workflow.py @@ -4,8 +4,6 @@ import responses from darwin.future.core.client import ClientCore -from darwin.future.core.types.query import Modifier -from darwin.future.data_objects.workflow import WorkflowCore from darwin.future.meta.objects.workflow import Workflow from darwin.future.meta.queries.workflow import WorkflowQuery from darwin.future.tests.core.fixtures import * @@ -28,7 +26,7 @@ def test_workflowquery_collects_basic(base_client: ClientCore, base_filterable_w workflows = query._collect() assert len(workflows) == 3 - assert all([isinstance(workflow, Workflow) for workflow in workflows]) + assert all(isinstance(workflow, Workflow) for workflow in workflows) @responses.activate diff --git a/darwin/future/tests/meta/test_client.py b/darwin/future/tests/meta/test_client.py index fb3b74b16..291a97d6a 100644 --- a/darwin/future/tests/meta/test_client.py +++ b/darwin/future/tests/meta/test_client.py @@ -1,6 +1,4 @@ -import unittest -import pytest import responses from darwin.future.core.client import DarwinConfig From 8f402b142135e82fe2aadaebceefb78ed846758c Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 10:52:26 +0100 Subject: [PATCH 03/15] WIP ruff fixes --- deploy/format_lint.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/deploy/format_lint.sh b/deploy/format_lint.sh index 23270d5e6..ca4d03233 100755 --- a/deploy/format_lint.sh +++ b/deploy/format_lint.sh @@ -35,6 +35,7 @@ if [ "$ACTION" == "format" ]; then pipinstall ruff elif [ "$ACTION" == "typecheck" ]; then pipinstall mypy + pipinstall types-requests else echo "Action must be format, typecheck, or lint" exit 1 From d88b764a7f99ba3117edeec029c9daa5df8624fe Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 11:13:14 +0100 Subject: [PATCH 04/15] black fixes --- darwin/future/core/items/get.py | 4 +-- darwin/future/core/items/move_items.py | 4 +-- darwin/future/core/types/query.py | 8 ++--- darwin/future/core/workflows/get_workflow.py | 4 +-- darwin/future/meta/objects/dataset.py | 4 +-- darwin/future/meta/objects/stage.py | 4 +-- darwin/future/meta/objects/team_member.py | 1 - darwin/future/meta/objects/workflow.py | 4 +-- darwin/future/meta/queries/dataset.py | 8 +---- darwin/future/meta/queries/workflow.py | 32 ++++--------------- .../core/datasets/test_create_dataset.py | 1 - darwin/future/tests/core/items/fixtures.py | 5 ++- .../future/tests/core/items/test_get_items.py | 6 ++-- darwin/future/tests/core/test_query.py | 12 ++----- .../test_general_darwin_objects.py | 1 - darwin/future/tests/data_objects/test_team.py | 1 - .../tests/meta/objects/test_stagemeta.py | 17 +++------- .../tests/meta/objects/test_teammeta.py | 16 +++------- .../future/tests/meta/queries/test_dataset.py | 4 +-- .../future/tests/meta/queries/test_stage.py | 13 ++------ .../tests/meta/queries/test_team_member.py | 4 +-- .../tests/meta/queries/test_workflow.py | 8 ++--- darwin/future/tests/meta/test_client.py | 1 - deploy/format_lint.sh | 1 + 24 files changed, 41 insertions(+), 122 deletions(-) diff --git a/darwin/future/core/items/get.py b/darwin/future/core/items/get.py index 8ac7a7559..b240e3b69 100644 --- a/darwin/future/core/items/get.py +++ b/darwin/future/core/items/get.py @@ -33,9 +33,7 @@ def get_item_ids(api_client: ClientCore, team_slug: str, dataset_id: Union[str, return uuids -def get_item_ids_stage( - api_client: ClientCore, team_slug: str, dataset_id: Union[int, str], stage_id: Union[UUID, str] -) -> List[UUID]: +def get_item_ids_stage(api_client: ClientCore, team_slug: str, dataset_id: Union[int, str], stage_id: Union[UUID, str]) -> List[UUID]: """ Returns a list of item ids for the stage diff --git a/darwin/future/core/items/move_items.py b/darwin/future/core/items/move_items.py index 32a39b86f..bbf4fc1a9 100644 --- a/darwin/future/core/items/move_items.py +++ b/darwin/future/core/items/move_items.py @@ -5,9 +5,7 @@ from darwin.future.core.types.common import JSONType -def move_items_to_stage( - api_client: ClientCore, team_slug: str, workflow_id: UUID, dataset_id: int, stage_id: UUID, item_ids: List[UUID] -) -> JSONType: +def move_items_to_stage(api_client: ClientCore, team_slug: str, workflow_id: UUID, dataset_id: int, stage_id: UUID, item_ids: List[UUID]) -> JSONType: """ Moves a list of items to a stage diff --git a/darwin/future/core/types/query.py b/darwin/future/core/types/query.py index c5277ff91..8c2a7a269 100644 --- a/darwin/future/core/types/query.py +++ b/darwin/future/core/types/query.py @@ -114,9 +114,7 @@ class Query(Generic[T], ABC): _generic_execute_filter: Executes a filter on a list of objects """ - def __init__( - self, client: ClientCore, filters: Optional[List[QueryFilter]] = None, meta_params: Optional[Param] = None - ): + def __init__(self, client: ClientCore, filters: Optional[List[QueryFilter]] = None, meta_params: Optional[Param] = None): self.meta_params: dict = meta_params or {} self.client = client self.filters = filters or [] @@ -132,9 +130,7 @@ def __add__(self, filter: QueryFilter) -> Query[T]: def __sub__(self, filter: QueryFilter) -> Query[T]: self._changed_since_last = True - return self.__class__( - self.client, filters=[f for f in self.filters if f != filter], meta_params=self.meta_params - ) + return self.__class__(self.client, filters=[f for f in self.filters if f != filter], meta_params=self.meta_params) def __iadd__(self, filter: QueryFilter) -> Query[T]: self.filters.append(filter) diff --git a/darwin/future/core/workflows/get_workflow.py b/darwin/future/core/workflows/get_workflow.py index 0afca7047..16763e467 100644 --- a/darwin/future/core/workflows/get_workflow.py +++ b/darwin/future/core/workflows/get_workflow.py @@ -6,9 +6,7 @@ from darwin.future.data_objects.workflow import WorkflowCore -def get_workflow( - client: ClientCore, workflow_id: str, team_slug: Optional[str] = None -) -> Tuple[Optional[WorkflowCore], List[Exception]]: +def get_workflow(client: ClientCore, workflow_id: str, team_slug: Optional[str] = None) -> Tuple[Optional[WorkflowCore], List[Exception]]: workflow: Optional[WorkflowCore] = None exceptions: List[Exception] = [] diff --git a/darwin/future/meta/objects/dataset.py b/darwin/future/meta/objects/dataset.py index 3db63a1b2..c193c3d16 100644 --- a/darwin/future/meta/objects/dataset.py +++ b/darwin/future/meta/objects/dataset.py @@ -119,7 +119,5 @@ def upload_files( preserve_folders: bool = False, verbose: bool = False, ) -> Dataset: - upload_data( - self._element.name, files, files_to_exclude, fps, path, frames, extract_views, preserve_folders, verbose # type: ignore - ) + upload_data(self._element.name, files, files_to_exclude, fps, path, frames, extract_views, preserve_folders, verbose) # type: ignore return self diff --git a/darwin/future/meta/objects/stage.py b/darwin/future/meta/objects/stage.py index 85ae3b0ba..6d0e2d3c6 100644 --- a/darwin/future/meta/objects/stage.py +++ b/darwin/future/meta/objects/stage.py @@ -23,9 +23,7 @@ def item_ids(self) -> List[UUID]: _type_: _description_ """ assert self._element.id is not None - return get_item_ids_stage( - self.client, str(self.meta_params["team_slug"]), str(self.meta_params["dataset_id"]), self.id - ) + return get_item_ids_stage(self.client, str(self.meta_params["team_slug"]), str(self.meta_params["dataset_id"]), self.id) def move_attached_files_to_stage(self, new_stage_id: UUID) -> Stage: assert self.meta_params["team_slug"] is not None and type(self.meta_params["team_slug"]) == str diff --git a/darwin/future/meta/objects/team_member.py b/darwin/future/meta/objects/team_member.py index 089fd8be1..6f87d4326 100644 --- a/darwin/future/meta/objects/team_member.py +++ b/darwin/future/meta/objects/team_member.py @@ -1,4 +1,3 @@ - from darwin.future.data_objects.team import TeamMemberCore from darwin.future.data_objects.team_member_role import TeamMemberRole from darwin.future.meta.objects.base import MetaBase diff --git a/darwin/future/meta/objects/workflow.py b/darwin/future/meta/objects/workflow.py index ae55e7fdf..af6458382 100644 --- a/darwin/future/meta/objects/workflow.py +++ b/darwin/future/meta/objects/workflow.py @@ -59,9 +59,7 @@ def upload_files( auto_push: bool = True, ) -> Workflow: assert self._element.dataset is not None - upload_data( - self.datasets[0].name, files, files_to_exclude, fps, path, frames, extract_views, preserve_folders, verbose # type: ignore - ) + upload_data(self.datasets[0].name, files, files_to_exclude, fps, path, frames, extract_views, preserve_folders, verbose) # type: ignore if auto_push: self.push_from_dataset_stage() return self diff --git a/darwin/future/meta/queries/dataset.py b/darwin/future/meta/queries/dataset.py index bfcfa4046..143aaaae9 100644 --- a/darwin/future/meta/queries/dataset.py +++ b/darwin/future/meta/queries/dataset.py @@ -47,12 +47,6 @@ def _execute_filters(self, datasets: List[Dataset], filter: QueryFilter) -> List """ if filter.name == "releases": - return [ - d - for d in datasets - if d._element is not None - and d._element.releases - and filter.param in [str(r) for r in d._element.releases] - ] + return [d for d in datasets if d._element is not None and d._element.releases and filter.param in [str(r) for r in d._element.releases]] return super()._generic_execute_filter(datasets, filter) diff --git a/darwin/future/meta/queries/workflow.py b/darwin/future/meta/queries/workflow.py index 6e3e1510a..344d36064 100644 --- a/darwin/future/meta/queries/workflow.py +++ b/darwin/future/meta/queries/workflow.py @@ -42,39 +42,23 @@ def _execute_filters(self, workflows: List[Workflow], filter: QueryFilter) -> Li if filter.name == "inserted_at_start": start_date = datetime.fromisoformat(filter.param) - return [ - w - for w in workflows - if w._element is not None and self._date_compare(w._element.inserted_at, start_date) - ] + return [w for w in workflows if w._element is not None and self._date_compare(w._element.inserted_at, start_date)] if filter.name == "inserted_at_end": end_date = datetime.fromisoformat(filter.param) - return [ - w for w in workflows if w._element is not None and self._date_compare(end_date, w._element.inserted_at) - ] + return [w for w in workflows if w._element is not None and self._date_compare(end_date, w._element.inserted_at)] if filter.name == "updated_at_start": start_date = datetime.fromisoformat(filter.param) - return [ - w for w in workflows if w._element is not None and self._date_compare(w._element.updated_at, start_date) - ] + return [w for w in workflows if w._element is not None and self._date_compare(w._element.updated_at, start_date)] if filter.name == "updated_at_end": end_date = datetime.fromisoformat(filter.param) - return [ - w for w in workflows if w._element is not None and self._date_compare(end_date, w._element.updated_at) - ] + return [w for w in workflows if w._element is not None and self._date_compare(end_date, w._element.updated_at)] if filter.name == "dataset_id": datasets_to_find_id: List[int] = [int(s) for s in filter.param.split(",")] - return [ - w - for w in workflows - if w._element is not None - and w._element.dataset is not None - and int(w._element.dataset.id) in datasets_to_find_id - ] + return [w for w in workflows if w._element is not None and w._element.dataset is not None and int(w._element.dataset.id) in datasets_to_find_id] if filter.name == "dataset_name": datasets_to_find_name: List[str] = [str(s) for s in filter.param.split(",")] @@ -82,11 +66,7 @@ def _execute_filters(self, workflows: List[Workflow], filter: QueryFilter) -> Li if filter.name == "has_stages": stages_to_find = list(filter.param.split(",")) - return [ - w - for w in workflows - if w._element is not None and self._stages_contains(w._element.stages, stages_to_find) - ] + return [w for w in workflows if w._element is not None and self._stages_contains(w._element.stages, stages_to_find)] return self._generic_execute_filter(workflows, filter) diff --git a/darwin/future/tests/core/datasets/test_create_dataset.py b/darwin/future/tests/core/datasets/test_create_dataset.py index cd9fd8f64..ac83ef7d4 100644 --- a/darwin/future/tests/core/datasets/test_create_dataset.py +++ b/darwin/future/tests/core/datasets/test_create_dataset.py @@ -1,4 +1,3 @@ - import responses from pytest import raises from requests import HTTPError diff --git a/darwin/future/tests/core/items/fixtures.py b/darwin/future/tests/core/items/fixtures.py index 9f15db778..856abc6bd 100644 --- a/darwin/future/tests/core/items/fixtures.py +++ b/darwin/future/tests/core/items/fixtures.py @@ -8,14 +8,17 @@ def UUIDs() -> List[UUID]: return [uuid4() for i in range(10)] + @pytest.fixture def UUIDs_str(UUIDs: List[UUID]) -> List[str]: return [str(uuid) for uuid in UUIDs] + @pytest.fixture def stage_id() -> UUID: return uuid4() + @pytest.fixture def workflow_id() -> UUID: - return uuid4() \ No newline at end of file + return uuid4() diff --git a/darwin/future/tests/core/items/test_get_items.py b/darwin/future/tests/core/items/test_get_items.py index 49d756518..001771c72 100644 --- a/darwin/future/tests/core/items/test_get_items.py +++ b/darwin/future/tests/core/items/test_get_items.py @@ -13,8 +13,7 @@ def test_get_item_ids(UUIDs: List[UUID], UUIDs_str: List[str], base_client: Clie with responses.RequestsMock() as rsps: rsps.add( rsps.GET, - base_client.config.api_endpoint - + "v2/teams/default-team/items/ids?not_statuses=archived,error&sort[id]=desc&dataset_ids=1337", + base_client.config.api_endpoint + "v2/teams/default-team/items/ids?not_statuses=archived,error&sort[id]=desc&dataset_ids=1337", json={"item_ids": UUIDs_str}, status=200, ) @@ -27,8 +26,7 @@ def test_get_item_ids_stage(UUIDs: List[UUID], UUIDs_str: List[str], base_client with responses.RequestsMock() as rsps: rsps.add( rsps.GET, - base_client.config.api_endpoint - + f"v2/teams/default-team/items/ids?workflow_stage_ids={stage_id}&dataset_ids=1337", + base_client.config.api_endpoint + f"v2/teams/default-team/items/ids?workflow_stage_ids={stage_id}&dataset_ids=1337", json={"item_ids": UUIDs_str}, status=200, ) diff --git a/darwin/future/tests/core/test_query.py b/darwin/future/tests/core/test_query.py index 5008c195f..c90dacddf 100644 --- a/darwin/future/tests/core/test_query.py +++ b/darwin/future/tests/core/test_query.py @@ -33,16 +33,12 @@ def test_team() -> TeamCore: return TeamCore(name="test-team", slug="test-team", id=0) -def test_query_instantiated( - base_client: ClientCore, basic_filters: List[Query.QueryFilter], non_abc_query: Type[Query.Query] -) -> None: +def test_query_instantiated(base_client: ClientCore, basic_filters: List[Query.QueryFilter], non_abc_query: Type[Query.Query]) -> None: q = non_abc_query(base_client, basic_filters) assert q.filters == basic_filters -def test_query_filter_functionality( - base_client: ClientCore, basic_filters: List[Query.QueryFilter], non_abc_query: Type[Query.Query] -) -> None: +def test_query_filter_functionality(base_client: ClientCore, basic_filters: List[Query.QueryFilter], non_abc_query: Type[Query.Query]) -> None: q = non_abc_query(base_client) for f in basic_filters: q = q.filter(f) @@ -98,9 +94,7 @@ def test_query_filter_filters(mod: Optional[str], param: Any, check: Any, expect def test_QF_from_asteriks() -> None: # Builds with dictionary args - QF = Query.QueryFilter._from_args( - {"name": "test", "param": "test"}, {"name": "test2", "param": "test2", "modifier": "!="} - ) + QF = Query.QueryFilter._from_args({"name": "test", "param": "test"}, {"name": "test2", "param": "test2", "modifier": "!="}) assert len(QF) == 2 assert QF[0].name == "test" assert QF[0].param == "test" diff --git a/darwin/future/tests/data_objects/test_general_darwin_objects.py b/darwin/future/tests/data_objects/test_general_darwin_objects.py index e851ce93d..3247fb927 100644 --- a/darwin/future/tests/data_objects/test_general_darwin_objects.py +++ b/darwin/future/tests/data_objects/test_general_darwin_objects.py @@ -1,4 +1,3 @@ - import pytest from pydantic import BaseModel, ValidationError diff --git a/darwin/future/tests/data_objects/test_team.py b/darwin/future/tests/data_objects/test_team.py index c279c9541..635f591ce 100644 --- a/darwin/future/tests/data_objects/test_team.py +++ b/darwin/future/tests/data_objects/test_team.py @@ -1,4 +1,3 @@ - import pytest import responses from pydantic import ValidationError diff --git a/darwin/future/tests/meta/objects/test_stagemeta.py b/darwin/future/tests/meta/objects/test_stagemeta.py index 99faf61c1..79ad223ff 100644 --- a/darwin/future/tests/meta/objects/test_stagemeta.py +++ b/darwin/future/tests/meta/objects/test_stagemeta.py @@ -24,17 +24,14 @@ def base_WFStage(uuid_str: str) -> WFStageCore: @fixture def stage_meta(base_meta_client: Client, base_WFStage: WFStageCore, workflow_id: UUID) -> Stage: - return Stage( - base_meta_client, base_WFStage, {"team_slug": "default-team", "dataset_id": 1337, "workflow_id": workflow_id} - ) + return Stage(base_meta_client, base_WFStage, {"team_slug": "default-team", "dataset_id": 1337, "workflow_id": workflow_id}) def test_item_ids(base_meta_client: Client, stage_meta: Stage, UUIDs_str: List[str], UUIDs: List[UUID]) -> None: with responses.RequestsMock() as rsps: rsps.add( rsps.GET, - base_meta_client.config.api_endpoint - + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", + base_meta_client.config.api_endpoint + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", json={"item_ids": UUIDs_str}, status=200, ) @@ -42,14 +39,11 @@ def test_item_ids(base_meta_client: Client, stage_meta: Stage, UUIDs_str: List[s assert item_ids == UUIDs -def test_move_attached_files_to_stage( - base_meta_client: Client, stage_meta: Stage, UUIDs_str: List[str], UUIDs: List[UUID] -) -> None: +def test_move_attached_files_to_stage(base_meta_client: Client, stage_meta: Stage, UUIDs_str: List[str], UUIDs: List[UUID]) -> None: with responses.RequestsMock() as rsps: rsps.add( rsps.GET, - base_meta_client.config.api_endpoint - + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", + base_meta_client.config.api_endpoint + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", json={"item_ids": UUIDs_str}, status=200, ) @@ -62,7 +56,6 @@ def test_move_attached_files_to_stage( stage_meta.move_attached_files_to_stage(stage_meta.id) assert rsps.assert_call_count(base_meta_client.config.api_endpoint + "v2/teams/default-team/items/stage", 1) assert rsps.assert_call_count( - base_meta_client.config.api_endpoint - + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", + base_meta_client.config.api_endpoint + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", 1, ) diff --git a/darwin/future/tests/meta/objects/test_teammeta.py b/darwin/future/tests/meta/objects/test_teammeta.py index c2d78d30b..e0fc5c6fa 100644 --- a/darwin/future/tests/meta/objects/test_teammeta.py +++ b/darwin/future/tests/meta/objects/test_teammeta.py @@ -26,9 +26,7 @@ def _delete_by_id_mock() -> Generator: yield mock -def test_team_meta_collects_members( - base_meta_team: Team, base_client: ClientCore, base_team_member: TeamMemberCore, base_team_member_json: dict -) -> None: +def test_team_meta_collects_members(base_meta_team: Team, base_client: ClientCore, base_team_member: TeamMemberCore, base_team_member_json: dict) -> None: with RequestsMock() as rsps: endpoint = base_client.config.api_endpoint + "memberships" rsps.add(rsps.GET, endpoint, json=[base_team_member_json]) @@ -38,9 +36,7 @@ def test_team_meta_collects_members( # `delete_dataset` tests -def test_delete_dataset_returns_exceptions_thrown( - base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock -) -> None: +def test_delete_dataset_returns_exceptions_thrown(base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock) -> None: _delete_by_slug_mock.side_effect = Exception("test exception") valid_client = Client(base_config) @@ -55,9 +51,7 @@ def test_delete_dataset_returns_exceptions_thrown( assert _delete_by_id_mock.call_count == 0 -def test_delete_dataset_calls_delete_by_slug_as_appropriate( - base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock -) -> None: +def test_delete_dataset_calls_delete_by_slug_as_appropriate(base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock) -> None: valid_client = Client(base_config) exceptions, _ = Team.delete_dataset(valid_client, "test_dataset") @@ -67,9 +61,7 @@ def test_delete_dataset_calls_delete_by_slug_as_appropriate( assert _delete_by_id_mock.call_count == 0 -def test_delete_dataset_calls_delete_by_id_as_appropriate( - base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock -) -> None: +def test_delete_dataset_calls_delete_by_id_as_appropriate(base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock) -> None: valid_client = Client(base_config) exceptions, _ = Team.delete_dataset(valid_client, 1) diff --git a/darwin/future/tests/meta/queries/test_dataset.py b/darwin/future/tests/meta/queries/test_dataset.py index 75903b2da..810b575df 100644 --- a/darwin/future/tests/meta/queries/test_dataset.py +++ b/darwin/future/tests/meta/queries/test_dataset.py @@ -16,9 +16,7 @@ def test_dataset_collects_basic(base_client: ClientCore, base_datasets_json: dic assert all(isinstance(dataset, Dataset) for dataset in datasets) -def test_datasetquery_only_passes_back_correctly_formed_objects( - base_client: ClientCore, base_dataset_json: dict -) -> None: +def test_datasetquery_only_passes_back_correctly_formed_objects(base_client: ClientCore, base_dataset_json: dict) -> None: query = DatasetQuery(base_client) with responses.RequestsMock() as rsps: endpoint = base_client.config.api_endpoint + "datasets" diff --git a/darwin/future/tests/meta/queries/test_stage.py b/darwin/future/tests/meta/queries/test_stage.py index 2821366ba..b35a5dd1c 100644 --- a/darwin/future/tests/meta/queries/test_stage.py +++ b/darwin/future/tests/meta/queries/test_stage.py @@ -1,4 +1,3 @@ - import pytest import responses @@ -39,9 +38,7 @@ def test_WFTypes_accept_unknonwn() -> None: assert WFTypeCore("test") == WFTypeCore.UNKNOWN -def test_stage_collects_basic( - filled_query: StageQuery, base_single_workflow_object: dict, base_workflow_meta: Workflow -) -> None: +def test_stage_collects_basic(filled_query: StageQuery, base_single_workflow_object: dict, base_workflow_meta: Workflow) -> None: UUID = base_workflow_meta.id with responses.RequestsMock() as rsps: endpoint = filled_query.client.config.api_endpoint + f"v2/teams/default-team/workflows/{UUID}" @@ -51,9 +48,7 @@ def test_stage_collects_basic( assert isinstance(stages[0], Stage) -def test_stage_filters_basic( - filled_query: StageQuery, multi_stage_workflow_object: dict, base_workflow_meta: Workflow -) -> None: +def test_stage_filters_basic(filled_query: StageQuery, multi_stage_workflow_object: dict, base_workflow_meta: Workflow) -> None: UUID = base_workflow_meta.id with responses.RequestsMock() as rsps: endpoint = filled_query.client.config.api_endpoint + f"v2/teams/default-team/workflows/{UUID}" @@ -65,9 +60,7 @@ def test_stage_filters_basic( @pytest.mark.parametrize("wf_type", list(WFTypeCore.__members__.values())) -def test_stage_filters_WFType( - wf_type: WFTypeCore, filled_query: StageQuery, multi_stage_workflow_object: dict, base_workflow_meta: Workflow -) -> None: +def test_stage_filters_WFType(wf_type: WFTypeCore, filled_query: StageQuery, multi_stage_workflow_object: dict, base_workflow_meta: Workflow) -> None: UUID = base_workflow_meta.id with responses.RequestsMock() as rsps: endpoint = filled_query.client.config.api_endpoint + f"v2/teams/default-team/workflows/{UUID}" diff --git a/darwin/future/tests/meta/queries/test_team_member.py b/darwin/future/tests/meta/queries/test_team_member.py index 8fc79d7b6..048f39bd9 100644 --- a/darwin/future/tests/meta/queries/test_team_member.py +++ b/darwin/future/tests/meta/queries/test_team_member.py @@ -31,9 +31,7 @@ def test_team_member_only_passes_back_correct(base_client: ClientCore, base_team @pytest.mark.parametrize("role", list(TeamMemberRole)) -def test_team_member_filters_role( - role: TeamMemberRole, base_client: ClientCore, base_team_members_json: List[dict] -) -> None: +def test_team_member_filters_role(role: TeamMemberRole, base_client: ClientCore, base_team_members_json: List[dict]) -> None: with responses.RequestsMock() as rsps: # Test equal query = TeamMemberQuery(base_client).where({"name": "role", "param": role.value}) diff --git a/darwin/future/tests/meta/queries/test_workflow.py b/darwin/future/tests/meta/queries/test_workflow.py index 42aa9bed9..dc58b40c0 100644 --- a/darwin/future/tests/meta/queries/test_workflow.py +++ b/darwin/future/tests/meta/queries/test_workflow.py @@ -126,9 +126,7 @@ def test_workflowquery_filters_dataset_id(base_client: ClientCore, base_filterab @responses.activate -def test_workflowquery_filters_dataset_id_multiple_ids( - base_client: ClientCore, base_filterable_workflows: dict -) -> None: +def test_workflowquery_filters_dataset_id_multiple_ids(base_client: ClientCore, base_filterable_workflows: dict) -> None: endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) responses.add(responses.GET, endpoint, json=base_filterable_workflows) @@ -163,9 +161,7 @@ def test_workflowquery_filters_dataset_name(base_client: ClientCore, base_filter @responses.activate -def test_workflowquery_filters_dataset_name_mutliple_names( - base_client: ClientCore, base_filterable_workflows: dict -) -> None: +def test_workflowquery_filters_dataset_name_mutliple_names(base_client: ClientCore, base_filterable_workflows: dict) -> None: endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) responses.add(responses.GET, endpoint, json=base_filterable_workflows) diff --git a/darwin/future/tests/meta/test_client.py b/darwin/future/tests/meta/test_client.py index 291a97d6a..821cbedc4 100644 --- a/darwin/future/tests/meta/test_client.py +++ b/darwin/future/tests/meta/test_client.py @@ -1,4 +1,3 @@ - import responses from darwin.future.core.client import DarwinConfig diff --git a/deploy/format_lint.sh b/deploy/format_lint.sh index ca4d03233..a40b74e48 100755 --- a/deploy/format_lint.sh +++ b/deploy/format_lint.sh @@ -36,6 +36,7 @@ if [ "$ACTION" == "format" ]; then elif [ "$ACTION" == "typecheck" ]; then pipinstall mypy pipinstall types-requests + pipinstall types-pyYAML else echo "Action must be format, typecheck, or lint" exit 1 From c8af10b380382c8c9be1bfdfb9cb59310da8dc4b Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 12:00:10 +0100 Subject: [PATCH 05/15] wip ruff --- darwin/future/core/datasets/__init__.py | 8 ++++---- darwin/future/core/items/__init__.py | 4 ++-- darwin/future/core/types/__init__.py | 2 +- darwin/future/core/workflows/__init__.py | 6 +++--- pyproject.toml | 3 ++- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/darwin/future/core/datasets/__init__.py b/darwin/future/core/datasets/__init__.py index a5ccb19d5..ff1f72c59 100644 --- a/darwin/future/core/datasets/__init__.py +++ b/darwin/future/core/datasets/__init__.py @@ -1,4 +1,4 @@ -from darwin.future.core.datasets.create_dataset import * -from darwin.future.core.datasets.get_dataset import * -from darwin.future.core.datasets.list_datasets import * -from darwin.future.core.datasets.remove_dataset import * +from darwin.future.core.datasets.create_dataset import create_dataset +from darwin.future.core.datasets.get_dataset import get_dataset +from darwin.future.core.datasets.list_datasets import list_datasets +from darwin.future.core.datasets.remove_dataset import remove_dataset diff --git a/darwin/future/core/items/__init__.py b/darwin/future/core/items/__init__.py index 619a680fe..a56cb784d 100644 --- a/darwin/future/core/items/__init__.py +++ b/darwin/future/core/items/__init__.py @@ -1,2 +1,2 @@ -from darwin.future.core.items.get import * -from darwin.future.core.items.move_items import * +from darwin.future.core.items.get import get_item_ids, get_item_ids_stage +from darwin.future.core.items.move_items import move_items_to_stage diff --git a/darwin/future/core/types/__init__.py b/darwin/future/core/types/__init__.py index 55e5f844b..e52d13056 100644 --- a/darwin/future/core/types/__init__.py +++ b/darwin/future/core/types/__init__.py @@ -1 +1 @@ -from .common import * +from .common import JSONType, QueryString, TeamSlug diff --git a/darwin/future/core/workflows/__init__.py b/darwin/future/core/workflows/__init__.py index c2282b65a..cbecab1e8 100644 --- a/darwin/future/core/workflows/__init__.py +++ b/darwin/future/core/workflows/__init__.py @@ -1,3 +1,3 @@ -from darwin.future.core.workflows.get_workflow import * -from darwin.future.core.workflows.get_workflows import * -from darwin.future.core.workflows.list_workflows import * +from darwin.future.core.workflows.get_workflow import get_workflow +from darwin.future.core.workflows.get_workflows import get_workflows +from darwin.future.core.workflows.list_workflows import list_workflows diff --git a/pyproject.toml b/pyproject.toml index d0d834d87..7b4672e01 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,9 +62,10 @@ ignore = ["E203", "E402"] line-length = 160 [tool.ruff.per-file-ignores] -"__init__.py" = ["E402"] +"__init__.py" = ["E402", "F401"] "path/to/file.py" = ["E402"] "**/{tests,docs,tools}/*" = ["E402"] +"darwin/future/tests/*" = ["F403"] [tool.flake8] max-line-length = 160 From 914e28197ab920a1c0395b81e29add30a8f95c2e Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 12:04:49 +0100 Subject: [PATCH 06/15] typecheck change --- .github/workflows/EVENT_pull_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/EVENT_pull_request.yml b/.github/workflows/EVENT_pull_request.yml index 947e975a6..de477c3e6 100644 --- a/.github/workflows/EVENT_pull_request.yml +++ b/.github/workflows/EVENT_pull_request.yml @@ -39,7 +39,7 @@ jobs: # files: ${{ needs.get_changed_files.outputs.python_changed_files }} run_tests: - needs: [format, lint, typecheck] + needs: [format, lint] name: Run tests uses: ./.github/workflows/JOB_tests.yml From 1cd3ee957e13b4ed30ef6c2f3083fc3e04360d33 Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 12:10:39 +0100 Subject: [PATCH 07/15] wip ruff --- darwin/future/meta/objects/dataset.py | 2 +- darwin/future/meta/objects/stage.py | 10 ++++++---- pyproject.toml | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/darwin/future/meta/objects/dataset.py b/darwin/future/meta/objects/dataset.py index c193c3d16..9854efc0f 100644 --- a/darwin/future/meta/objects/dataset.py +++ b/darwin/future/meta/objects/dataset.py @@ -47,7 +47,7 @@ def item_ids(self) -> List[UUID]: List[UUID]: A list of item ids """ assert self._element.id is not None - assert self.meta_params["team_slug"] is not None and type(self.meta_params["team_slug"]) == str + assert self.meta_params["team_slug"] is not None and isinstance(self.meta_params["team_slug"], str) return get_item_ids(self.client, self.meta_params["team_slug"], str(self._element.id)) @classmethod diff --git a/darwin/future/meta/objects/stage.py b/darwin/future/meta/objects/stage.py index 6d0e2d3c6..ec086944d 100644 --- a/darwin/future/meta/objects/stage.py +++ b/darwin/future/meta/objects/stage.py @@ -23,12 +23,14 @@ def item_ids(self) -> List[UUID]: _type_: _description_ """ assert self._element.id is not None - return get_item_ids_stage(self.client, str(self.meta_params["team_slug"]), str(self.meta_params["dataset_id"]), self.id) + return get_item_ids_stage( + self.client, str(self.meta_params["team_slug"]), str(self.meta_params["dataset_id"]), self.id + ) def move_attached_files_to_stage(self, new_stage_id: UUID) -> Stage: - assert self.meta_params["team_slug"] is not None and type(self.meta_params["team_slug"]) == str - assert self.meta_params["workflow_id"] is not None and type(self.meta_params["workflow_id"]) == UUID - assert self.meta_params["dataset_id"] is not None and type(self.meta_params["dataset_id"]) == int + assert self.meta_params["team_slug"] is not None and isinstance(self.meta_params["team_slug"], str) + assert self.meta_params["workflow_id"] is not None and isinstance(self.meta_params["workflow_id"], UUID) + assert self.meta_params["dataset_id"] is not None and isinstance(self.meta_params["dataset_id"], int) slug, w_id, d_id = ( self.meta_params["team_slug"], self.meta_params["workflow_id"], diff --git a/pyproject.toml b/pyproject.toml index 7b4672e01..2ec7136a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,6 +46,7 @@ no_implicit_optional = true warn_return_any = false warn_unreachable = true pretty = true +implicit_reexport = true [tool.pydantic-mypy] init_forbid_extra = true From 150765e2e471978b6598f59284f4fa2be0200f5b Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 13:15:51 +0100 Subject: [PATCH 08/15] comment --- darwin/future/meta/objects/stage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/darwin/future/meta/objects/stage.py b/darwin/future/meta/objects/stage.py index ec086944d..4cb0b9358 100644 --- a/darwin/future/meta/objects/stage.py +++ b/darwin/future/meta/objects/stage.py @@ -17,10 +17,10 @@ class Stage(MetaBase[WFStageCore]): @property def item_ids(self) -> List[UUID]: - """_summary_ + """Item ids attached to the stage Returns: - _type_: _description_ + _type_: List[UUID] - List of item ids """ assert self._element.id is not None return get_item_ids_stage( From 4c3c2f443277f9133fa6986f6178c5477ae6f356 Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 13:18:20 +0100 Subject: [PATCH 09/15] comment --- darwin/future/meta/objects/stage.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/darwin/future/meta/objects/stage.py b/darwin/future/meta/objects/stage.py index 4cb0b9358..663cfc019 100644 --- a/darwin/future/meta/objects/stage.py +++ b/darwin/future/meta/objects/stage.py @@ -20,12 +20,10 @@ def item_ids(self) -> List[UUID]: """Item ids attached to the stage Returns: - _type_: List[UUID] - List of item ids + List[UUID]: List of item ids """ assert self._element.id is not None - return get_item_ids_stage( - self.client, str(self.meta_params["team_slug"]), str(self.meta_params["dataset_id"]), self.id - ) + return get_item_ids_stage(self.client, str(self.meta_params["team_slug"]), str(self.meta_params["dataset_id"]), self.id) def move_attached_files_to_stage(self, new_stage_id: UUID) -> Stage: assert self.meta_params["team_slug"] is not None and isinstance(self.meta_params["team_slug"], str) From c5c5732971d4a1ef92c55d3b2f53d68e71ec5390 Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 13:20:49 +0100 Subject: [PATCH 10/15] ruff --- darwin/future/core/items/get.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/darwin/future/core/items/get.py b/darwin/future/core/items/get.py index b240e3b69..9e638202c 100644 --- a/darwin/future/core/items/get.py +++ b/darwin/future/core/items/get.py @@ -57,6 +57,6 @@ def get_item_ids_stage(api_client: ClientCore, team_slug: str, dataset_id: Union f"/v2/teams/{team_slug}/items/ids", QueryString({"workflow_stage_ids": str(stage_id), "dataset_ids": str(dataset_id)}), ) - assert type(response) == dict + assert isinstance(response, dict) uuids = [UUID(uuid) for uuid in response["item_ids"]] return uuids From 79d135edfdf3f314214a72889e6a72bf05aa9088 Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 13:22:31 +0100 Subject: [PATCH 11/15] ruff --- darwin/future/core/items/get.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/darwin/future/core/items/get.py b/darwin/future/core/items/get.py index 9e638202c..14238eed1 100644 --- a/darwin/future/core/items/get.py +++ b/darwin/future/core/items/get.py @@ -28,7 +28,7 @@ def get_item_ids(api_client: ClientCore, team_slug: str, dataset_id: Union[str, f"/v2/teams/{team_slug}/items/ids", QueryString({"not_statuses": "archived,error", "sort[id]": "desc", "dataset_ids": str(dataset_id)}), ) - assert type(response) == dict + assert isinstance(response, dict) uuids = [UUID(uuid) for uuid in response["item_ids"]] return uuids From a98d72e3d4b1abb93ec29c5530f968c8ed30d256 Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 14:17:39 +0100 Subject: [PATCH 12/15] black defaults --- .vscode/settings.json | 10 +-- darwin/future/core/client.py | 49 +++++++++--- darwin/future/core/datasets/remove_dataset.py | 4 +- darwin/future/core/items/get.py | 23 +++++- darwin/future/core/items/move_items.py | 9 ++- darwin/future/core/team/get_team.py | 4 +- darwin/future/core/types/common.py | 8 +- darwin/future/core/types/query.py | 33 ++++++-- darwin/future/core/utils/pathutils.py | 4 +- darwin/future/core/workflows/get_workflow.py | 4 +- darwin/future/core/workflows/get_workflows.py | 4 +- .../future/core/workflows/list_workflows.py | 8 +- darwin/future/data_objects/workflow.py | 4 +- darwin/future/helpers/assertion.py | 6 +- darwin/future/meta/objects/base.py | 4 +- darwin/future/meta/objects/dataset.py | 13 ++- darwin/future/meta/objects/stage.py | 19 ++++- darwin/future/meta/objects/team.py | 4 +- darwin/future/meta/queries/dataset.py | 16 +++- darwin/future/meta/queries/stage.py | 10 ++- darwin/future/meta/queries/team_member.py | 10 ++- darwin/future/meta/queries/workflow.py | 63 ++++++++++++--- darwin/future/tests/core/datasets/fixtures.py | 5 +- .../core/datasets/test_create_dataset.py | 8 +- .../tests/core/datasets/test_list_datasets.py | 8 +- darwin/future/tests/core/fixtures.py | 4 +- .../future/tests/core/items/test_get_items.py | 14 +++- .../tests/core/items/test_move_items.py | 8 +- darwin/future/tests/core/test_client.py | 4 +- darwin/future/tests/core/test_query.py | 21 ++++- .../tests/core/workflows/test_get_workflow.py | 8 +- .../core/workflows/test_get_workflows.py | 4 +- .../core/workflows/test_list_workflows.py | 4 +- darwin/future/tests/data_objects/test_team.py | 32 ++++++-- .../data_objects/workflow/test_wfdataset.py | 4 +- darwin/future/tests/meta/objects/fixtures.py | 8 +- .../tests/meta/objects/test_datasetmeta.py | 21 ++++- .../tests/meta/objects/test_stagemeta.py | 40 +++++++--- .../tests/meta/objects/test_teammeta.py | 35 ++++++-- .../future/tests/meta/queries/test_dataset.py | 36 ++++++--- .../future/tests/meta/queries/test_stage.py | 42 ++++++++-- .../tests/meta/queries/test_team_member.py | 28 +++++-- .../tests/meta/queries/test_workflow.py | 80 ++++++++++++++----- darwin/future/tests/meta/test_client.py | 10 ++- pyproject.toml | 2 +- 45 files changed, 569 insertions(+), 166 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index f580f74a5..b8706a377 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,11 +13,6 @@ "editor.insertSpaces": true, "editor.tabSize": 2 }, - "python.formatting.blackPath": "black", - "python.formatting.provider": "none", - "python.formatting.blackArgs": [ - "-l 120" - ], "python.linting.mypyEnabled": true, "isort.args": [ "--profile", @@ -26,5 +21,8 @@ "python.analysis.autoImportCompletions": true, "python.testing.pytestEnabled": true, "python.linting.enabled": true, - "python.analysis.typeCheckingMode": "basic" + "python.analysis.typeCheckingMode": "basic", + "black-formatter.path": [ + "poetry run python -m black" + ] } \ No newline at end of file diff --git a/darwin/future/core/client.py b/darwin/future/core/client.py index fae7b415e..7e6d4387b 100644 --- a/darwin/future/core/client.py +++ b/darwin/future/core/client.py @@ -41,7 +41,10 @@ def validate_base_url(cls, v: str) -> str: if not v.endswith("/"): v += "/" check = urlparse(v) - assert check.scheme in {"http", "https"}, "base_url must start with http or https" + assert check.scheme in { + "http", + "https", + }, "base_url must start with http or https" assert check.netloc, "base_url must contain a domain" return v @@ -136,7 +139,9 @@ def __init__(self, config: DarwinConfig, retries: Optional[Retry] = None) -> Non self.config = config self.session = requests.Session() if not retries: - retries = Retry(total=3, backoff_factor=0.2, status_forcelist=[500, 502, 503, 504]) + retries = Retry( + total=3, backoff_factor=0.2, status_forcelist=[500, 502, 503, 504] + ) self._setup_session(retries) self._mappings = { "get": self.session.get, @@ -153,20 +158,32 @@ def _setup_session(self, retries: Retry) -> None: @property def headers(self) -> Dict[str, str]: - http_headers: Dict[str, str] = {"Content-Type": "application/json", "Accept": "application/json"} + http_headers: Dict[str, str] = { + "Content-Type": "application/json", + "Accept": "application/json", + } if self.config.api_key: http_headers["Authorization"] = f"ApiKey {self.config.api_key}" return http_headers @overload - def _generic_call(self, method: Callable[[str], requests.Response], endpoint: str) -> dict: + def _generic_call( + self, method: Callable[[str], requests.Response], endpoint: str + ) -> dict: ... @overload - def _generic_call(self, method: Callable[[str, dict], requests.Response], endpoint: str, payload: dict) -> dict: + def _generic_call( + self, + method: Callable[[str, dict], requests.Response], + endpoint: str, + payload: dict, + ) -> dict: ... - def _generic_call(self, method: Callable, endpoint: str, payload: Optional[dict] = None) -> JSONType: + def _generic_call( + self, method: Callable, endpoint: str, payload: Optional[dict] = None + ) -> JSONType: endpoint = self._sanitize_endpoint(endpoint) url = self.config.api_endpoint + endpoint if payload is not None: @@ -179,15 +196,21 @@ def _generic_call(self, method: Callable, endpoint: str, payload: Optional[dict] return response.json() - def _contain_qs_and_endpoint(self, endpoint: str, query_string: Optional[QueryString] = None) -> str: + def _contain_qs_and_endpoint( + self, endpoint: str, query_string: Optional[QueryString] = None + ) -> str: if not query_string: return endpoint assert "?" not in endpoint return endpoint + str(query_string) - def get(self, endpoint: str, query_string: Optional[QueryString] = None) -> JSONType: - return self._generic_call(self.session.get, self._contain_qs_and_endpoint(endpoint, query_string)) + def get( + self, endpoint: str, query_string: Optional[QueryString] = None + ) -> JSONType: + return self._generic_call( + self.session.get, self._contain_qs_and_endpoint(endpoint, query_string) + ) def put(self, endpoint: str, data: dict) -> JSONType: return self._generic_call(self.session.put, endpoint, data) @@ -195,8 +218,12 @@ def put(self, endpoint: str, data: dict) -> JSONType: def post(self, endpoint: str, data: dict) -> JSONType: return self._generic_call(self.session.post, endpoint, data) - def delete(self, endpoint: str, query_string: Optional[QueryString] = None) -> JSONType: - return self._generic_call(self.session.delete, self._contain_qs_and_endpoint(endpoint, query_string)) + def delete( + self, endpoint: str, query_string: Optional[QueryString] = None + ) -> JSONType: + return self._generic_call( + self.session.delete, self._contain_qs_and_endpoint(endpoint, query_string) + ) def patch(self, endpoint: str, data: dict) -> JSONType: return self._generic_call(self.session.patch, endpoint, data) diff --git a/darwin/future/core/datasets/remove_dataset.py b/darwin/future/core/datasets/remove_dataset.py index 26abd7a08..86e21de1f 100644 --- a/darwin/future/core/datasets/remove_dataset.py +++ b/darwin/future/core/datasets/remove_dataset.py @@ -4,7 +4,9 @@ from darwin.future.exceptions import DatasetNotFound -def remove_dataset(api_client: ClientCore, id: int, team_slug: Optional[str] = None) -> int: +def remove_dataset( + api_client: ClientCore, id: int, team_slug: Optional[str] = None +) -> int: """ Creates a new dataset for the given team diff --git a/darwin/future/core/items/get.py b/darwin/future/core/items/get.py index 14238eed1..37bb6fd4c 100644 --- a/darwin/future/core/items/get.py +++ b/darwin/future/core/items/get.py @@ -5,7 +5,9 @@ from darwin.future.core.types.common import QueryString -def get_item_ids(api_client: ClientCore, team_slug: str, dataset_id: Union[str, int]) -> List[UUID]: +def get_item_ids( + api_client: ClientCore, team_slug: str, dataset_id: Union[str, int] +) -> List[UUID]: """ Returns a list of item ids for the dataset @@ -26,14 +28,25 @@ def get_item_ids(api_client: ClientCore, team_slug: str, dataset_id: Union[str, response = api_client.get( f"/v2/teams/{team_slug}/items/ids", - QueryString({"not_statuses": "archived,error", "sort[id]": "desc", "dataset_ids": str(dataset_id)}), + QueryString( + { + "not_statuses": "archived,error", + "sort[id]": "desc", + "dataset_ids": str(dataset_id), + } + ), ) assert isinstance(response, dict) uuids = [UUID(uuid) for uuid in response["item_ids"]] return uuids -def get_item_ids_stage(api_client: ClientCore, team_slug: str, dataset_id: Union[int, str], stage_id: Union[UUID, str]) -> List[UUID]: +def get_item_ids_stage( + api_client: ClientCore, + team_slug: str, + dataset_id: Union[int, str], + stage_id: Union[UUID, str], +) -> List[UUID]: """ Returns a list of item ids for the stage @@ -55,7 +68,9 @@ def get_item_ids_stage(api_client: ClientCore, team_slug: str, dataset_id: Union """ response = api_client.get( f"/v2/teams/{team_slug}/items/ids", - QueryString({"workflow_stage_ids": str(stage_id), "dataset_ids": str(dataset_id)}), + QueryString( + {"workflow_stage_ids": str(stage_id), "dataset_ids": str(dataset_id)} + ), ) assert isinstance(response, dict) uuids = [UUID(uuid) for uuid in response["item_ids"]] diff --git a/darwin/future/core/items/move_items.py b/darwin/future/core/items/move_items.py index bbf4fc1a9..b28e9ab5b 100644 --- a/darwin/future/core/items/move_items.py +++ b/darwin/future/core/items/move_items.py @@ -5,7 +5,14 @@ from darwin.future.core.types.common import JSONType -def move_items_to_stage(api_client: ClientCore, team_slug: str, workflow_id: UUID, dataset_id: int, stage_id: UUID, item_ids: List[UUID]) -> JSONType: +def move_items_to_stage( + api_client: ClientCore, + team_slug: str, + workflow_id: UUID, + dataset_id: int, + stage_id: UUID, + item_ids: List[UUID], +) -> JSONType: """ Moves a list of items to a stage diff --git a/darwin/future/core/team/get_team.py b/darwin/future/core/team/get_team.py index 72317fce9..5570099ef 100644 --- a/darwin/future/core/team/get_team.py +++ b/darwin/future/core/team/get_team.py @@ -12,7 +12,9 @@ def get_team(client: ClientCore, team_slug: Optional[str] = None) -> TeamCore: return TeamCore.parse_obj(response) -def get_team_members(client: ClientCore) -> Tuple[List[TeamMemberCore], List[Exception]]: +def get_team_members( + client: ClientCore, +) -> Tuple[List[TeamMemberCore], List[Exception]]: response = client.get("/memberships") members = [] errors = [] diff --git a/darwin/future/core/types/common.py b/darwin/future/core/types/common.py index d3d112d7a..d7a665d79 100644 --- a/darwin/future/core/types/common.py +++ b/darwin/future/core/types/common.py @@ -19,8 +19,12 @@ def __get_validators__(cls): # type: ignore @classmethod def validate(cls, v: str) -> "TeamSlug": - assert len(v) < cls.max_length, f"maximum length for team slug is {cls.max_length}" - assert len(v) > cls.min_length, f"minimum length for team slug is {cls.min_length}" + assert ( + len(v) < cls.max_length + ), f"maximum length for team slug is {cls.max_length}" + assert ( + len(v) > cls.min_length + ), f"minimum length for team slug is {cls.min_length}" if not isinstance(v, str): raise TypeError("string required") modified_value = darwin_validators.parse_name(v) diff --git a/darwin/future/core/types/query.py b/darwin/future/core/types/query.py index 8c2a7a269..fca744c4f 100644 --- a/darwin/future/core/types/query.py +++ b/darwin/future/core/types/query.py @@ -52,7 +52,9 @@ class QueryFilter(DefaultDarwin): def filter_attr(self, attr: Any) -> bool: # type: ignore caster: Callable[[str], Any] = type(attr) # type: ignore - param = caster(self.param) # attempt to cast the param to the type of the attribute + param = caster( + self.param + ) # attempt to cast the param to the type of the attribute if self.modifier is None: return attr == param elif self.modifier == Modifier.GREATER_EQUAL: @@ -73,7 +75,9 @@ def filter_attr(self, attr: Any) -> bool: # type: ignore @classmethod def _from_dict(cls, d: Dict[str, Any]) -> QueryFilter: # type: ignore if "name" not in d or "param" not in d: - raise InvalidQueryFilter(f"args must be a QueryFilter or a dict with 'name' and 'param' keys, got {d}") + raise InvalidQueryFilter( + f"args must be a QueryFilter or a dict with 'name' and 'param' keys, got {d}" + ) modifier = Modifier(d["modifier"]) if "modifier" in d else None return QueryFilter(name=d["name"], param=str(d["param"]), modifier=modifier) @@ -93,7 +97,9 @@ def _from_arg(cls, arg: object) -> QueryFilter: elif isinstance(arg, dict): return cls._from_dict(arg) else: - raise InvalidQueryFilter(f"args must be a QueryFilter or a dict with 'name' and 'param' keys, got {arg}") + raise InvalidQueryFilter( + f"args must be a QueryFilter or a dict with 'name' and 'param' keys, got {arg}" + ) @classmethod def _from_kwarg(cls, key: str, value: str) -> QueryFilter: @@ -114,7 +120,12 @@ class Query(Generic[T], ABC): _generic_execute_filter: Executes a filter on a list of objects """ - def __init__(self, client: ClientCore, filters: Optional[List[QueryFilter]] = None, meta_params: Optional[Param] = None): + def __init__( + self, + client: ClientCore, + filters: Optional[List[QueryFilter]] = None, + meta_params: Optional[Param] = None, + ): self.meta_params: dict = meta_params or {} self.client = client self.filters = filters or [] @@ -126,11 +137,17 @@ def filter(self, filter: QueryFilter) -> Query[T]: def __add__(self, filter: QueryFilter) -> Query[T]: self._changed_since_last = True - return self.__class__(self.client, filters=[*self.filters, filter], meta_params=self.meta_params) + return self.__class__( + self.client, filters=[*self.filters, filter], meta_params=self.meta_params + ) def __sub__(self, filter: QueryFilter) -> Query[T]: self._changed_since_last = True - return self.__class__(self.client, filters=[f for f in self.filters if f != filter], meta_params=self.meta_params) + return self.__class__( + self.client, + filters=[f for f in self.filters if f != filter], + meta_params=self.meta_params, + ) def __iadd__(self, filter: QueryFilter) -> Query[T]: self.filters.append(filter) @@ -206,4 +223,6 @@ def first(self) -> Optional[T]: return self.results[0] def _generic_execute_filter(self, objects: List[T], filter: QueryFilter) -> List[T]: - return [m for m in objects if filter.filter_attr(getattr(m._element, filter.name))] + return [ + m for m in objects if filter.filter_attr(getattr(m._element, filter.name)) + ] diff --git a/darwin/future/core/utils/pathutils.py b/darwin/future/core/utils/pathutils.py index 5ad6eda90..68f5734ec 100644 --- a/darwin/future/core/utils/pathutils.py +++ b/darwin/future/core/utils/pathutils.py @@ -29,7 +29,9 @@ def attempt_open(path: Path) -> dict: return open_json(path, encoding) except Exception: pass - raise UnrecognizableFileEncoding(f"Unable to load file {path} with any encodings: {ENCODINGS}") + raise UnrecognizableFileEncoding( + f"Unable to load file {path} with any encodings: {ENCODINGS}" + ) def open_yaml(path: Path, encoding: Optional[str] = None) -> dict: diff --git a/darwin/future/core/workflows/get_workflow.py b/darwin/future/core/workflows/get_workflow.py index 16763e467..0afca7047 100644 --- a/darwin/future/core/workflows/get_workflow.py +++ b/darwin/future/core/workflows/get_workflow.py @@ -6,7 +6,9 @@ from darwin.future.data_objects.workflow import WorkflowCore -def get_workflow(client: ClientCore, workflow_id: str, team_slug: Optional[str] = None) -> Tuple[Optional[WorkflowCore], List[Exception]]: +def get_workflow( + client: ClientCore, workflow_id: str, team_slug: Optional[str] = None +) -> Tuple[Optional[WorkflowCore], List[Exception]]: workflow: Optional[WorkflowCore] = None exceptions: List[Exception] = [] diff --git a/darwin/future/core/workflows/get_workflows.py b/darwin/future/core/workflows/get_workflows.py index 8664d1f74..97805f131 100644 --- a/darwin/future/core/workflows/get_workflows.py +++ b/darwin/future/core/workflows/get_workflows.py @@ -6,7 +6,9 @@ from darwin.future.data_objects.workflow import WorkflowCore -def get_workflows(client: ClientCore, team_slug: Optional[str] = None) -> List[WorkflowCore]: +def get_workflows( + client: ClientCore, team_slug: Optional[str] = None +) -> List[WorkflowCore]: team_slug = team_slug or client.config.default_team response = client.get(f"/v2/teams/{team_slug}/workflows?worker=false") diff --git a/darwin/future/core/workflows/list_workflows.py b/darwin/future/core/workflows/list_workflows.py index a1013d234..9b9cf8ec6 100644 --- a/darwin/future/core/workflows/list_workflows.py +++ b/darwin/future/core/workflows/list_workflows.py @@ -5,7 +5,9 @@ from darwin.future.data_objects.workflow import WorkflowCore, WorkflowListValidator -def list_workflows(client: ClientCore, team_slug: Optional[str] = None) -> Tuple[List[WorkflowCore], List[Exception]]: +def list_workflows( + client: ClientCore, team_slug: Optional[str] = None +) -> Tuple[List[WorkflowCore], List[Exception]]: """ Returns a list of workflows for the given team @@ -27,7 +29,9 @@ def list_workflows(client: ClientCore, team_slug: Optional[str] = None) -> Tuple team_slug = team_slug or client.config.default_team response = client.get(f"/v2/teams/{team_slug}/workflows?worker=false") list_of_workflows = WorkflowListValidator(list=response) # type: ignore - workflows = [WorkflowCore.parse_obj(workflow) for workflow in list_of_workflows.list] + workflows = [ + WorkflowCore.parse_obj(workflow) for workflow in list_of_workflows.list + ] except Exception as e: exceptions.append(e) diff --git a/darwin/future/data_objects/workflow.py b/darwin/future/data_objects/workflow.py index 0af79c14f..47e4d2d11 100644 --- a/darwin/future/data_objects/workflow.py +++ b/darwin/future/data_objects/workflow.py @@ -59,7 +59,9 @@ class WFEdgeCore(DefaultDarwin): @root_validator(pre=True) def _one_or_both_must_exist(cls, values: dict) -> dict: if not values["source_stage_id"] and not values["target_stage_id"]: - raise ValueError("One or both of source_stage_id and target_stage_id must be defined") + raise ValueError( + "One or both of source_stage_id and target_stage_id must be defined" + ) return values diff --git a/darwin/future/helpers/assertion.py b/darwin/future/helpers/assertion.py index 5cecf467c..04c5a71c5 100644 --- a/darwin/future/helpers/assertion.py +++ b/darwin/future/helpers/assertion.py @@ -1,6 +1,10 @@ from typing import Type -def assert_is(conditional: bool, message: str, exception_factory: Type[BaseException] = AssertionError) -> None: +def assert_is( + conditional: bool, + message: str, + exception_factory: Type[BaseException] = AssertionError, +) -> None: if not conditional: raise exception_factory(message) diff --git a/darwin/future/meta/objects/base.py b/darwin/future/meta/objects/base.py index 7a9b84624..317ed388e 100644 --- a/darwin/future/meta/objects/base.py +++ b/darwin/future/meta/objects/base.py @@ -13,7 +13,9 @@ class MetaBase(Generic[R]): _element: R client: ClientCore - def __init__(self, client: ClientCore, element: R, meta_params: Optional[Param] = None) -> None: + def __init__( + self, client: ClientCore, element: R, meta_params: Optional[Param] = None + ) -> None: self.client = client self._element = element self.meta_params = meta_params or {} diff --git a/darwin/future/meta/objects/dataset.py b/darwin/future/meta/objects/dataset.py index 9854efc0f..80c636473 100644 --- a/darwin/future/meta/objects/dataset.py +++ b/darwin/future/meta/objects/dataset.py @@ -47,8 +47,12 @@ def item_ids(self) -> List[UUID]: List[UUID]: A list of item ids """ assert self._element.id is not None - assert self.meta_params["team_slug"] is not None and isinstance(self.meta_params["team_slug"], str) - return get_item_ids(self.client, self.meta_params["team_slug"], str(self._element.id)) + assert self.meta_params["team_slug"] is not None and isinstance( + self.meta_params["team_slug"], str + ) + return get_item_ids( + self.client, self.meta_params["team_slug"], str(self._element.id) + ) @classmethod def create_dataset(cls, client: ClientCore, slug: str) -> DatasetCore: @@ -106,7 +110,10 @@ def _validate_slug(slug: str) -> None: assert_is(len(slug_copy) > 0, "slug must not be empty") VALID_SLUG_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" - assert_is(all(c in VALID_SLUG_CHARS for c in slug_copy), "slug must only contain valid characters") + assert_is( + all(c in VALID_SLUG_CHARS for c in slug_copy), + "slug must only contain valid characters", + ) def upload_files( self, diff --git a/darwin/future/meta/objects/stage.py b/darwin/future/meta/objects/stage.py index 663cfc019..0cec82431 100644 --- a/darwin/future/meta/objects/stage.py +++ b/darwin/future/meta/objects/stage.py @@ -23,12 +23,23 @@ def item_ids(self) -> List[UUID]: List[UUID]: List of item ids """ assert self._element.id is not None - return get_item_ids_stage(self.client, str(self.meta_params["team_slug"]), str(self.meta_params["dataset_id"]), self.id) + return get_item_ids_stage( + self.client, + str(self.meta_params["team_slug"]), + str(self.meta_params["dataset_id"]), + self.id, + ) def move_attached_files_to_stage(self, new_stage_id: UUID) -> Stage: - assert self.meta_params["team_slug"] is not None and isinstance(self.meta_params["team_slug"], str) - assert self.meta_params["workflow_id"] is not None and isinstance(self.meta_params["workflow_id"], UUID) - assert self.meta_params["dataset_id"] is not None and isinstance(self.meta_params["dataset_id"], int) + assert self.meta_params["team_slug"] is not None and isinstance( + self.meta_params["team_slug"], str + ) + assert self.meta_params["workflow_id"] is not None and isinstance( + self.meta_params["workflow_id"], UUID + ) + assert self.meta_params["dataset_id"] is not None and isinstance( + self.meta_params["dataset_id"], int + ) slug, w_id, d_id = ( self.meta_params["team_slug"], self.meta_params["workflow_id"], diff --git a/darwin/future/meta/objects/team.py b/darwin/future/meta/objects/team.py index c7fa76feb..bbc169894 100644 --- a/darwin/future/meta/objects/team.py +++ b/darwin/future/meta/objects/team.py @@ -60,7 +60,9 @@ def __str__(self) -> str: return f"TeamMeta(name='{self.name}', slug='{self.slug}', id='{self.id}' - {len(self._element.members if self._element.members else [])} members)" @classmethod - def delete_dataset(cls, client: ClientCore, dataset_id: Union[int, str]) -> Tuple[Optional[List[Exception]], int]: + def delete_dataset( + cls, client: ClientCore, dataset_id: Union[int, str] + ) -> Tuple[Optional[List[Exception]], int]: """ Deletes a dataset by id or slug diff --git a/darwin/future/meta/queries/dataset.py b/darwin/future/meta/queries/dataset.py index 143aaaae9..c87b8d915 100644 --- a/darwin/future/meta/queries/dataset.py +++ b/darwin/future/meta/queries/dataset.py @@ -23,7 +23,9 @@ def _collect(self) -> List[Dataset]: if exceptions: # TODO: print and or raise exceptions, tbd how we want to handle this pass - datasets_meta = [Dataset(self.client, dataset, self.meta_params) for dataset in datasets] + datasets_meta = [ + Dataset(self.client, dataset, self.meta_params) for dataset in datasets + ] if not self.filters: self.filters = [] @@ -32,7 +34,9 @@ def _collect(self) -> List[Dataset]: return datasets_meta - def _execute_filters(self, datasets: List[Dataset], filter: QueryFilter) -> List[Dataset]: + def _execute_filters( + self, datasets: List[Dataset], filter: QueryFilter + ) -> List[Dataset]: """Executes filtering on the local list of datasets, applying special logic for role filtering otherwise calls the parent method for general filtering on the values of the datasets @@ -47,6 +51,12 @@ def _execute_filters(self, datasets: List[Dataset], filter: QueryFilter) -> List """ if filter.name == "releases": - return [d for d in datasets if d._element is not None and d._element.releases and filter.param in [str(r) for r in d._element.releases]] + return [ + d + for d in datasets + if d._element is not None + and d._element.releases + and filter.param in [str(r) for r in d._element.releases] + ] return super()._generic_execute_filter(datasets, filter) diff --git a/darwin/future/meta/queries/stage.py b/darwin/future/meta/queries/stage.py index 37fe042c8..7211bb5d5 100644 --- a/darwin/future/meta/queries/stage.py +++ b/darwin/future/meta/queries/stage.py @@ -16,7 +16,9 @@ def _collect(self) -> List[Stage]: meta_params = self.meta_params workflow, exceptions = get_workflow(self.client, str(workflow_id)) assert workflow is not None - stages = [Stage(self.client, s, meta_params=meta_params) for s in workflow.stages] + stages = [ + Stage(self.client, s, meta_params=meta_params) for s in workflow.stages + ] if not self.filters: self.filters = [] for filter in self.filters: @@ -35,5 +37,9 @@ def _execute_filter(self, stages: List[Stage], filter: QueryFilter) -> List[Stag List[Stage]: Filtered subset of stages """ if filter.name == "role": - return [s for s in stages if s._element is not None and filter.filter_attr(s._element.type.value)] + return [ + s + for s in stages + if s._element is not None and filter.filter_attr(s._element.type.value) + ] return super()._generic_execute_filter(stages, filter) diff --git a/darwin/future/meta/queries/team_member.py b/darwin/future/meta/queries/team_member.py index 4d38ead0d..f6eaba922 100644 --- a/darwin/future/meta/queries/team_member.py +++ b/darwin/future/meta/queries/team_member.py @@ -27,7 +27,9 @@ def _collect(self) -> List[TeamMember]: return members_meta - def _execute_filter(self, members: List[TeamMember], filter: QueryFilter) -> List[TeamMember]: + def _execute_filter( + self, members: List[TeamMember], filter: QueryFilter + ) -> List[TeamMember]: """Executes filtering on the local list of members, applying special logic for role filtering otherwise calls the parent method for general filtering on the values of the members @@ -41,6 +43,10 @@ def _execute_filter(self, members: List[TeamMember], filter: QueryFilter) -> Lis List[TeamMember]: Filtered subset of members """ if filter.name == "role": - return [m for m in members if m._element is not None and filter.filter_attr(m._element.role.value)] + return [ + m + for m in members + if m._element is not None and filter.filter_attr(m._element.role.value) + ] else: return super()._generic_execute_filter(members, filter) diff --git a/darwin/future/meta/queries/workflow.py b/darwin/future/meta/queries/workflow.py index 344d36064..75c3a6442 100644 --- a/darwin/future/meta/queries/workflow.py +++ b/darwin/future/meta/queries/workflow.py @@ -26,7 +26,10 @@ def _collect(self) -> List[Workflow]: if exceptions: handle_exception(exceptions) raise DarwinException from exceptions[0] - workflows = [Workflow(self.client, workflow, self.meta_params) for workflow in workflows_core] + workflows = [ + Workflow(self.client, workflow, self.meta_params) + for workflow in workflows_core + ] if not self.filters: return workflows @@ -35,38 +38,76 @@ def _collect(self) -> List[Workflow]: return workflows - def _execute_filters(self, workflows: List[Workflow], filter: QueryFilter) -> List[Workflow]: + def _execute_filters( + self, workflows: List[Workflow], filter: QueryFilter + ) -> List[Workflow]: if filter.name == "id": id_to_find = UUID(filter.param) return [w for w in workflows if w.id == id_to_find] if filter.name == "inserted_at_start": start_date = datetime.fromisoformat(filter.param) - return [w for w in workflows if w._element is not None and self._date_compare(w._element.inserted_at, start_date)] + return [ + w + for w in workflows + if w._element is not None + and self._date_compare(w._element.inserted_at, start_date) + ] if filter.name == "inserted_at_end": end_date = datetime.fromisoformat(filter.param) - return [w for w in workflows if w._element is not None and self._date_compare(end_date, w._element.inserted_at)] + return [ + w + for w in workflows + if w._element is not None + and self._date_compare(end_date, w._element.inserted_at) + ] if filter.name == "updated_at_start": start_date = datetime.fromisoformat(filter.param) - return [w for w in workflows if w._element is not None and self._date_compare(w._element.updated_at, start_date)] + return [ + w + for w in workflows + if w._element is not None + and self._date_compare(w._element.updated_at, start_date) + ] if filter.name == "updated_at_end": end_date = datetime.fromisoformat(filter.param) - return [w for w in workflows if w._element is not None and self._date_compare(end_date, w._element.updated_at)] + return [ + w + for w in workflows + if w._element is not None + and self._date_compare(end_date, w._element.updated_at) + ] if filter.name == "dataset_id": datasets_to_find_id: List[int] = [int(s) for s in filter.param.split(",")] - return [w for w in workflows if w._element is not None and w._element.dataset is not None and int(w._element.dataset.id) in datasets_to_find_id] + return [ + w + for w in workflows + if w._element is not None + and w._element.dataset is not None + and int(w._element.dataset.id) in datasets_to_find_id + ] if filter.name == "dataset_name": datasets_to_find_name: List[str] = [str(s) for s in filter.param.split(",")] - return [w for w in workflows if w._element is not None and str(w._element.dataset) in datasets_to_find_name] + return [ + w + for w in workflows + if w._element is not None + and str(w._element.dataset) in datasets_to_find_name + ] if filter.name == "has_stages": stages_to_find = list(filter.param.split(",")) - return [w for w in workflows if w._element is not None and self._stages_contains(w._element.stages, stages_to_find)] + return [ + w + for w in workflows + if w._element is not None + and self._stages_contains(w._element.stages, stages_to_find) + ] return self._generic_execute_filter(workflows, filter) @@ -75,6 +116,8 @@ def _date_compare(cls, date1: datetime, date2: datetime) -> bool: return date1.astimezone(timezone.utc) >= date2.astimezone(timezone.utc) @classmethod - def _stages_contains(cls, stages: List[WFStageCore], stages_to_find: List[str]) -> bool: + def _stages_contains( + cls, stages: List[WFStageCore], stages_to_find: List[str] + ) -> bool: stage_ids = [str(s.id) for s in stages] return any(stage_to_find in stage_ids for stage_to_find in stages_to_find) diff --git a/darwin/future/tests/core/datasets/fixtures.py b/darwin/future/tests/core/datasets/fixtures.py index bbf044840..0f9489544 100644 --- a/darwin/future/tests/core/datasets/fixtures.py +++ b/darwin/future/tests/core/datasets/fixtures.py @@ -81,4 +81,7 @@ def happy_get_client() -> ClientCore: @fixture def sad_client_pydantic() -> ClientCore: - return MagicMock(ClientCore, side_effect=ValidationError(["error1", "error2", "error3"], model=BaseModel)) + return MagicMock( + ClientCore, + side_effect=ValidationError(["error1", "error2", "error3"], model=BaseModel), + ) diff --git a/darwin/future/tests/core/datasets/test_create_dataset.py b/darwin/future/tests/core/datasets/test_create_dataset.py index ac83ef7d4..26630ac44 100644 --- a/darwin/future/tests/core/datasets/test_create_dataset.py +++ b/darwin/future/tests/core/datasets/test_create_dataset.py @@ -10,7 +10,9 @@ from .fixtures import * # noqa: F401, F403 -def test_it_creates_a_dataset(basic_dataset: DatasetCore, base_client: ClientCore) -> None: +def test_it_creates_a_dataset( + basic_dataset: DatasetCore, base_client: ClientCore +) -> None: with responses.RequestsMock() as rsps: rsps.add( rsps.POST, @@ -24,7 +26,9 @@ def test_it_creates_a_dataset(basic_dataset: DatasetCore, base_client: ClientCor assert dataset.slug == "1337" -def test_it_raises_an_error_on_http_error(basic_dataset: DatasetCore, base_client: ClientCore) -> None: +def test_it_raises_an_error_on_http_error( + basic_dataset: DatasetCore, base_client: ClientCore +) -> None: with raises(HTTPError): with responses.RequestsMock() as rsps: rsps.add( diff --git a/darwin/future/tests/core/datasets/test_list_datasets.py b/darwin/future/tests/core/datasets/test_list_datasets.py index 641b7331f..a4c7ac4a2 100644 --- a/darwin/future/tests/core/datasets/test_list_datasets.py +++ b/darwin/future/tests/core/datasets/test_list_datasets.py @@ -11,7 +11,9 @@ from .fixtures import * -def test_it_lists_datasets(base_client: ClientCore, basic_list_of_datasets: List[DatasetCore]) -> None: +def test_it_lists_datasets( + base_client: ClientCore, basic_list_of_datasets: List[DatasetCore] +) -> None: with responses.RequestsMock() as rsps: rsps.add( rsps.GET, @@ -29,7 +31,9 @@ def test_it_lists_datasets(base_client: ClientCore, basic_list_of_datasets: List assert datasets[0].slug == "1337" -def test_it_returns_an_error_if_the_client_returns_an_http_error(base_client: ClientCore) -> None: +def test_it_returns_an_error_if_the_client_returns_an_http_error( + base_client: ClientCore, +) -> None: with responses.RequestsMock() as rsps: rsps.add( rsps.GET, diff --git a/darwin/future/tests/core/fixtures.py b/darwin/future/tests/core/fixtures.py index 00f167367..0d4782134 100644 --- a/darwin/future/tests/core/fixtures.py +++ b/darwin/future/tests/core/fixtures.py @@ -127,7 +127,9 @@ def transform_dataset(dataset_json_dict: dict, id: int) -> dict: dataset["id"] = id dataset["slug"] = f"{dataset['slug']}-{id}" dataset["name"] = f"{dataset['name']} {id}" - dataset["releases"] = [{"name": "release2"}] if id % 2 == 0 else [{"name": "release1"}] + dataset["releases"] = ( + [{"name": "release2"}] if id % 2 == 0 else [{"name": "release1"}] + ) return dataset diff --git a/darwin/future/tests/core/items/test_get_items.py b/darwin/future/tests/core/items/test_get_items.py index 001771c72..e2af43eba 100644 --- a/darwin/future/tests/core/items/test_get_items.py +++ b/darwin/future/tests/core/items/test_get_items.py @@ -9,11 +9,14 @@ from darwin.future.tests.core.items.fixtures import * -def test_get_item_ids(UUIDs: List[UUID], UUIDs_str: List[str], base_client: ClientCore) -> None: +def test_get_item_ids( + UUIDs: List[UUID], UUIDs_str: List[str], base_client: ClientCore +) -> None: with responses.RequestsMock() as rsps: rsps.add( rsps.GET, - base_client.config.api_endpoint + "v2/teams/default-team/items/ids?not_statuses=archived,error&sort[id]=desc&dataset_ids=1337", + base_client.config.api_endpoint + + "v2/teams/default-team/items/ids?not_statuses=archived,error&sort[id]=desc&dataset_ids=1337", json={"item_ids": UUIDs_str}, status=200, ) @@ -21,12 +24,15 @@ def test_get_item_ids(UUIDs: List[UUID], UUIDs_str: List[str], base_client: Clie assert item_ids == UUIDs -def test_get_item_ids_stage(UUIDs: List[UUID], UUIDs_str: List[str], base_client: ClientCore) -> None: +def test_get_item_ids_stage( + UUIDs: List[UUID], UUIDs_str: List[str], base_client: ClientCore +) -> None: stage_id = str(uuid4()) with responses.RequestsMock() as rsps: rsps.add( rsps.GET, - base_client.config.api_endpoint + f"v2/teams/default-team/items/ids?workflow_stage_ids={stage_id}&dataset_ids=1337", + base_client.config.api_endpoint + + f"v2/teams/default-team/items/ids?workflow_stage_ids={stage_id}&dataset_ids=1337", json={"item_ids": UUIDs_str}, status=200, ) diff --git a/darwin/future/tests/core/items/test_move_items.py b/darwin/future/tests/core/items/test_move_items.py index 370b61380..f9c357c76 100644 --- a/darwin/future/tests/core/items/test_move_items.py +++ b/darwin/future/tests/core/items/test_move_items.py @@ -37,5 +37,9 @@ def test_move_items( json={"success": UUIDs_str}, status=200, ) - move_items_to_stage(base_client, "default-team", workflow_id, 1337, stage_id, UUIDs) - assert rsps.assert_call_count(base_client.config.api_endpoint + "v2/teams/default-team/items/stage", 1) + move_items_to_stage( + base_client, "default-team", workflow_id, 1337, stage_id, UUIDs + ) + assert rsps.assert_call_count( + base_client.config.api_endpoint + "v2/teams/default-team/items/stage", 1 + ) diff --git a/darwin/future/tests/core/test_client.py b/darwin/future/tests/core/test_client.py index 4881dad2a..6b5195698 100644 --- a/darwin/future/tests/core/test_client.py +++ b/darwin/future/tests/core/test_client.py @@ -91,7 +91,9 @@ def test_client(base_client: ClientCore) -> None: "status_code, exception", [(401, Unauthorized), (404, NotFound)], ) -def test_client_raises_darwin(status_code: int, exception: DarwinException, base_client: ClientCore) -> None: +def test_client_raises_darwin( + status_code: int, exception: DarwinException, base_client: ClientCore +) -> None: endpoint = base_client.config.api_endpoint + "test_endpoint" with responses.RequestsMock() as rsps: rsps.add(responses.GET, endpoint, json={"test": "test"}, status=status_code) diff --git a/darwin/future/tests/core/test_query.py b/darwin/future/tests/core/test_query.py index c90dacddf..77fd612ab 100644 --- a/darwin/future/tests/core/test_query.py +++ b/darwin/future/tests/core/test_query.py @@ -33,12 +33,20 @@ def test_team() -> TeamCore: return TeamCore(name="test-team", slug="test-team", id=0) -def test_query_instantiated(base_client: ClientCore, basic_filters: List[Query.QueryFilter], non_abc_query: Type[Query.Query]) -> None: +def test_query_instantiated( + base_client: ClientCore, + basic_filters: List[Query.QueryFilter], + non_abc_query: Type[Query.Query], +) -> None: q = non_abc_query(base_client, basic_filters) assert q.filters == basic_filters -def test_query_filter_functionality(base_client: ClientCore, basic_filters: List[Query.QueryFilter], non_abc_query: Type[Query.Query]) -> None: +def test_query_filter_functionality( + base_client: ClientCore, + basic_filters: List[Query.QueryFilter], + non_abc_query: Type[Query.Query], +) -> None: q = non_abc_query(base_client) for f in basic_filters: q = q.filter(f) @@ -94,7 +102,10 @@ def test_query_filter_filters(mod: Optional[str], param: Any, check: Any, expect def test_QF_from_asteriks() -> None: # Builds with dictionary args - QF = Query.QueryFilter._from_args({"name": "test", "param": "test"}, {"name": "test2", "param": "test2", "modifier": "!="}) + QF = Query.QueryFilter._from_args( + {"name": "test", "param": "test"}, + {"name": "test2", "param": "test2", "modifier": "!="}, + ) assert len(QF) == 2 assert QF[0].name == "test" assert QF[0].param == "test" @@ -127,7 +138,9 @@ def test_query_first(non_abc_query: Type[Query.Query], base_client: ClientCore) assert first == 1 -def test_query_collect_one(non_abc_query: Type[Query.Query], base_client: ClientCore) -> None: +def test_query_collect_one( + non_abc_query: Type[Query.Query], base_client: ClientCore +) -> None: query = non_abc_query(base_client) query.results = [1, 2, 3] with pytest.raises(MoreThanOneResultFound): diff --git a/darwin/future/tests/core/workflows/test_get_workflow.py b/darwin/future/tests/core/workflows/test_get_workflow.py index f6197ae16..f63119092 100644 --- a/darwin/future/tests/core/workflows/test_get_workflow.py +++ b/darwin/future/tests/core/workflows/test_get_workflow.py @@ -10,7 +10,9 @@ @responses.activate -def test_get_workflow(base_client: ClientCore, base_single_workflow_object: JSONType) -> None: +def test_get_workflow( + base_client: ClientCore, base_single_workflow_object: JSONType +) -> None: # Mocking the response using responses library response_data = base_single_workflow_object workflow_id = "1" @@ -30,7 +32,9 @@ def test_get_workflow(base_client: ClientCore, base_single_workflow_object: JSON @responses.activate -def test_get_workflow_with_team_slug(base_client: ClientCore, base_single_workflow_object: JSONType) -> None: +def test_get_workflow_with_team_slug( + base_client: ClientCore, base_single_workflow_object: JSONType +) -> None: # Mocking the response using responses library team_slug = "team-slug" workflow_id = "1" diff --git a/darwin/future/tests/core/workflows/test_get_workflows.py b/darwin/future/tests/core/workflows/test_get_workflows.py index 0c6fb751e..9400c3658 100644 --- a/darwin/future/tests/core/workflows/test_get_workflows.py +++ b/darwin/future/tests/core/workflows/test_get_workflows.py @@ -33,7 +33,9 @@ def test_get_workflows(base_client: ClientCore, base_workflows_object: str) -> N @responses.activate -def test_get_workflows_with_team_slug(base_client: ClientCore, base_workflows_object: JSONType) -> None: +def test_get_workflows_with_team_slug( + base_client: ClientCore, base_workflows_object: JSONType +) -> None: # Mocking the response using responses library team_slug = "team-slug" response_data = base_workflows_object diff --git a/darwin/future/tests/core/workflows/test_list_workflows.py b/darwin/future/tests/core/workflows/test_list_workflows.py index 2f4dda31f..23daf0ace 100644 --- a/darwin/future/tests/core/workflows/test_list_workflows.py +++ b/darwin/future/tests/core/workflows/test_list_workflows.py @@ -34,7 +34,9 @@ def test_list_workflows(base_client: ClientCore, base_workflows_object: str) -> @responses.activate -def test_list_workflows_with_team_slug(base_client: ClientCore, base_workflows_object: JSONType) -> None: +def test_list_workflows_with_team_slug( + base_client: ClientCore, base_workflows_object: JSONType +) -> None: # Mocking the response using responses library team_slug = "team-slug" response_data = base_workflows_object diff --git a/darwin/future/tests/data_objects/test_team.py b/darwin/future/tests/data_objects/test_team.py index 635f591ce..44008880d 100644 --- a/darwin/future/tests/data_objects/test_team.py +++ b/darwin/future/tests/data_objects/test_team.py @@ -9,7 +9,9 @@ from darwin.future.tests.fixtures import * -def test_get_team_returns_valid_team(base_client: ClientCore, base_team_json: dict, base_team: TeamCore) -> None: +def test_get_team_returns_valid_team( + base_client: ClientCore, base_team_json: dict, base_team: TeamCore +) -> None: slug = "test-slug" endpoint = base_client.config.api_endpoint + f"teams/{slug}" with responses.RequestsMock() as rsps: @@ -19,7 +21,9 @@ def test_get_team_returns_valid_team(base_client: ClientCore, base_team_json: di assert team == base_team -def test_get_team_fails_on_incorrect_input(base_client: ClientCore, base_team: TeamCore) -> None: +def test_get_team_fails_on_incorrect_input( + base_client: ClientCore, base_team: TeamCore +) -> None: slug = "test-slug" endpoint = base_client.config.api_endpoint + f"teams/{slug}" with responses.RequestsMock() as rsps: @@ -29,11 +33,18 @@ def test_get_team_fails_on_incorrect_input(base_client: ClientCore, base_team: T get_team(base_client, slug) -def test_get_team_members_returns_valid_list(base_client: ClientCore, base_team_member_json: dict) -> None: - synthetic_list = [TeamMemberCore.parse_obj(base_team_member_json), TeamMemberCore.parse_obj(base_team_member_json)] +def test_get_team_members_returns_valid_list( + base_client: ClientCore, base_team_member_json: dict +) -> None: + synthetic_list = [ + TeamMemberCore.parse_obj(base_team_member_json), + TeamMemberCore.parse_obj(base_team_member_json), + ] endpoint = base_client.config.api_endpoint + "memberships" with responses.RequestsMock() as rsps: - rsps.add(responses.GET, endpoint, json=[base_team_member_json, base_team_member_json]) + rsps.add( + responses.GET, endpoint, json=[base_team_member_json, base_team_member_json] + ) members, errors = get_team_members(base_client) assert len(members) == 2 @@ -41,7 +52,9 @@ def test_get_team_members_returns_valid_list(base_client: ClientCore, base_team_ assert members == synthetic_list -def test_get_team_members_fails_on_incorrect_input(base_client: ClientCore, base_team_member_json: dict) -> None: +def test_get_team_members_fails_on_incorrect_input( + base_client: ClientCore, base_team_member_json: dict +) -> None: endpoint = base_client.config.api_endpoint + "memberships" with responses.RequestsMock() as rsps: rsps.add(responses.GET, endpoint, json=[base_team_member_json, {}]) @@ -53,11 +66,14 @@ def test_get_team_members_fails_on_incorrect_input(base_client: ClientCore, base assert isinstance(members[0], TeamMemberCore) -def test_team_from_client(base_client: ClientCore, base_team_json: dict, base_team: TeamCore) -> None: +def test_team_from_client( + base_client: ClientCore, base_team_json: dict, base_team: TeamCore +) -> None: with responses.RequestsMock() as rsps: rsps.add( responses.GET, - base_client.config.api_endpoint + f"teams/{base_client.config.default_team}", + base_client.config.api_endpoint + + f"teams/{base_client.config.default_team}", json=base_team_json, ) diff --git a/darwin/future/tests/data_objects/workflow/test_wfdataset.py b/darwin/future/tests/data_objects/workflow/test_wfdataset.py index 0126853dd..32e783b5b 100644 --- a/darwin/future/tests/data_objects/workflow/test_wfdataset.py +++ b/darwin/future/tests/data_objects/workflow/test_wfdataset.py @@ -54,4 +54,6 @@ def test_sad_paths() -> None: working_dataset[key] = InvalidValueForTest() WFDatasetCore.parse_obj(working_dataset) - assert str(excinfo.value).startswith(f"1 validation error for WFDatasetCore\n{key}") + assert str(excinfo.value).startswith( + f"1 validation error for WFDatasetCore\n{key}" + ) diff --git a/darwin/future/tests/meta/objects/fixtures.py b/darwin/future/tests/meta/objects/fixtures.py index 665f2c136..a4a75c14f 100644 --- a/darwin/future/tests/meta/objects/fixtures.py +++ b/darwin/future/tests/meta/objects/fixtures.py @@ -25,12 +25,16 @@ def base_meta_team(base_client: ClientCore, base_team: TeamCore) -> Team: @fixture -def base_meta_workflow(base_client: ClientCore, base_workflow: WorkflowCore) -> Workflow: +def base_meta_workflow( + base_client: ClientCore, base_workflow: WorkflowCore +) -> Workflow: return Workflow(base_client, base_workflow) @fixture -def base_meta_stage(base_client: ClientCore, base_stage: WFStageCore, base_UUID: UUID) -> Stage: +def base_meta_stage( + base_client: ClientCore, base_stage: WFStageCore, base_UUID: UUID +) -> Stage: return Stage(base_client, base_stage) diff --git a/darwin/future/tests/meta/objects/test_datasetmeta.py b/darwin/future/tests/meta/objects/test_datasetmeta.py index 855fc53f6..47c3c71e4 100644 --- a/darwin/future/tests/meta/objects/test_datasetmeta.py +++ b/darwin/future/tests/meta/objects/test_datasetmeta.py @@ -29,7 +29,9 @@ def test_create_dataset_raises_HTTPError(base_config: DarwinConfig) -> None: Dataset.create_dataset(valid_client, valid_slug) -def test_create_dataset_returns_dataset_created_if_dataset_created(base_config: DarwinConfig) -> None: +def test_create_dataset_returns_dataset_created_if_dataset_created( + base_config: DarwinConfig, +) -> None: valid_client = Client(base_config) valid_slug = "test_dataset" @@ -57,9 +59,16 @@ def test_create_dataset_returns_dataset_created_if_dataset_created(base_config: @mark.parametrize( "invalid_slug", - ["", " ", "test dataset", *[f"dataset_{c}" for c in string.punctuation if c not in ["-", "_", "."]]], + [ + "", + " ", + "test dataset", + *[f"dataset_{c}" for c in string.punctuation if c not in ["-", "_", "."]], + ], ) -def test_validate_slugh_raises_exception_if_passed_invalid_inputs(invalid_slug: str) -> None: +def test_validate_slugh_raises_exception_if_passed_invalid_inputs( + invalid_slug: str, +) -> None: with raises(AssertionError): Dataset._validate_slug(invalid_slug) @@ -76,7 +85,11 @@ def test_delete(base_meta_dataset: Dataset, base_config: DarwinConfig) -> None: rsps.add( rsps.PUT, base_url + f"/{base_meta_dataset.id}/archive", - json={"id": base_meta_dataset.id, "name": "Test Dataset", "slug": "test_dataset"}, + json={ + "id": base_meta_dataset.id, + "name": "Test Dataset", + "slug": "test_dataset", + }, status=200, ) dataset_deleted = base_meta_dataset.delete() diff --git a/darwin/future/tests/meta/objects/test_stagemeta.py b/darwin/future/tests/meta/objects/test_stagemeta.py index 79ad223ff..9a1d24c7d 100644 --- a/darwin/future/tests/meta/objects/test_stagemeta.py +++ b/darwin/future/tests/meta/objects/test_stagemeta.py @@ -19,19 +19,34 @@ def uuid_str() -> str: @fixture def base_WFStage(uuid_str: str) -> WFStageCore: - return WFStageCore(id=UUID(uuid_str), name="test-stage", type=WFTypeCore.ANNOTATE, assignable_users=[], edges=[]) + return WFStageCore( + id=UUID(uuid_str), + name="test-stage", + type=WFTypeCore.ANNOTATE, + assignable_users=[], + edges=[], + ) @fixture -def stage_meta(base_meta_client: Client, base_WFStage: WFStageCore, workflow_id: UUID) -> Stage: - return Stage(base_meta_client, base_WFStage, {"team_slug": "default-team", "dataset_id": 1337, "workflow_id": workflow_id}) +def stage_meta( + base_meta_client: Client, base_WFStage: WFStageCore, workflow_id: UUID +) -> Stage: + return Stage( + base_meta_client, + base_WFStage, + {"team_slug": "default-team", "dataset_id": 1337, "workflow_id": workflow_id}, + ) -def test_item_ids(base_meta_client: Client, stage_meta: Stage, UUIDs_str: List[str], UUIDs: List[UUID]) -> None: +def test_item_ids( + base_meta_client: Client, stage_meta: Stage, UUIDs_str: List[str], UUIDs: List[UUID] +) -> None: with responses.RequestsMock() as rsps: rsps.add( rsps.GET, - base_meta_client.config.api_endpoint + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", + base_meta_client.config.api_endpoint + + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", json={"item_ids": UUIDs_str}, status=200, ) @@ -39,11 +54,14 @@ def test_item_ids(base_meta_client: Client, stage_meta: Stage, UUIDs_str: List[s assert item_ids == UUIDs -def test_move_attached_files_to_stage(base_meta_client: Client, stage_meta: Stage, UUIDs_str: List[str], UUIDs: List[UUID]) -> None: +def test_move_attached_files_to_stage( + base_meta_client: Client, stage_meta: Stage, UUIDs_str: List[str], UUIDs: List[UUID] +) -> None: with responses.RequestsMock() as rsps: rsps.add( rsps.GET, - base_meta_client.config.api_endpoint + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", + base_meta_client.config.api_endpoint + + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", json={"item_ids": UUIDs_str}, status=200, ) @@ -54,8 +72,12 @@ def test_move_attached_files_to_stage(base_meta_client: Client, stage_meta: Stag status=200, ) stage_meta.move_attached_files_to_stage(stage_meta.id) - assert rsps.assert_call_count(base_meta_client.config.api_endpoint + "v2/teams/default-team/items/stage", 1) assert rsps.assert_call_count( - base_meta_client.config.api_endpoint + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", + base_meta_client.config.api_endpoint + "v2/teams/default-team/items/stage", + 1, + ) + assert rsps.assert_call_count( + base_meta_client.config.api_endpoint + + f"v2/teams/default-team/items/ids?workflow_stage_ids={str(stage_meta.id)}&dataset_ids=1337", 1, ) diff --git a/darwin/future/tests/meta/objects/test_teammeta.py b/darwin/future/tests/meta/objects/test_teammeta.py index e0fc5c6fa..8b010820c 100644 --- a/darwin/future/tests/meta/objects/test_teammeta.py +++ b/darwin/future/tests/meta/objects/test_teammeta.py @@ -26,7 +26,12 @@ def _delete_by_id_mock() -> Generator: yield mock -def test_team_meta_collects_members(base_meta_team: Team, base_client: ClientCore, base_team_member: TeamMemberCore, base_team_member_json: dict) -> None: +def test_team_meta_collects_members( + base_meta_team: Team, + base_client: ClientCore, + base_team_member: TeamMemberCore, + base_team_member_json: dict, +) -> None: with RequestsMock() as rsps: endpoint = base_client.config.api_endpoint + "memberships" rsps.add(rsps.GET, endpoint, json=[base_team_member_json]) @@ -36,7 +41,9 @@ def test_team_meta_collects_members(base_meta_team: Team, base_client: ClientCor # `delete_dataset` tests -def test_delete_dataset_returns_exceptions_thrown(base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock) -> None: +def test_delete_dataset_returns_exceptions_thrown( + base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock +) -> None: _delete_by_slug_mock.side_effect = Exception("test exception") valid_client = Client(base_config) @@ -51,7 +58,9 @@ def test_delete_dataset_returns_exceptions_thrown(base_config: DarwinConfig, _de assert _delete_by_id_mock.call_count == 0 -def test_delete_dataset_calls_delete_by_slug_as_appropriate(base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock) -> None: +def test_delete_dataset_calls_delete_by_slug_as_appropriate( + base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock +) -> None: valid_client = Client(base_config) exceptions, _ = Team.delete_dataset(valid_client, "test_dataset") @@ -61,7 +70,9 @@ def test_delete_dataset_calls_delete_by_slug_as_appropriate(base_config: DarwinC assert _delete_by_id_mock.call_count == 0 -def test_delete_dataset_calls_delete_by_id_as_appropriate(base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock) -> None: +def test_delete_dataset_calls_delete_by_id_as_appropriate( + base_config: DarwinConfig, _delete_by_id_mock: Mock, _delete_by_slug_mock: Mock +) -> None: valid_client = Client(base_config) exceptions, _ = Team.delete_dataset(valid_client, 1) @@ -71,7 +82,9 @@ def test_delete_dataset_calls_delete_by_id_as_appropriate(base_config: DarwinCon assert _delete_by_id_mock.call_count == 1 -def test_delete_by_slug__returns_dataset_deleted_if_dataset_found(base_config: DarwinConfig) -> None: +def test_delete_by_slug__returns_dataset_deleted_if_dataset_found( + base_config: DarwinConfig, +) -> None: valid_client = Client(base_config) valid_slug = "test_dataset" @@ -95,7 +108,9 @@ def test_delete_by_slug__returns_dataset_deleted_if_dataset_found(base_config: D assert dataset_deleted == 1 -def test_delete_by_id_returns_dataset_deleted_if_dataset_found(base_config: DarwinConfig) -> None: +def test_delete_by_id_returns_dataset_deleted_if_dataset_found( + base_config: DarwinConfig, +) -> None: valid_client = Client(base_config) valid_id = 1 @@ -114,7 +129,9 @@ def test_delete_by_id_returns_dataset_deleted_if_dataset_found(base_config: Darw # Test `_delete_by_id` -def test_delete_by_id_raises_exception_if_not_passed_int_and_client(base_config: DarwinConfig) -> None: +def test_delete_by_id_raises_exception_if_not_passed_int_and_client( + base_config: DarwinConfig, +) -> None: valid_client = Client(base_config) valid_id = 1 invalid_client = "client" @@ -128,7 +145,9 @@ def test_delete_by_id_raises_exception_if_not_passed_int_and_client(base_config: # Test `_delete_by_slug` -def test_delete_by_slug_raises_exception_if_not_passed_str_and_client(base_config: DarwinConfig) -> None: +def test_delete_by_slug_raises_exception_if_not_passed_str_and_client( + base_config: DarwinConfig, +) -> None: valid_client = Client(base_config) valid_slug = "test_dataset" invalid_client = "client" diff --git a/darwin/future/tests/meta/queries/test_dataset.py b/darwin/future/tests/meta/queries/test_dataset.py index 810b575df..d06e123c6 100644 --- a/darwin/future/tests/meta/queries/test_dataset.py +++ b/darwin/future/tests/meta/queries/test_dataset.py @@ -6,7 +6,9 @@ from darwin.future.tests.core.fixtures import * -def test_dataset_collects_basic(base_client: ClientCore, base_datasets_json: dict) -> None: +def test_dataset_collects_basic( + base_client: ClientCore, base_datasets_json: dict +) -> None: query = DatasetQuery(base_client) with responses.RequestsMock() as rsps: endpoint = base_client.config.api_endpoint + "datasets" @@ -16,7 +18,9 @@ def test_dataset_collects_basic(base_client: ClientCore, base_datasets_json: dic assert all(isinstance(dataset, Dataset) for dataset in datasets) -def test_datasetquery_only_passes_back_correctly_formed_objects(base_client: ClientCore, base_dataset_json: dict) -> None: +def test_datasetquery_only_passes_back_correctly_formed_objects( + base_client: ClientCore, base_dataset_json: dict +) -> None: query = DatasetQuery(base_client) with responses.RequestsMock() as rsps: endpoint = base_client.config.api_endpoint + "datasets" @@ -27,9 +31,13 @@ def test_datasetquery_only_passes_back_correctly_formed_objects(base_client: Cli assert isinstance(datasets[0], Dataset) -def test_dataset_filters_name(base_client: ClientCore, base_datasets_json: dict) -> None: +def test_dataset_filters_name( + base_client: ClientCore, base_datasets_json: dict +) -> None: with responses.RequestsMock() as rsps: - query = DatasetQuery(base_client).where({"name": "name", "param": "test dataset 1"}) + query = DatasetQuery(base_client).where( + {"name": "name", "param": "test dataset 1"} + ) endpoint = base_client.config.api_endpoint + "datasets" rsps.add(responses.GET, endpoint, json=base_datasets_json) datasets = query._collect() @@ -49,9 +57,13 @@ def test_dataset_filters_id(base_client: ClientCore, base_datasets_json: dict) - assert datasets[0]._element.slug == "test-dataset-1" -def test_dataset_filters_slug(base_client: ClientCore, base_datasets_json: dict) -> None: +def test_dataset_filters_slug( + base_client: ClientCore, base_datasets_json: dict +) -> None: with responses.RequestsMock() as rsps: - query = DatasetQuery(base_client).where({"name": "slug", "param": "test-dataset-1"}) + query = DatasetQuery(base_client).where( + {"name": "slug", "param": "test-dataset-1"} + ) endpoint = base_client.config.api_endpoint + "datasets" rsps.add(responses.GET, endpoint, json=base_datasets_json) datasets = query._collect() @@ -60,9 +72,13 @@ def test_dataset_filters_slug(base_client: ClientCore, base_datasets_json: dict) assert datasets[0]._element.slug == "test-dataset-1" -def test_dataset_filters_releases(base_client: ClientCore, base_datasets_json_with_releases: dict) -> None: +def test_dataset_filters_releases( + base_client: ClientCore, base_datasets_json_with_releases: dict +) -> None: with responses.RequestsMock() as rsps: - query = DatasetQuery(base_client).where({"name": "releases", "param": "release1"}) + query = DatasetQuery(base_client).where( + {"name": "releases", "param": "release1"} + ) endpoint = base_client.config.api_endpoint + "datasets" rsps.add(responses.GET, endpoint, json=base_datasets_json_with_releases) @@ -72,7 +88,9 @@ def test_dataset_filters_releases(base_client: ClientCore, base_datasets_json_wi assert datasets_odd_ids[0]._element.slug == "test-dataset-1" assert datasets_odd_ids[1]._element.slug == "test-dataset-3" - query2 = DatasetQuery(base_client).where({"name": "releases", "param": "release2"}) + query2 = DatasetQuery(base_client).where( + {"name": "releases", "param": "release2"} + ) datasets_even_ids = query2._collect() assert len(datasets_even_ids) == 2 diff --git a/darwin/future/tests/meta/queries/test_stage.py b/darwin/future/tests/meta/queries/test_stage.py index b35a5dd1c..1d7ad0721 100644 --- a/darwin/future/tests/meta/queries/test_stage.py +++ b/darwin/future/tests/meta/queries/test_stage.py @@ -11,11 +11,15 @@ @pytest.fixture def filled_query(base_client: ClientCore, base_workflow_meta: Workflow) -> StageQuery: - return StageQuery(base_client, meta_params={"workflow_id": str(base_workflow_meta.id)}) + return StageQuery( + base_client, meta_params={"workflow_id": str(base_workflow_meta.id)} + ) @pytest.fixture -def base_workflow_meta(base_client: ClientCore, base_single_workflow_object: dict) -> Workflow: +def base_workflow_meta( + base_client: ClientCore, base_single_workflow_object: dict +) -> Workflow: return Workflow(base_client, WorkflowCore.parse_obj(base_single_workflow_object)) @@ -38,20 +42,34 @@ def test_WFTypes_accept_unknonwn() -> None: assert WFTypeCore("test") == WFTypeCore.UNKNOWN -def test_stage_collects_basic(filled_query: StageQuery, base_single_workflow_object: dict, base_workflow_meta: Workflow) -> None: +def test_stage_collects_basic( + filled_query: StageQuery, + base_single_workflow_object: dict, + base_workflow_meta: Workflow, +) -> None: UUID = base_workflow_meta.id with responses.RequestsMock() as rsps: - endpoint = filled_query.client.config.api_endpoint + f"v2/teams/default-team/workflows/{UUID}" + endpoint = ( + filled_query.client.config.api_endpoint + + f"v2/teams/default-team/workflows/{UUID}" + ) rsps.add(responses.GET, endpoint, json=base_single_workflow_object) stages = filled_query._collect() assert len(stages) == len(base_workflow_meta.stages) assert isinstance(stages[0], Stage) -def test_stage_filters_basic(filled_query: StageQuery, multi_stage_workflow_object: dict, base_workflow_meta: Workflow) -> None: +def test_stage_filters_basic( + filled_query: StageQuery, + multi_stage_workflow_object: dict, + base_workflow_meta: Workflow, +) -> None: UUID = base_workflow_meta.id with responses.RequestsMock() as rsps: - endpoint = filled_query.client.config.api_endpoint + f"v2/teams/default-team/workflows/{UUID}" + endpoint = ( + filled_query.client.config.api_endpoint + + f"v2/teams/default-team/workflows/{UUID}" + ) rsps.add(responses.GET, endpoint, json=multi_stage_workflow_object) stages = filled_query.where({"name": "name", "param": "stage1"})._collect() assert len(stages) == 1 @@ -60,10 +78,18 @@ def test_stage_filters_basic(filled_query: StageQuery, multi_stage_workflow_obje @pytest.mark.parametrize("wf_type", list(WFTypeCore.__members__.values())) -def test_stage_filters_WFType(wf_type: WFTypeCore, filled_query: StageQuery, multi_stage_workflow_object: dict, base_workflow_meta: Workflow) -> None: +def test_stage_filters_WFType( + wf_type: WFTypeCore, + filled_query: StageQuery, + multi_stage_workflow_object: dict, + base_workflow_meta: Workflow, +) -> None: UUID = base_workflow_meta.id with responses.RequestsMock() as rsps: - endpoint = filled_query.client.config.api_endpoint + f"v2/teams/default-team/workflows/{UUID}" + endpoint = ( + filled_query.client.config.api_endpoint + + f"v2/teams/default-team/workflows/{UUID}" + ) rsps.add(responses.GET, endpoint, json=multi_stage_workflow_object) stages = filled_query.where({"name": "type", "param": wf_type.value})._collect() assert len(stages) == 3 diff --git a/darwin/future/tests/meta/queries/test_team_member.py b/darwin/future/tests/meta/queries/test_team_member.py index 048f39bd9..6fe314e58 100644 --- a/darwin/future/tests/meta/queries/test_team_member.py +++ b/darwin/future/tests/meta/queries/test_team_member.py @@ -10,7 +10,9 @@ from darwin.future.tests.core.fixtures import * -def test_team_member_collects_basic(base_client: ClientCore, base_team_members_json: List[dict]) -> None: +def test_team_member_collects_basic( + base_client: ClientCore, base_team_members_json: List[dict] +) -> None: query = TeamMemberQuery(base_client) with responses.RequestsMock() as rsps: endpoint = base_client.config.api_endpoint + "memberships" @@ -20,7 +22,9 @@ def test_team_member_collects_basic(base_client: ClientCore, base_team_members_j assert isinstance(members[0], TeamMember) -def test_team_member_only_passes_back_correct(base_client: ClientCore, base_team_member_json: dict) -> None: +def test_team_member_only_passes_back_correct( + base_client: ClientCore, base_team_member_json: dict +) -> None: query = TeamMemberQuery(base_client) with responses.RequestsMock() as rsps: endpoint = base_client.config.api_endpoint + "memberships" @@ -31,10 +35,14 @@ def test_team_member_only_passes_back_correct(base_client: ClientCore, base_team @pytest.mark.parametrize("role", list(TeamMemberRole)) -def test_team_member_filters_role(role: TeamMemberRole, base_client: ClientCore, base_team_members_json: List[dict]) -> None: +def test_team_member_filters_role( + role: TeamMemberRole, base_client: ClientCore, base_team_members_json: List[dict] +) -> None: with responses.RequestsMock() as rsps: # Test equal - query = TeamMemberQuery(base_client).where({"name": "role", "param": role.value}) + query = TeamMemberQuery(base_client).where( + {"name": "role", "param": role.value} + ) endpoint = base_client.config.api_endpoint + "memberships" rsps.add(responses.GET, endpoint, json=base_team_members_json) members = query._collect() @@ -43,7 +51,9 @@ def test_team_member_filters_role(role: TeamMemberRole, base_client: ClientCore, # Test not equal rsps.reset() - query = TeamMemberQuery(base_client).where({"name": "role", "param": role.value, "modifier": "!="}) + query = TeamMemberQuery(base_client).where( + {"name": "role", "param": role.value, "modifier": "!="} + ) rsps.add(responses.GET, endpoint, json=base_team_members_json) members = query._collect() assert len(members) == len(TeamMemberRole) - 1 @@ -51,7 +61,9 @@ def test_team_member_filters_role(role: TeamMemberRole, base_client: ClientCore, assert member._element.role != role -def test_team_member_filters_general(base_client: ClientCore, base_team_members_json: List[dict]) -> None: +def test_team_member_filters_general( + base_client: ClientCore, base_team_members_json: List[dict] +) -> None: for idx in range(len(base_team_members_json)): base_team_members_json[idx]["id"] = idx + 1 @@ -71,7 +83,9 @@ def test_team_member_filters_general(base_client: ClientCore, base_team_members_ members = ( TeamMemberQuery(base_client) .where({"name": "id", "param": 1, "modifier": ">"}) - .where({"name": "id", "param": len(base_team_members_json), "modifier": "<"}) + .where( + {"name": "id", "param": len(base_team_members_json), "modifier": "<"} + ) ._collect() ) diff --git a/darwin/future/tests/meta/queries/test_workflow.py b/darwin/future/tests/meta/queries/test_workflow.py index dc58b40c0..b9761f786 100644 --- a/darwin/future/tests/meta/queries/test_workflow.py +++ b/darwin/future/tests/meta/queries/test_workflow.py @@ -18,8 +18,12 @@ def workflows_query_endpoint(team: str) -> str: @responses.activate -def test_workflowquery_collects_basic(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_collects_basic( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) query = WorkflowQuery(base_client, []) @@ -30,8 +34,12 @@ def test_workflowquery_collects_basic(base_client: ClientCore, base_filterable_w @responses.activate -def test_workflowquery_filters_uuid(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_filters_uuid( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) query = WorkflowQuery(base_client, []).where( @@ -47,8 +55,12 @@ def test_workflowquery_filters_uuid(base_client: ClientCore, base_filterable_wor @responses.activate -def test_workflowquery_filters_inserted_at(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_filters_inserted_at( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) start = "2021-06-01T15:00:00.000+00:00" @@ -78,8 +90,12 @@ def test_workflowquery_filters_inserted_at(base_client: ClientCore, base_filtera @responses.activate -def test_workflowquery_filters_updated_at(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_filters_updated_at( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) start = "2021-06-04T15:00:00.000+00:00" @@ -109,8 +125,12 @@ def test_workflowquery_filters_updated_at(base_client: ClientCore, base_filterab @responses.activate -def test_workflowquery_filters_dataset_id(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_filters_dataset_id( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) query = WorkflowQuery(base_client, []).where( @@ -126,8 +146,12 @@ def test_workflowquery_filters_dataset_id(base_client: ClientCore, base_filterab @responses.activate -def test_workflowquery_filters_dataset_id_multiple_ids(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_filters_dataset_id_multiple_ids( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) query = WorkflowQuery(base_client, []).where( @@ -144,8 +168,12 @@ def test_workflowquery_filters_dataset_id_multiple_ids(base_client: ClientCore, @responses.activate -def test_workflowquery_filters_dataset_name(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_filters_dataset_name( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) query = WorkflowQuery(base_client, []).where( @@ -161,8 +189,12 @@ def test_workflowquery_filters_dataset_name(base_client: ClientCore, base_filter @responses.activate -def test_workflowquery_filters_dataset_name_mutliple_names(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_filters_dataset_name_mutliple_names( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) query = WorkflowQuery(base_client, []).where( @@ -179,8 +211,12 @@ def test_workflowquery_filters_dataset_name_mutliple_names(base_client: ClientCo @responses.activate -def test_workflowquery_filters_stages(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_filters_stages( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) query = WorkflowQuery(base_client, []).where( @@ -196,8 +232,12 @@ def test_workflowquery_filters_stages(base_client: ClientCore, base_filterable_w @responses.activate -def test_workflowquery_filters_stages_multiple(base_client: ClientCore, base_filterable_workflows: dict) -> None: - endpoint = base_client.config.api_endpoint + workflows_query_endpoint(base_client.config.default_team) +def test_workflowquery_filters_stages_multiple( + base_client: ClientCore, base_filterable_workflows: dict +) -> None: + endpoint = base_client.config.api_endpoint + workflows_query_endpoint( + base_client.config.default_team + ) responses.add(responses.GET, endpoint, json=base_filterable_workflows) query = WorkflowQuery(base_client, []).where( diff --git a/darwin/future/tests/meta/test_client.py b/darwin/future/tests/meta/test_client.py index 821cbedc4..aa86bd480 100644 --- a/darwin/future/tests/meta/test_client.py +++ b/darwin/future/tests/meta/test_client.py @@ -11,12 +11,18 @@ def test_creates_from_api_key() -> None: with responses.RequestsMock() as rsps: base_api_endpoint = DarwinConfig._default_api_endpoint() - rsps.add(responses.GET, base_api_endpoint + "users/token_info", json={"selected_team": {"slug": "test-team"}}) + rsps.add( + responses.GET, + base_api_endpoint + "users/token_info", + json={"selected_team": {"slug": "test-team"}}, + ) client = Client.from_api_key(api_key="test") assert client.config.default_team == "test-team" -def test_team_property(base_meta_client: Client, base_team: TeamCore, base_team_json: dict) -> None: +def test_team_property( + base_meta_client: Client, base_team: TeamCore, base_team_json: dict +) -> None: client = base_meta_client endpoint = client.config.api_endpoint + f"teams/{client.config.default_team}" with responses.RequestsMock() as rsps: diff --git a/pyproject.toml b/pyproject.toml index 2ec7136a8..fc180f06f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -55,7 +55,7 @@ warn_required_dynamic_aliases = true warn_untyped_fields = true [tool.black] -line-length = 160 +line-length = 88 [tool.ruff] select = ["E", "F", "C"] From c9a82a901a0ecb6b6aa29fa6595be4247f84a15c Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 14:19:08 +0100 Subject: [PATCH 13/15] black defaults --- pyproject.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index fc180f06f..e341f2ea0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,9 +54,6 @@ init_typed = true warn_required_dynamic_aliases = true warn_untyped_fields = true -[tool.black] -line-length = 88 - [tool.ruff] select = ["E", "F", "C"] ignore = ["E203", "E402"] From e0836df710f545b14bee1582b9f0ac9f2d8014a4 Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 15:03:26 +0100 Subject: [PATCH 14/15] vscode settings update --- .vscode/settings.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index b8706a377..28f99b8d9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,16 +13,11 @@ "editor.insertSpaces": true, "editor.tabSize": 2 }, - "python.linting.mypyEnabled": true, "isort.args": [ "--profile", "black" ], "python.analysis.autoImportCompletions": true, "python.testing.pytestEnabled": true, - "python.linting.enabled": true, "python.analysis.typeCheckingMode": "basic", - "black-formatter.path": [ - "poetry run python -m black" - ] } \ No newline at end of file From d5bbc612ec9a9639d85f25efc501e9d9aa51469e Mon Sep 17 00:00:00 2001 From: Nathan Perkins Date: Thu, 12 Oct 2023 16:44:18 +0100 Subject: [PATCH 15/15] ruff addition to dev --- poetry.lock | 1701 +++++++++++++++++++++++++----------------------- pyproject.toml | 4 +- 2 files changed, 903 insertions(+), 802 deletions(-) diff --git a/poetry.lock b/poetry.lock index 4e27775fc..4e6bdda53 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,15 +1,10 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. - [[package]] name = "argcomplete" version = "2.1.2" description = "Bash tab completion for argparse" +category = "main" optional = false python-versions = ">=3.6" -files = [ - {file = "argcomplete-2.1.2-py3-none-any.whl", hash = "sha256:4ba9cdaa28c361d251edce884cd50b4b1215d65cdc881bd204426cdde9f52731"}, - {file = "argcomplete-2.1.2.tar.gz", hash = "sha256:fc82ef070c607b1559b5c720529d63b54d9dcf2dcfc2632b10e6372314a34457"}, -] [package.dependencies] importlib-metadata = {version = ">=0.23,<6", markers = "python_version == \"3.7\""} @@ -22,12 +17,9 @@ test = ["coverage", "flake8", "mypy", "pexpect", "wheel"] name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" +category = "main" optional = false python-versions = ">=3.7" -files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, -] [package.dependencies] importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} @@ -43,22 +35,9 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "black" version = "22.12.0" description = "The uncompromising code formatter." +category = "main" optional = true python-versions = ">=3.7" -files = [ - {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, - {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, - {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, - {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, - {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, - {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, - {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, - {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, - {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, - {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, - {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, - {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, -] [package.dependencies] click = ">=8.0.0" @@ -79,122 +58,25 @@ uvloop = ["uvloop (>=0.15.2)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" -files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, -] [[package]] name = "charset-normalizer" version = "3.3.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, - {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, - {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, - {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, - {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, - {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, - {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, - {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, -] [[package]] name = "click" version = "8.1.7" description = "Composable command line interface toolkit" +category = "main" optional = true python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -204,56 +86,17 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] [[package]] name = "connected-components-3d" version = "3.12.3" description = "Connected components on 2D and 3D images. Supports multiple labels." +category = "main" optional = true python-versions = ">=3.7,<4.0" -files = [ - {file = "connected-components-3d-3.12.3.tar.gz", hash = "sha256:0040a009d86918c757d607986edea760feb782093ddfc1c20761c8a88cd087ec"}, - {file = "connected_components_3d-3.12.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef86445ab99428102272028cc291af6eb332031287bf275600419f0acd397d15"}, - {file = "connected_components_3d-3.12.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a9a2aa53976b36a68ee701f021adadfd645527f10372515970c0373f4c254667"}, - {file = "connected_components_3d-3.12.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df624b758ae6d22a0a7c2687f4d009bc7b722d58526872c8062a868472d05d70"}, - {file = "connected_components_3d-3.12.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7997a95b655cd5dfbf94a00863e62c6b48a3ce54d96de492434c1decbabd8056"}, - {file = "connected_components_3d-3.12.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc3fe77d67d82ebf42ef76e334517ac2165869a3393e5e5d68d475d36d057192"}, - {file = "connected_components_3d-3.12.3-cp310-cp310-win32.whl", hash = "sha256:1dcd2c47dcc308825a091a61ca2da54cbc8dd994a322ade7cbc622ff8c3c1da7"}, - {file = "connected_components_3d-3.12.3-cp310-cp310-win_amd64.whl", hash = "sha256:7d124d12cc12766baaf08c3828282106a2407cb064950fd9bdd227f018471420"}, - {file = "connected_components_3d-3.12.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7b7c076ef6ea778f1581b68f6b994bf926543249057f795159ccec8661570bed"}, - {file = "connected_components_3d-3.12.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dc3a434bbf1b8033ee6e57ea4f499131d43ec5ff14d9c64b3c6cb11dd23b62a4"}, - {file = "connected_components_3d-3.12.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c02b4d758093a676519182f38c1f50d6e3c2f251a181ec89c5919736b710789"}, - {file = "connected_components_3d-3.12.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:073a715e0e0f877762e44fe83d98e651d2b4d476bd7862fd02fd80a0150f4d0f"}, - {file = "connected_components_3d-3.12.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57996a349a0747e7262e8f740da13522c81bd7d09f9a9a1ecab359ba0ff1d90"}, - {file = "connected_components_3d-3.12.3-cp311-cp311-win32.whl", hash = "sha256:010872cf018d2331b9c69148e3389118200ee1a24e719a17747acd3bad99b465"}, - {file = "connected_components_3d-3.12.3-cp311-cp311-win_amd64.whl", hash = "sha256:d8a0062b5f4e4c205db46698f262d9dd4946e3c4660d3709b9606c6f4bce1586"}, - {file = "connected_components_3d-3.12.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b3ffc46c0c10252f235130cf44fb0f643611104111871ebbaf21db3992f23041"}, - {file = "connected_components_3d-3.12.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbdfceb3ad240cd025d494f504b73dd4da9ebe19c053ff2036f7a5530a772c1f"}, - {file = "connected_components_3d-3.12.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524fa48f8affbfe5b29f9a48976c7d948a552bfc865cd1aa6dd032d22d158c3e"}, - {file = "connected_components_3d-3.12.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a115275f89233c726d6b0d1e543dd438094b5826c4b8e674de84370ae0320ca"}, - {file = "connected_components_3d-3.12.3-cp37-cp37m-win32.whl", hash = "sha256:b70ac3a2334c39bb608c0eb1721dbe2634e345942fc0bc4e60855672d4350c21"}, - {file = "connected_components_3d-3.12.3-cp37-cp37m-win_amd64.whl", hash = "sha256:31018fb4c4e6c9ba072c3a9e95638bdf6fa7c3fcd892a719ed9162686e975404"}, - {file = "connected_components_3d-3.12.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca3674d9d7a6bc9e2029a5038a0bff085ec05cff21f0766d0e6fa54a0e3372f5"}, - {file = "connected_components_3d-3.12.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cc8c37a8aef38115a612978fdd37b9c98564ed9c05d09f3031c117408e06deba"}, - {file = "connected_components_3d-3.12.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eeb301764b3da77cec3e8a869c1dd937395cda4fb7e63f05b9a4ac231eb8dd5"}, - {file = "connected_components_3d-3.12.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aca594facf672997ac66aad4e86465dbc1b248a989474c67a549a70312f924c2"}, - {file = "connected_components_3d-3.12.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccdec1820268a60dba4a63ec298767b9462c8beac18a315f91802643e50cc3c1"}, - {file = "connected_components_3d-3.12.3-cp38-cp38-win32.whl", hash = "sha256:fbacf89984e374d8ae554c8e8fc4e4fc19b81e9396ce515aa893db6832114ebe"}, - {file = "connected_components_3d-3.12.3-cp38-cp38-win_amd64.whl", hash = "sha256:bb1de1dd58ac1303dcfee6370138de8704381c2f85c55fe545760416355fcb20"}, - {file = "connected_components_3d-3.12.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ee61e8e4cd61f182b583726e6965d1e9f81746ac2623199ee4c044fd941b2c0"}, - {file = "connected_components_3d-3.12.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e17dc81b234e72668de3cf448766bb03aa57cceabb9469756a13feef7c8d60d6"}, - {file = "connected_components_3d-3.12.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf2fe091b9fd2a64884662afa118dad96dcab04f45a35ab48a1a756fcf1d168a"}, - {file = "connected_components_3d-3.12.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:385a266b94d6ba8ad11deabaa7ea6db094746e0ae6509759cc0d632c15bc7e3b"}, - {file = "connected_components_3d-3.12.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95cb6e9c5fe25052f9029aa6f6a99896671123343f3a7039fd7b4cc0e940bfed"}, - {file = "connected_components_3d-3.12.3-cp39-cp39-win32.whl", hash = "sha256:49954222a8936085284048eb0976e3916ae655505831fba2f80a5aa17c4cabaa"}, - {file = "connected_components_3d-3.12.3-cp39-cp39-win_amd64.whl", hash = "sha256:d8734fbbbd7da6ea960a0effdeed9263dc1dfbbfdb6134928d0ac8630d5b3a3b"}, -] [package.dependencies] numpy = "*" @@ -262,43 +105,17 @@ numpy = "*" name = "debugpy" version = "1.7.0" description = "An implementation of the Debug Adapter Protocol for Python" +category = "main" optional = true python-versions = ">=3.7" -files = [ - {file = "debugpy-1.7.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:17ad9a681aca1704c55b9a5edcb495fa8f599e4655c9872b7f9cf3dc25890d48"}, - {file = "debugpy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1285920a3f9a75f5d1acf59ab1b9da9ae6eb9a05884cd7674f95170c9cafa4de"}, - {file = "debugpy-1.7.0-cp310-cp310-win32.whl", hash = "sha256:a6f43a681c5025db1f1c0568069d1d1bad306a02e7c36144912b26d9c90e4724"}, - {file = "debugpy-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:9e9571d831ad3c75b5fb6f3efcb71c471cf2a74ba84af6ac1c79ce00683bed4b"}, - {file = "debugpy-1.7.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:538765a41198aa88cc089295b39c7322dd598f9ef1d52eaae12145c63bf9430a"}, - {file = "debugpy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7e8cf91f8f3f9b5fad844dd88427b85d398bda1e2a0cd65d5a21312fcbc0c6f"}, - {file = "debugpy-1.7.0-cp311-cp311-win32.whl", hash = "sha256:18a69f8e142a716310dd0af6d7db08992aed99e2606108732efde101e7c65e2a"}, - {file = "debugpy-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7515a5ba5ee9bfe956685909c5f28734c1cecd4ee813523363acfe3ca824883a"}, - {file = "debugpy-1.7.0-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:bc8da67ade39d9e75608cdb8601d07e63a4e85966e0572c981f14e2cf42bcdef"}, - {file = "debugpy-1.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5036e918c6ba8fc4c4f1fd0207d81db634431a02f0dc2ba51b12fd793c8c9de"}, - {file = "debugpy-1.7.0-cp37-cp37m-win32.whl", hash = "sha256:d5be95b3946a4d7b388e45068c7b75036ac5a610f41014aee6cafcd5506423ad"}, - {file = "debugpy-1.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:0e90314a078d4e3f009520c8387aba8f74c3034645daa7a332a3d1bb81335756"}, - {file = "debugpy-1.7.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:1565fd904f9571c430adca597771255cff4f92171486fced6f765dcbdfc8ec8d"}, - {file = "debugpy-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6516f36a2e95b3be27f171f12b641e443863f4ad5255d0fdcea6ae0be29bb912"}, - {file = "debugpy-1.7.0-cp38-cp38-win32.whl", hash = "sha256:2b0e489613bc066051439df04c56777ec184b957d6810cb65f235083aef7a0dc"}, - {file = "debugpy-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:7bf0b4bbd841b2397b6a8de15da9227f1164f6d43ceee971c50194eaed930a9d"}, - {file = "debugpy-1.7.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:ad22e1095b9977af432465c1e09132ba176e18df3834b1efcab1a449346b350b"}, - {file = "debugpy-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f625e427f21423e5874139db529e18cb2966bdfcc1cb87a195538c5b34d163d1"}, - {file = "debugpy-1.7.0-cp39-cp39-win32.whl", hash = "sha256:18bca8429d6632e2d3435055416d2d88f0309cc39709f4f6355c8d412cc61f24"}, - {file = "debugpy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:dc8a12ac8b97ef3d6973c6679a093138c7c9b03eb685f0e253269a195f651559"}, - {file = "debugpy-1.7.0-py2.py3-none-any.whl", hash = "sha256:f6de2e6f24f62969e0f0ef682d78c98161c4dca29e9fb05df4d2989005005502"}, - {file = "debugpy-1.7.0.zip", hash = "sha256:676911c710e85567b17172db934a71319ed9d995104610ce23fd74a07f66e6f6"}, -] [[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 = "*" @@ -307,12 +124,9 @@ packaging = "*" name = "exceptiongroup" version = "1.1.3" description = "Backport of PEP 654 (exception groups)" +category = "main" optional = true python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, -] [package.extras] test = ["pytest (>=6)"] @@ -321,12 +135,9 @@ test = ["pytest (>=6)"] name = "humanize" version = "4.6.0" description = "Python humanize utilities" +category = "main" optional = false python-versions = ">=3.7" -files = [ - {file = "humanize-4.6.0-py3-none-any.whl", hash = "sha256:401201aca462749773f02920139f302450cb548b70489b9b4b92be39fe3c3c50"}, - {file = "humanize-4.6.0.tar.gz", hash = "sha256:5f1f22bc65911eb1a6ffe7659bd6598e33dcfeeb904eb16ee1e705a09bf75916"}, -] [package.dependencies] importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} @@ -338,23 +149,17 @@ tests = ["freezegun", "pytest", "pytest-cov"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" -files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] [[package]] name = "importlib-metadata" version = "5.2.0" description = "Read metadata from Python packages" +category = "main" optional = false python-versions = ">=3.7" -files = [ - {file = "importlib_metadata-5.2.0-py3-none-any.whl", hash = "sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f"}, - {file = "importlib_metadata-5.2.0.tar.gz", hash = "sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd"}, -] [package.dependencies] typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} @@ -369,12 +174,9 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag name = "importlib-resources" version = "5.12.0" description = "Read resources from Python packages" +category = "main" optional = false python-versions = ">=3.7" -files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, -] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} @@ -387,23 +189,17 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "main" optional = true python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] [[package]] name = "isort" version = "5.11.5" description = "A Python utility / library to sort Python imports." +category = "main" optional = true python-versions = ">=3.7.0" -files = [ - {file = "isort-5.11.5-py3-none-any.whl", hash = "sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746"}, - {file = "isort-5.11.5.tar.gz", hash = "sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db"}, -] [package.extras] colors = ["colorama (>=0.4.3,<0.5.0)"] @@ -415,23 +211,17 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "joblib" version = "1.3.2" description = "Lightweight pipelining with Python functions" +category = "main" optional = true python-versions = ">=3.7" -files = [ - {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, - {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, -] [[package]] name = "jsonschema" version = "4.17.3" description = "An implementation of JSON Schema validation for Python" +category = "main" optional = false python-versions = ">=3.7" -files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, -] [package.dependencies] attrs = ">=17.4.0" @@ -449,12 +239,9 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "markdown-it-py" version = "2.2.0" description = "Python port of markdown-it. Markdown parsing, done right!" +category = "main" optional = false python-versions = ">=3.7" -files = [ - {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, - {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, -] [package.dependencies] mdurl = ">=0.1,<1.0" @@ -474,23 +261,17 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" +category = "main" optional = false python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] [[package]] name = "mpire" version = "2.8.0" description = "A Python package for easy multiprocessing, but faster than multiprocessing" +category = "main" optional = false python-versions = "*" -files = [ - {file = "mpire-2.8.0-py3-none-any.whl", hash = "sha256:bbc07d642fdfdfde11e3edb3e1217236c944fb84b43dd90134182e5c9f13a9ad"}, - {file = "mpire-2.8.0.tar.gz", hash = "sha256:da3d4fc84710762e490870289dd91b6487d0e21dbea9dcc3178e00948d71d9db"}, -] [package.dependencies] pygments = ">=2.0" @@ -507,37 +288,9 @@ testing = ["dataclasses", "multiprocess", "multiprocess (>=0.70.15)", "numpy", " name = "mypy" version = "1.5.1" description = "Optional static typing for Python" +category = "main" optional = true python-versions = ">=3.8" -files = [ - {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, - {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, - {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, - {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, - {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, - {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, - {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, - {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, - {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, - {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, - {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, - {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, - {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, - {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, - {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, - {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, - {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, - {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, - {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, - {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, - {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, - {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, - {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, -] [package.dependencies] mypy-extensions = ">=1.0.0" @@ -553,23 +306,17 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "main" optional = true 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]] name = "nibabel" version = "5.1.0" description = "Access a multitude of neuroimaging data formats" +category = "main" optional = true python-versions = ">=3.8" -files = [ - {file = "nibabel-5.1.0-py3-none-any.whl", hash = "sha256:b3deb8130c835b9d26e80880b0d5e443d9e3f30972b3b0302dd2fafa3ca629f8"}, - {file = "nibabel-5.1.0.tar.gz", hash = "sha256:ce73ca5e957209e7219a223cb71f77235c9df2acf4d3f27f861ba38e9481ac53"}, -] [package.dependencies] importlib-resources = {version = ">=1.3", markers = "python_version < \"3.9\""} @@ -594,13 +341,815 @@ zstd = ["pyzstd (>=0.14.3)"] name = "numpy" version = "1.21.6" description = "NumPy is the fundamental package for array computing with Python." +category = "main" optional = false python-versions = ">=3.7,<3.11" -files = [ - {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8737609c3bbdd48e380d463134a35ffad3b22dc56295eff6f79fd85bd0eeeb25"}, - {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fdffbfb6832cd0b300995a2b08b8f6fa9f6e856d562800fea9182316d99c4e8e"}, - {file = "numpy-1.21.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3820724272f9913b597ccd13a467cc492a0da6b05df26ea09e78b171a0bb9da6"}, - {file = "numpy-1.21.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f17e562de9edf691a42ddb1eb4a5541c20dd3f9e65b09ded2beb0799c0cf29bb"}, + +[[package]] +name = "nvidia-cublas-cu11" +version = "11.10.3.66" +description = "CUBLAS native runtime libraries" +category = "main" +optional = true +python-versions = ">=3" + +[package.dependencies] +setuptools = "*" +wheel = "*" + +[[package]] +name = "nvidia-cuda-nvrtc-cu11" +version = "11.7.99" +description = "NVRTC native runtime libraries" +category = "main" +optional = true +python-versions = ">=3" + +[package.dependencies] +setuptools = "*" +wheel = "*" + +[[package]] +name = "nvidia-cuda-runtime-cu11" +version = "11.7.99" +description = "CUDA Runtime native Libraries" +category = "main" +optional = true +python-versions = ">=3" + +[package.dependencies] +setuptools = "*" +wheel = "*" + +[[package]] +name = "nvidia-cudnn-cu11" +version = "8.5.0.96" +description = "cuDNN runtime libraries" +category = "main" +optional = true +python-versions = ">=3" + +[package.dependencies] +setuptools = "*" +wheel = "*" + +[[package]] +name = "opencv-python-headless" +version = "4.8.1.78" +description = "Wrapper package for OpenCV python bindings." +category = "main" +optional = true +python-versions = ">=3.6" + +[package.dependencies] +numpy = [ + {version = ">=1.21.0", markers = "python_version <= \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, + {version = ">=1.21.2", markers = "python_version >= \"3.10\""}, + {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\""}, + {version = ">=1.19.3", markers = "python_version >= \"3.6\" and platform_system == \"Linux\" and platform_machine == \"aarch64\" or python_version >= \"3.9\""}, + {version = ">=1.17.0", markers = "python_version >= \"3.7\""}, + {version = ">=1.17.3", markers = "python_version >= \"3.8\""}, +] + +[[package]] +name = "orjson" +version = "3.9.7" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "packaging" +version = "23.2" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "pathspec" +version = "0.11.2" +description = "Utility library for gitignore style pattern matching of file paths." +category = "main" +optional = true +python-versions = ">=3.7" + +[[package]] +name = "pillow" +version = "9.5.0" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.7" + +[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 = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "platformdirs" +version = "3.11.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} + +[package.extras] +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.2.0" +description = "plugin and hook calling mechanisms for python" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pydantic" +version = "1.10.13" +description = "Data validation and settings management using python type hints" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyrsistent" +version = "0.19.3" +description = "Persistent/Functional/Immutable data structures" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "pytest" +version = "7.4.2" +description = "pytest: simple powerful testing with Python" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-rerunfailures" +version = "12.0" +description = "pytest plugin to re-run tests to eliminate flaky failures" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +importlib-metadata = {version = ">=1", markers = "python_version < \"3.8\""} +packaging = ">=17.1" +pytest = ">=6.2" + +[[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" + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +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 = "responses" +version = "0.22.0" +description = "A utility library for mocking out the `requests` Python library." +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +requests = ">=2.22.0,<3.0" +toml = "*" +types-toml = "*" +typing-extensions = {version = "*", markers = "python_version < \"3.8\""} +urllib3 = ">=1.25.10" + +[package.extras] +tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "types-requests"] + +[[package]] +name = "rich" +version = "13.6.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "main" +optional = false +python-versions = ">=3.7.0" + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "ruff" +version = "0.0.292" +description = "An extremely fast Python linter, written in Rust." +category = "main" +optional = true +python-versions = ">=3.7" + +[[package]] +name = "scikit-learn" +version = "1.3.1" +description = "A set of python modules for machine learning and data mining" +category = "main" +optional = true +python-versions = ">=3.8" + +[package.dependencies] +joblib = ">=1.1.1" +numpy = ">=1.17.3,<2.0" +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.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.10.1" +description = "Fundamental algorithms for scientific computing in Python" +category = "main" +optional = true +python-versions = "<3.12,>=3.8" + +[package.dependencies] +numpy = ">=1.19.5,<1.27.0" + +[package.extras] +dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"] +doc = ["matplotlib (>2)", "numpydoc", "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 = "setuptools" +version = "68.0.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = true +python-versions = ">=3.7" + +[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-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.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-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]] +name = "threadpoolctl" +version = "3.2.0" +description = "threadpoolctl" +category = "main" +optional = true +python-versions = ">=3.8" + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "main" +optional = true +python-versions = ">=3.7" + +[[package]] +name = "torch" +version = "1.13.1" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +category = "main" +optional = true +python-versions = ">=3.7.0" + +[package.dependencies] +nvidia-cublas-cu11 = {version = "11.10.3.66", markers = "platform_system == \"Linux\""} +nvidia-cuda-nvrtc-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\""} +nvidia-cuda-runtime-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\""} +nvidia-cudnn-cu11 = {version = "8.5.0.96", markers = "platform_system == \"Linux\""} +typing-extensions = "*" + +[package.extras] +opt-einsum = ["opt-einsum (>=3.3)"] + +[[package]] +name = "torchvision" +version = "0.14.1" +description = "image and video datasets and models for torch deep learning" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.dependencies] +numpy = "*" +pillow = ">=5.3.0,<8.3.0 || >=8.4.0" +requests = "*" +torch = "1.13.1" +typing-extensions = "*" + +[package.extras] +scipy = ["scipy"] + +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "typed-ast" +version = "1.5.5" +description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "main" +optional = true +python-versions = ">=3.6" + +[[package]] +name = "types-pyyaml" +version = "6.0.12.12" +description = "Typing stubs for PyYAML" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "types-requests" +version = "2.31.0.8" +description = "Typing stubs for requests" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +urllib3 = ">=2" + +[[package]] +name = "types-toml" +version = "0.10.8.7" +description = "Typing stubs for toml" +category = "main" +optional = true +python-versions = "*" + +[[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" + +[[package]] +name = "upolygon" +version = "0.1.10" +description = "Collection of fast polygon operations for DL" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +numpy = "*" + +[[package]] +name = "urllib3" +version = "2.0.6" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +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 = "wheel" +version = "0.41.2" +description = "A built-package format for Python" +category = "main" +optional = true +python-versions = ">=3.7" + +[package.extras] +test = ["pytest (>=6.0.0)", "setuptools (>=65)"] + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[extras] +dev = ["black", "isort", "mypy", "debugpy", "responses", "pytest", "pytest-rerunfailures", "ruff"] +medical = ["nibabel", "connected-components-3d"] +ml = ["torch", "torchvision", "scikit-learn"] +ocv = ["opencv-python-headless"] +test = ["responses", "pytest"] + +[metadata] +lock-version = "1.1" +python-versions = ">=3.7.0,<3.11" +content-hash = "84b2067d902a0aae9d19b184c89ba94e70eb5f0c92cd964cc32be94e0c636390" + +[metadata.files] +argcomplete = [ + {file = "argcomplete-2.1.2-py3-none-any.whl", hash = "sha256:4ba9cdaa28c361d251edce884cd50b4b1215d65cdc881bd204426cdde9f52731"}, + {file = "argcomplete-2.1.2.tar.gz", hash = "sha256:fc82ef070c607b1559b5c720529d63b54d9dcf2dcfc2632b10e6372314a34457"}, +] +attrs = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] +black = [ + {file = "black-22.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d"}, + {file = "black-22.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351"}, + {file = "black-22.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"}, + {file = "black-22.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4"}, + {file = "black-22.12.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2"}, + {file = "black-22.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350"}, + {file = "black-22.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d"}, + {file = "black-22.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc"}, + {file = "black-22.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320"}, + {file = "black-22.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148"}, + {file = "black-22.12.0-py3-none-any.whl", hash = "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf"}, + {file = "black-22.12.0.tar.gz", hash = "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f"}, +] +certifi = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] +charset-normalizer = [ + {file = "charset-normalizer-3.3.0.tar.gz", hash = "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win32.whl", hash = "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d"}, + {file = "charset_normalizer-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win32.whl", hash = "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786"}, + {file = "charset_normalizer-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win32.whl", hash = "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df"}, + {file = "charset_normalizer-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win32.whl", hash = "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c"}, + {file = "charset_normalizer-3.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win32.whl", hash = "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e"}, + {file = "charset_normalizer-3.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win32.whl", hash = "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a"}, + {file = "charset_normalizer-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884"}, + {file = "charset_normalizer-3.3.0-py3-none-any.whl", hash = "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2"}, +] +click = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +connected-components-3d = [ + {file = "connected-components-3d-3.12.3.tar.gz", hash = "sha256:0040a009d86918c757d607986edea760feb782093ddfc1c20761c8a88cd087ec"}, + {file = "connected_components_3d-3.12.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef86445ab99428102272028cc291af6eb332031287bf275600419f0acd397d15"}, + {file = "connected_components_3d-3.12.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a9a2aa53976b36a68ee701f021adadfd645527f10372515970c0373f4c254667"}, + {file = "connected_components_3d-3.12.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df624b758ae6d22a0a7c2687f4d009bc7b722d58526872c8062a868472d05d70"}, + {file = "connected_components_3d-3.12.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7997a95b655cd5dfbf94a00863e62c6b48a3ce54d96de492434c1decbabd8056"}, + {file = "connected_components_3d-3.12.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc3fe77d67d82ebf42ef76e334517ac2165869a3393e5e5d68d475d36d057192"}, + {file = "connected_components_3d-3.12.3-cp310-cp310-win32.whl", hash = "sha256:1dcd2c47dcc308825a091a61ca2da54cbc8dd994a322ade7cbc622ff8c3c1da7"}, + {file = "connected_components_3d-3.12.3-cp310-cp310-win_amd64.whl", hash = "sha256:7d124d12cc12766baaf08c3828282106a2407cb064950fd9bdd227f018471420"}, + {file = "connected_components_3d-3.12.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7b7c076ef6ea778f1581b68f6b994bf926543249057f795159ccec8661570bed"}, + {file = "connected_components_3d-3.12.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dc3a434bbf1b8033ee6e57ea4f499131d43ec5ff14d9c64b3c6cb11dd23b62a4"}, + {file = "connected_components_3d-3.12.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c02b4d758093a676519182f38c1f50d6e3c2f251a181ec89c5919736b710789"}, + {file = "connected_components_3d-3.12.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:073a715e0e0f877762e44fe83d98e651d2b4d476bd7862fd02fd80a0150f4d0f"}, + {file = "connected_components_3d-3.12.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57996a349a0747e7262e8f740da13522c81bd7d09f9a9a1ecab359ba0ff1d90"}, + {file = "connected_components_3d-3.12.3-cp311-cp311-win32.whl", hash = "sha256:010872cf018d2331b9c69148e3389118200ee1a24e719a17747acd3bad99b465"}, + {file = "connected_components_3d-3.12.3-cp311-cp311-win_amd64.whl", hash = "sha256:d8a0062b5f4e4c205db46698f262d9dd4946e3c4660d3709b9606c6f4bce1586"}, + {file = "connected_components_3d-3.12.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b3ffc46c0c10252f235130cf44fb0f643611104111871ebbaf21db3992f23041"}, + {file = "connected_components_3d-3.12.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbdfceb3ad240cd025d494f504b73dd4da9ebe19c053ff2036f7a5530a772c1f"}, + {file = "connected_components_3d-3.12.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524fa48f8affbfe5b29f9a48976c7d948a552bfc865cd1aa6dd032d22d158c3e"}, + {file = "connected_components_3d-3.12.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a115275f89233c726d6b0d1e543dd438094b5826c4b8e674de84370ae0320ca"}, + {file = "connected_components_3d-3.12.3-cp37-cp37m-win32.whl", hash = "sha256:b70ac3a2334c39bb608c0eb1721dbe2634e345942fc0bc4e60855672d4350c21"}, + {file = "connected_components_3d-3.12.3-cp37-cp37m-win_amd64.whl", hash = "sha256:31018fb4c4e6c9ba072c3a9e95638bdf6fa7c3fcd892a719ed9162686e975404"}, + {file = "connected_components_3d-3.12.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca3674d9d7a6bc9e2029a5038a0bff085ec05cff21f0766d0e6fa54a0e3372f5"}, + {file = "connected_components_3d-3.12.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cc8c37a8aef38115a612978fdd37b9c98564ed9c05d09f3031c117408e06deba"}, + {file = "connected_components_3d-3.12.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eeb301764b3da77cec3e8a869c1dd937395cda4fb7e63f05b9a4ac231eb8dd5"}, + {file = "connected_components_3d-3.12.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aca594facf672997ac66aad4e86465dbc1b248a989474c67a549a70312f924c2"}, + {file = "connected_components_3d-3.12.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccdec1820268a60dba4a63ec298767b9462c8beac18a315f91802643e50cc3c1"}, + {file = "connected_components_3d-3.12.3-cp38-cp38-win32.whl", hash = "sha256:fbacf89984e374d8ae554c8e8fc4e4fc19b81e9396ce515aa893db6832114ebe"}, + {file = "connected_components_3d-3.12.3-cp38-cp38-win_amd64.whl", hash = "sha256:bb1de1dd58ac1303dcfee6370138de8704381c2f85c55fe545760416355fcb20"}, + {file = "connected_components_3d-3.12.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ee61e8e4cd61f182b583726e6965d1e9f81746ac2623199ee4c044fd941b2c0"}, + {file = "connected_components_3d-3.12.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e17dc81b234e72668de3cf448766bb03aa57cceabb9469756a13feef7c8d60d6"}, + {file = "connected_components_3d-3.12.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf2fe091b9fd2a64884662afa118dad96dcab04f45a35ab48a1a756fcf1d168a"}, + {file = "connected_components_3d-3.12.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:385a266b94d6ba8ad11deabaa7ea6db094746e0ae6509759cc0d632c15bc7e3b"}, + {file = "connected_components_3d-3.12.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95cb6e9c5fe25052f9029aa6f6a99896671123343f3a7039fd7b4cc0e940bfed"}, + {file = "connected_components_3d-3.12.3-cp39-cp39-win32.whl", hash = "sha256:49954222a8936085284048eb0976e3916ae655505831fba2f80a5aa17c4cabaa"}, + {file = "connected_components_3d-3.12.3-cp39-cp39-win_amd64.whl", hash = "sha256:d8734fbbbd7da6ea960a0effdeed9263dc1dfbbfdb6134928d0ac8630d5b3a3b"}, +] +debugpy = [ + {file = "debugpy-1.7.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:17ad9a681aca1704c55b9a5edcb495fa8f599e4655c9872b7f9cf3dc25890d48"}, + {file = "debugpy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1285920a3f9a75f5d1acf59ab1b9da9ae6eb9a05884cd7674f95170c9cafa4de"}, + {file = "debugpy-1.7.0-cp310-cp310-win32.whl", hash = "sha256:a6f43a681c5025db1f1c0568069d1d1bad306a02e7c36144912b26d9c90e4724"}, + {file = "debugpy-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:9e9571d831ad3c75b5fb6f3efcb71c471cf2a74ba84af6ac1c79ce00683bed4b"}, + {file = "debugpy-1.7.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:538765a41198aa88cc089295b39c7322dd598f9ef1d52eaae12145c63bf9430a"}, + {file = "debugpy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7e8cf91f8f3f9b5fad844dd88427b85d398bda1e2a0cd65d5a21312fcbc0c6f"}, + {file = "debugpy-1.7.0-cp311-cp311-win32.whl", hash = "sha256:18a69f8e142a716310dd0af6d7db08992aed99e2606108732efde101e7c65e2a"}, + {file = "debugpy-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7515a5ba5ee9bfe956685909c5f28734c1cecd4ee813523363acfe3ca824883a"}, + {file = "debugpy-1.7.0-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:bc8da67ade39d9e75608cdb8601d07e63a4e85966e0572c981f14e2cf42bcdef"}, + {file = "debugpy-1.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5036e918c6ba8fc4c4f1fd0207d81db634431a02f0dc2ba51b12fd793c8c9de"}, + {file = "debugpy-1.7.0-cp37-cp37m-win32.whl", hash = "sha256:d5be95b3946a4d7b388e45068c7b75036ac5a610f41014aee6cafcd5506423ad"}, + {file = "debugpy-1.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:0e90314a078d4e3f009520c8387aba8f74c3034645daa7a332a3d1bb81335756"}, + {file = "debugpy-1.7.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:1565fd904f9571c430adca597771255cff4f92171486fced6f765dcbdfc8ec8d"}, + {file = "debugpy-1.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6516f36a2e95b3be27f171f12b641e443863f4ad5255d0fdcea6ae0be29bb912"}, + {file = "debugpy-1.7.0-cp38-cp38-win32.whl", hash = "sha256:2b0e489613bc066051439df04c56777ec184b957d6810cb65f235083aef7a0dc"}, + {file = "debugpy-1.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:7bf0b4bbd841b2397b6a8de15da9227f1164f6d43ceee971c50194eaed930a9d"}, + {file = "debugpy-1.7.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:ad22e1095b9977af432465c1e09132ba176e18df3834b1efcab1a449346b350b"}, + {file = "debugpy-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f625e427f21423e5874139db529e18cb2966bdfcc1cb87a195538c5b34d163d1"}, + {file = "debugpy-1.7.0-cp39-cp39-win32.whl", hash = "sha256:18bca8429d6632e2d3435055416d2d88f0309cc39709f4f6355c8d412cc61f24"}, + {file = "debugpy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:dc8a12ac8b97ef3d6973c6679a093138c7c9b03eb685f0e253269a195f651559"}, + {file = "debugpy-1.7.0-py2.py3-none-any.whl", hash = "sha256:f6de2e6f24f62969e0f0ef682d78c98161c4dca29e9fb05df4d2989005005502"}, + {file = "debugpy-1.7.0.zip", hash = "sha256:676911c710e85567b17172db934a71319ed9d995104610ce23fd74a07f66e6f6"}, +] +deprecation = [ + {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, + {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"}, +] +exceptiongroup = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] +humanize = [ + {file = "humanize-4.6.0-py3-none-any.whl", hash = "sha256:401201aca462749773f02920139f302450cb548b70489b9b4b92be39fe3c3c50"}, + {file = "humanize-4.6.0.tar.gz", hash = "sha256:5f1f22bc65911eb1a6ffe7659bd6598e33dcfeeb904eb16ee1e705a09bf75916"}, +] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +importlib-metadata = [ + {file = "importlib_metadata-5.2.0-py3-none-any.whl", hash = "sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f"}, + {file = "importlib_metadata-5.2.0.tar.gz", hash = "sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd"}, +] +importlib-resources = [ + {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, + {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, +] +iniconfig = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] +isort = [ + {file = "isort-5.11.5-py3-none-any.whl", hash = "sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746"}, + {file = "isort-5.11.5.tar.gz", hash = "sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db"}, +] +joblib = [ + {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, + {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, +] +jsonschema = [ + {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, + {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, +] +markdown-it-py = [ + {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, + {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, +] +mdurl = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] +mpire = [ + {file = "mpire-2.8.0-py3-none-any.whl", hash = "sha256:bbc07d642fdfdfde11e3edb3e1217236c944fb84b43dd90134182e5c9f13a9ad"}, + {file = "mpire-2.8.0.tar.gz", hash = "sha256:da3d4fc84710762e490870289dd91b6487d0e21dbea9dcc3178e00948d71d9db"}, +] +mypy = [ + {file = "mypy-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f33592ddf9655a4894aef22d134de7393e95fcbdc2d15c1ab65828eee5c66c70"}, + {file = "mypy-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:258b22210a4a258ccd077426c7a181d789d1121aca6db73a83f79372f5569ae0"}, + {file = "mypy-1.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9ec1f695f0c25986e6f7f8778e5ce61659063268836a38c951200c57479cc12"}, + {file = "mypy-1.5.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:abed92d9c8f08643c7d831300b739562b0a6c9fcb028d211134fc9ab20ccad5d"}, + {file = "mypy-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a156e6390944c265eb56afa67c74c0636f10283429171018446b732f1a05af25"}, + {file = "mypy-1.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ac9c21bfe7bc9f7f1b6fae441746e6a106e48fc9de530dea29e8cd37a2c0cc4"}, + {file = "mypy-1.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:51cb1323064b1099e177098cb939eab2da42fea5d818d40113957ec954fc85f4"}, + {file = "mypy-1.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:596fae69f2bfcb7305808c75c00f81fe2829b6236eadda536f00610ac5ec2243"}, + {file = "mypy-1.5.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:32cb59609b0534f0bd67faebb6e022fe534bdb0e2ecab4290d683d248be1b275"}, + {file = "mypy-1.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:159aa9acb16086b79bbb0016145034a1a05360626046a929f84579ce1666b315"}, + {file = "mypy-1.5.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f6b0e77db9ff4fda74de7df13f30016a0a663928d669c9f2c057048ba44f09bb"}, + {file = "mypy-1.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26f71b535dfc158a71264e6dc805a9f8d2e60b67215ca0bfa26e2e1aa4d4d373"}, + {file = "mypy-1.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fc3a600f749b1008cc75e02b6fb3d4db8dbcca2d733030fe7a3b3502902f161"}, + {file = "mypy-1.5.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:26fb32e4d4afa205b24bf645eddfbb36a1e17e995c5c99d6d00edb24b693406a"}, + {file = "mypy-1.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:82cb6193de9bbb3844bab4c7cf80e6227d5225cc7625b068a06d005d861ad5f1"}, + {file = "mypy-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4a465ea2ca12804d5b34bb056be3a29dc47aea5973b892d0417c6a10a40b2d65"}, + {file = "mypy-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9fece120dbb041771a63eb95e4896791386fe287fefb2837258925b8326d6160"}, + {file = "mypy-1.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d28ddc3e3dfeab553e743e532fb95b4e6afad51d4706dd22f28e1e5e664828d2"}, + {file = "mypy-1.5.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:57b10c56016adce71fba6bc6e9fd45d8083f74361f629390c556738565af8eeb"}, + {file = "mypy-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:ff0cedc84184115202475bbb46dd99f8dcb87fe24d5d0ddfc0fe6b8575c88d2f"}, + {file = "mypy-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8f772942d372c8cbac575be99f9cc9d9fb3bd95c8bc2de6c01411e2c84ebca8a"}, + {file = "mypy-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5d627124700b92b6bbaa99f27cbe615c8ea7b3402960f6372ea7d65faf376c14"}, + {file = "mypy-1.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:361da43c4f5a96173220eb53340ace68cda81845cd88218f8862dfb0adc8cddb"}, + {file = "mypy-1.5.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:330857f9507c24de5c5724235e66858f8364a0693894342485e543f5b07c8693"}, + {file = "mypy-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:c543214ffdd422623e9fedd0869166c2f16affe4ba37463975043ef7d2ea8770"}, + {file = "mypy-1.5.1-py3-none-any.whl", hash = "sha256:f757063a83970d67c444f6e01d9550a7402322af3557ce7630d3c957386fa8f5"}, + {file = "mypy-1.5.1.tar.gz", hash = "sha256:b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"}, +] +mypy-extensions = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] +nibabel = [ + {file = "nibabel-5.1.0-py3-none-any.whl", hash = "sha256:b3deb8130c835b9d26e80880b0d5e443d9e3f30972b3b0302dd2fafa3ca629f8"}, + {file = "nibabel-5.1.0.tar.gz", hash = "sha256:ce73ca5e957209e7219a223cb71f77235c9df2acf4d3f27f861ba38e9481ac53"}, +] +numpy = [ + {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8737609c3bbdd48e380d463134a35ffad3b22dc56295eff6f79fd85bd0eeeb25"}, + {file = "numpy-1.21.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fdffbfb6832cd0b300995a2b08b8f6fa9f6e856d562800fea9182316d99c4e8e"}, + {file = "numpy-1.21.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3820724272f9913b597ccd13a467cc492a0da6b05df26ea09e78b171a0bb9da6"}, + {file = "numpy-1.21.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f17e562de9edf691a42ddb1eb4a5541c20dd3f9e65b09ded2beb0799c0cf29bb"}, {file = "numpy-1.21.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f30427731561ce75d7048ac254dbe47a2ba576229250fb60f0fb74db96501a1"}, {file = "numpy-1.21.6-cp310-cp310-win32.whl", hash = "sha256:d4bf4d43077db55589ffc9009c0ba0a94fa4908b9586d6ccce2e0b164c86303c"}, {file = "numpy-1.21.6-cp310-cp310-win_amd64.whl", hash = "sha256:d136337ae3cc69aa5e447e78d8e1514be8c3ec9b54264e680cf0b4bd9011574f"}, @@ -629,75 +1178,24 @@ files = [ {file = "numpy-1.21.6-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd1c8f6bd65d07d3810b90d02eba7997e32abbdf1277a481d698969e921a3be0"}, {file = "numpy-1.21.6.zip", hash = "sha256:ecb55251139706669fdec2ff073c98ef8e9a84473e51e716211b41aa0f18e656"}, ] - -[[package]] -name = "nvidia-cublas-cu11" -version = "11.10.3.66" -description = "CUBLAS native runtime libraries" -optional = true -python-versions = ">=3" -files = [ +nvidia-cublas-cu11 = [ {file = "nvidia_cublas_cu11-11.10.3.66-py3-none-manylinux1_x86_64.whl", hash = "sha256:d32e4d75f94ddfb93ea0a5dda08389bcc65d8916a25cb9f37ac89edaeed3bded"}, {file = "nvidia_cublas_cu11-11.10.3.66-py3-none-win_amd64.whl", hash = "sha256:8ac17ba6ade3ed56ab898a036f9ae0756f1e81052a317bf98f8c6d18dc3ae49e"}, ] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cuda-nvrtc-cu11" -version = "11.7.99" -description = "NVRTC native runtime libraries" -optional = true -python-versions = ">=3" -files = [ +nvidia-cuda-nvrtc-cu11 = [ {file = "nvidia_cuda_nvrtc_cu11-11.7.99-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:9f1562822ea264b7e34ed5930567e89242d266448e936b85bc97a3370feabb03"}, {file = "nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:f7d9610d9b7c331fa0da2d1b2858a4a8315e6d49765091d28711c8946e7425e7"}, {file = "nvidia_cuda_nvrtc_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:f2effeb1309bdd1b3854fc9b17eaf997808f8b25968ce0c7070945c4265d64a3"}, ] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cuda-runtime-cu11" -version = "11.7.99" -description = "CUDA Runtime native Libraries" -optional = true -python-versions = ">=3" -files = [ +nvidia-cuda-runtime-cu11 = [ {file = "nvidia_cuda_runtime_cu11-11.7.99-py3-none-manylinux1_x86_64.whl", hash = "sha256:cc768314ae58d2641f07eac350f40f99dcb35719c4faff4bc458a7cd2b119e31"}, {file = "nvidia_cuda_runtime_cu11-11.7.99-py3-none-win_amd64.whl", hash = "sha256:bc77fa59a7679310df9d5c70ab13c4e34c64ae2124dd1efd7e5474b71be125c7"}, ] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "nvidia-cudnn-cu11" -version = "8.5.0.96" -description = "cuDNN runtime libraries" -optional = true -python-versions = ">=3" -files = [ +nvidia-cudnn-cu11 = [ {file = "nvidia_cudnn_cu11-8.5.0.96-2-py3-none-manylinux1_x86_64.whl", hash = "sha256:402f40adfc6f418f9dae9ab402e773cfed9beae52333f6d86ae3107a1b9527e7"}, {file = "nvidia_cudnn_cu11-8.5.0.96-py3-none-manylinux1_x86_64.whl", hash = "sha256:71f8111eb830879ff2836db3cccf03bbd735df9b0d17cd93761732ac50a8a108"}, ] - -[package.dependencies] -setuptools = "*" -wheel = "*" - -[[package]] -name = "opencv-python-headless" -version = "4.8.1.78" -description = "Wrapper package for OpenCV python bindings." -optional = true -python-versions = ">=3.6" -files = [ +opencv-python-headless = [ {file = "opencv-python-headless-4.8.1.78.tar.gz", hash = "sha256:bc7197b42352f6f865c302a49140b889ec7cd957dd697e2d7fc016ad0d3f28f1"}, {file = "opencv_python_headless-4.8.1.78-cp37-abi3-macosx_10_16_x86_64.whl", hash = "sha256:f3a33f644249f9ce1c913eac580e4b3ef4ce7cab0a71900274708959c2feb5e3"}, {file = "opencv_python_headless-4.8.1.78-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:2c7d45721df9801c4dcd34683a15caa0e30f38b185263fec04a6eb274bc720f0"}, @@ -706,24 +1204,7 @@ files = [ {file = "opencv_python_headless-4.8.1.78-cp37-abi3-win32.whl", hash = "sha256:382f8c7a6a14f80091284eecedd52cee4812231ee0eff1118592197b538d9252"}, {file = "opencv_python_headless-4.8.1.78-cp37-abi3-win_amd64.whl", hash = "sha256:0a0f1e9f836f7d5bad1dd164694944c8761711cbdf4b36ebbd4815a8ef731079"}, ] - -[package.dependencies] -numpy = [ - {version = ">=1.21.0", markers = "python_version <= \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, - {version = ">=1.21.2", markers = "python_version >= \"3.10\""}, - {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\""}, - {version = ">=1.19.3", markers = "python_version >= \"3.6\" and platform_system == \"Linux\" and platform_machine == \"aarch64\" or python_version >= \"3.9\""}, - {version = ">=1.17.0", markers = "python_version >= \"3.7\""}, - {version = ">=1.17.3", markers = "python_version >= \"3.8\""}, -] - -[[package]] -name = "orjson" -version = "3.9.7" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -optional = false -python-versions = ">=3.7" -files = [ +orjson = [ {file = "orjson-3.9.7-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6df858e37c321cefbf27fe7ece30a950bcc3a75618a804a0dcef7ed9dd9c92d"}, {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5198633137780d78b86bb54dafaaa9baea698b4f059456cd4554ab7009619221"}, {file = "orjson-3.9.7-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e736815b30f7e3c9044ec06a98ee59e217a833227e10eb157f44071faddd7c5"}, @@ -785,36 +1266,15 @@ files = [ {file = "orjson-3.9.7-cp39-none-win_amd64.whl", hash = "sha256:9ef82157bbcecd75d6296d5d8b2d792242afcd064eb1ac573f8847b52e58f677"}, {file = "orjson-3.9.7.tar.gz", hash = "sha256:85e39198f78e2f7e054d296395f6c96f5e02892337746ef5b6a1bf3ed5910142"}, ] - -[[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ +packaging = [ {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] - -[[package]] -name = "pathspec" -version = "0.11.2" -description = "Utility library for gitignore style pattern matching of file paths." -optional = true -python-versions = ">=3.7" -files = [ +pathspec = [ {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] - -[[package]] -name = "pillow" -version = "9.5.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.7" -files = [ +pillow = [ {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, @@ -882,65 +1342,19 @@ files = [ {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, ] - -[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 = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -optional = false -python-versions = ">=3.6" -files = [ +pkgutil-resolve-name = [ {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, ] - -[[package]] -name = "platformdirs" -version = "3.11.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -optional = true -python-versions = ">=3.7" -files = [ +platformdirs = [ {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, ] - -[package.dependencies] -typing-extensions = {version = ">=4.7.1", markers = "python_version < \"3.8\""} - -[package.extras] -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.2.0" -description = "plugin and hook calling mechanisms for python" -optional = true -python-versions = ">=3.7" -files = [ +pluggy = [ {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pydantic" -version = "1.10.13" -description = "Data validation and settings management using python type hints" -optional = false -python-versions = ">=3.7" -files = [ +pydantic = [ {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, @@ -978,35 +1392,11 @@ files = [ {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, ] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ +pygments = [ {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 = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -optional = false -python-versions = ">=3.7" -files = [ +pyrsistent = [ {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"}, @@ -1035,67 +1425,19 @@ files = [ {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.4.2" -description = "pytest: simple powerful testing with Python" -optional = true -python-versions = ">=3.7" -files = [ +pytest = [ {file = "pytest-7.4.2-py3-none-any.whl", hash = "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002"}, {file = "pytest-7.4.2.tar.gz", hash = "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"}, ] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-rerunfailures" -version = "12.0" -description = "pytest plugin to re-run tests to eliminate flaky failures" -optional = true -python-versions = ">=3.7" -files = [ +pytest-rerunfailures = [ {file = "pytest-rerunfailures-12.0.tar.gz", hash = "sha256:784f462fa87fe9bdf781d0027d856b47a4bfe6c12af108f6bd887057a917b48e"}, {file = "pytest_rerunfailures-12.0-py3-none-any.whl", hash = "sha256:9a1afd04e21b8177faf08a9bbbf44de7a0fe3fc29f8ddbe83b9684bd5f8f92a9"}, ] - -[package.dependencies] -importlib-metadata = {version = ">=1", markers = "python_version < \"3.8\""} -packaging = ">=17.1" -pytest = ">=6.2" - -[[package]] -name = "python-dotenv" -version = "1.0.0" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.8" -files = [ +python-dotenv = [ {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 = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ +pywin32 = [ {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"}, @@ -1108,17 +1450,10 @@ files = [ {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 = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] +pyyaml = [ {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"}, @@ -1160,75 +1495,38 @@ files = [ {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 = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ +requests = [ {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,<4" -idna = ">=2.5,<4" -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 = "responses" -version = "0.22.0" -description = "A utility library for mocking out the `requests` Python library." -optional = true -python-versions = ">=3.7" -files = [ +responses = [ {file = "responses-0.22.0-py3-none-any.whl", hash = "sha256:dcf294d204d14c436fddcc74caefdbc5764795a40ff4e6a7740ed8ddbf3294be"}, {file = "responses-0.22.0.tar.gz", hash = "sha256:396acb2a13d25297789a5866b4881cf4e46ffd49cc26c43ab1117f40b973102e"}, ] - -[package.dependencies] -requests = ">=2.22.0,<3.0" -toml = "*" -types-toml = "*" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} -urllib3 = ">=1.25.10" - -[package.extras] -tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "types-requests"] - -[[package]] -name = "rich" -version = "13.6.0" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.7.0" -files = [ +rich = [ {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, ] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "scikit-learn" -version = "1.3.1" -description = "A set of python modules for machine learning and data mining" -optional = true -python-versions = ">=3.8" -files = [ +ruff = [ + {file = "ruff-0.0.292-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:02f29db018c9d474270c704e6c6b13b18ed0ecac82761e4fcf0faa3728430c96"}, + {file = "ruff-0.0.292-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:69654e564342f507edfa09ee6897883ca76e331d4bbc3676d8a8403838e9fade"}, + {file = "ruff-0.0.292-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c3c91859a9b845c33778f11902e7b26440d64b9d5110edd4e4fa1726c41e0a4"}, + {file = "ruff-0.0.292-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f4476f1243af2d8c29da5f235c13dca52177117935e1f9393f9d90f9833f69e4"}, + {file = "ruff-0.0.292-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be8eb50eaf8648070b8e58ece8e69c9322d34afe367eec4210fdee9a555e4ca7"}, + {file = "ruff-0.0.292-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:9889bac18a0c07018aac75ef6c1e6511d8411724d67cb879103b01758e110a81"}, + {file = "ruff-0.0.292-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6bdfabd4334684a4418b99b3118793f2c13bb67bf1540a769d7816410402a205"}, + {file = "ruff-0.0.292-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7c77c53bfcd75dbcd4d1f42d6cabf2485d2e1ee0678da850f08e1ab13081a8"}, + {file = "ruff-0.0.292-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e087b24d0d849c5c81516ec740bf4fd48bf363cfb104545464e0fca749b6af9"}, + {file = "ruff-0.0.292-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f160b5ec26be32362d0774964e218f3fcf0a7da299f7e220ef45ae9e3e67101a"}, + {file = "ruff-0.0.292-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ac153eee6dd4444501c4bb92bff866491d4bfb01ce26dd2fff7ca472c8df9ad0"}, + {file = "ruff-0.0.292-py3-none-musllinux_1_2_i686.whl", hash = "sha256:87616771e72820800b8faea82edd858324b29bb99a920d6aa3d3949dd3f88fb0"}, + {file = "ruff-0.0.292-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b76deb3bdbea2ef97db286cf953488745dd6424c122d275f05836c53f62d4016"}, + {file = "ruff-0.0.292-py3-none-win32.whl", hash = "sha256:e854b05408f7a8033a027e4b1c7f9889563dd2aca545d13d06711e5c39c3d003"}, + {file = "ruff-0.0.292-py3-none-win_amd64.whl", hash = "sha256:f27282bedfd04d4c3492e5c3398360c9d86a295be00eccc63914438b4ac8a83c"}, + {file = "ruff-0.0.292-py3-none-win_arm64.whl", hash = "sha256:7f67a69c8f12fbc8daf6ae6d36705037bde315abf8b82b6e1f4c9e74eb750f68"}, + {file = "ruff-0.0.292.tar.gz", hash = "sha256:1093449e37dd1e9b813798f6ad70932b57cf614e5c2b5c51005bf67d55db33ac"}, +] +scikit-learn = [ {file = "scikit-learn-1.3.1.tar.gz", hash = "sha256:1a231cced3ee3fa04756b4a7ab532dc9417acd581a330adff5f2c01ac2831fcf"}, {file = "scikit_learn-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3153612ff8d36fa4e35ef8b897167119213698ea78f3fd130b4068e6f8d2da5a"}, {file = "scikit_learn-1.3.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:6bb9490fdb8e7e00f1354621689187bef3cab289c9b869688f805bf724434755"}, @@ -1240,6 +1538,11 @@ files = [ {file = "scikit_learn-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f66eddfda9d45dd6cadcd706b65669ce1df84b8549875691b1f403730bdef217"}, {file = "scikit_learn-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6448c37741145b241eeac617028ba6ec2119e1339b1385c9720dae31367f2be"}, {file = "scikit_learn-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:c413c2c850241998168bbb3bd1bb59ff03b1195a53864f0b80ab092071af6028"}, + {file = "scikit_learn-1.3.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ef540e09873e31569bc8b02c8a9f745ee04d8e1263255a15c9969f6f5caa627f"}, + {file = "scikit_learn-1.3.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:9147a3a4df4d401e618713880be023e36109c85d8569b3bf5377e6cd3fecdeac"}, + {file = "scikit_learn-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2cd3634695ad192bf71645702b3df498bd1e246fc2d529effdb45a06ab028b4"}, + {file = "scikit_learn-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c275a06c5190c5ce00af0acbb61c06374087949f643ef32d355ece12c4db043"}, + {file = "scikit_learn-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:0e1aa8f206d0de814b81b41d60c1ce31f7f2c7354597af38fae46d9c47c45122"}, {file = "scikit_learn-1.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:52b77cc08bd555969ec5150788ed50276f5ef83abb72e6f469c5b91a0009bbca"}, {file = "scikit_learn-1.3.1-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a683394bc3f80b7c312c27f9b14ebea7766b1f0a34faf1a2e9158d80e860ec26"}, {file = "scikit_learn-1.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15d964d9eb181c79c190d3dbc2fff7338786bf017e9039571418a1d53dab236"}, @@ -1251,26 +1554,7 @@ files = [ {file = "scikit_learn-1.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d993fb70a1d78c9798b8f2f28705bfbfcd546b661f9e2e67aa85f81052b9c53"}, {file = "scikit_learn-1.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:66f7bb1fec37d65f4ef85953e1df5d3c98a0f0141d394dcdaead5a6de9170347"}, ] - -[package.dependencies] -joblib = ">=1.1.1" -numpy = ">=1.17.3,<2.0" -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.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.10.1" -description = "Fundamental algorithms for scientific computing in Python" -optional = true -python-versions = "<3.12,>=3.8" -files = [ +scipy = [ {file = "scipy-1.10.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e7354fd7527a4b0377ce55f286805b34e8c54b91be865bac273f527e1b839019"}, {file = "scipy-1.10.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4b3f429188c66603a1a5c549fb414e4d3bdc2a24792e061ffbd607d3d75fd84e"}, {file = "scipy-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1553b5dcddd64ba9a0d95355e63fe6c3fc303a8fd77c7bc91e77d61363f7433f"}, @@ -1293,71 +1577,23 @@ files = [ {file = "scipy-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ff7f37b1bf4417baca958d254e8e2875d0cc23aaadbe65b3d5b3077b0eb23ea"}, {file = "scipy-1.10.1.tar.gz", hash = "sha256:2cf9dfb80a7b4589ba4c40ce7588986d6d5cebc5457cad2c2880f6bc2d42f3a5"}, ] - -[package.dependencies] -numpy = ">=1.19.5,<1.27.0" - -[package.extras] -dev = ["click", "doit (>=0.36.0)", "flake8", "mypy", "pycodestyle", "pydevtool", "rich-click", "typing_extensions"] -doc = ["matplotlib (>2)", "numpydoc", "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 = "setuptools" -version = "68.0.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = true -python-versions = ">=3.7" -files = [ +setuptools = [ {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] - -[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-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.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-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]] -name = "threadpoolctl" -version = "3.2.0" -description = "threadpoolctl" -optional = true -python-versions = ">=3.8" -files = [ +threadpoolctl = [ {file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"}, {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"}, ] - -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ +toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = true -python-versions = ">=3.7" -files = [ +tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] - -[[package]] -name = "torch" -version = "1.13.1" -description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -optional = true -python-versions = ">=3.7.0" -files = [ +torch = [ {file = "torch-1.13.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:fd12043868a34a8da7d490bf6db66991108b00ffbeecb034228bfcbbd4197143"}, {file = "torch-1.13.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d9fe785d375f2e26a5d5eba5de91f89e6a3be5d11efb497e76705fdf93fa3c2e"}, {file = "torch-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:98124598cdff4c287dbf50f53fb455f0c1e3a88022b39648102957f3445e9b76"}, @@ -1380,24 +1616,7 @@ files = [ {file = "torch-1.13.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:6930791efa8757cb6974af73d4996b6b50c592882a324b8fb0589c6a9ba2ddaf"}, {file = "torch-1.13.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:e0df902a7c7dd6c795698532ee5970ce898672625635d885eade9976e5a04949"}, ] - -[package.dependencies] -nvidia-cublas-cu11 = {version = "11.10.3.66", markers = "platform_system == \"Linux\""} -nvidia-cuda-nvrtc-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\""} -nvidia-cuda-runtime-cu11 = {version = "11.7.99", markers = "platform_system == \"Linux\""} -nvidia-cudnn-cu11 = {version = "8.5.0.96", markers = "platform_system == \"Linux\""} -typing-extensions = "*" - -[package.extras] -opt-einsum = ["opt-einsum (>=3.3)"] - -[[package]] -name = "torchvision" -version = "0.14.1" -description = "image and video datasets and models for torch deep learning" -optional = true -python-versions = ">=3.7" -files = [ +torchvision = [ {file = "torchvision-0.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb05dd9dd3af5428fee525400759daf8da8e4caec45ddd6908cfb36571f6433"}, {file = "torchvision-0.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8d0766ea92affa7af248e327dd85f7c9cfdf51a57530b43212d4e1858548e9d7"}, {file = "torchvision-0.14.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:6d7b35653113664ea3fdcb71f515cfbf29d2fe393000fd8aaff27a1284de6908"}, @@ -1418,44 +1637,11 @@ files = [ {file = "torchvision-0.14.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:eaed58cf454323ed9222d4e0dd5fb897064f454b400696e03a5200e65d3a1e76"}, {file = "torchvision-0.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:b337e1245ca4353623dd563c03cd8f020c2496a7c5d12bba4d2e381999c766e0"}, ] - -[package.dependencies] -numpy = "*" -pillow = ">=5.3.0,<8.3.dev0 || >=8.4.dev0" -requests = "*" -torch = "1.13.1" -typing-extensions = "*" - -[package.extras] -scipy = ["scipy"] - -[[package]] -name = "tqdm" -version = "4.66.1" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ +tqdm = [ {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 = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "typed-ast" -version = "1.5.5" -description = "a fork of Python 2 and 3 ast modules with type comment support" -optional = true -python-versions = ">=3.6" -files = [ +typed-ast = [ {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, @@ -1498,61 +1684,23 @@ files = [ {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, ] - -[[package]] -name = "types-pyyaml" -version = "6.0.12.12" -description = "Typing stubs for PyYAML" -optional = false -python-versions = "*" -files = [ +types-pyyaml = [ {file = "types-PyYAML-6.0.12.12.tar.gz", hash = "sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062"}, {file = "types_PyYAML-6.0.12.12-py3-none-any.whl", hash = "sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24"}, ] - -[[package]] -name = "types-requests" -version = "2.31.0.8" -description = "Typing stubs for requests" -optional = false -python-versions = ">=3.7" -files = [ +types-requests = [ {file = "types-requests-2.31.0.8.tar.gz", hash = "sha256:e1b325c687b3494a2f528ab06e411d7092cc546cc9245c000bacc2fca5ae96d4"}, {file = "types_requests-2.31.0.8-py3-none-any.whl", hash = "sha256:39894cbca3fb3d032ed8bdd02275b4273471aa5668564617cc1734b0a65ffdf8"}, ] - -[package.dependencies] -urllib3 = ">=2" - -[[package]] -name = "types-toml" -version = "0.10.8.7" -description = "Typing stubs for toml" -optional = true -python-versions = "*" -files = [ +types-toml = [ {file = "types-toml-0.10.8.7.tar.gz", hash = "sha256:58b0781c681e671ff0b5c0319309910689f4ab40e8a2431e205d70c94bb6efb1"}, {file = "types_toml-0.10.8.7-py3-none-any.whl", hash = "sha256:61951da6ad410794c97bec035d59376ce1cbf4453dc9b6f90477e81e4442d631"}, ] - -[[package]] -name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -files = [ +typing-extensions = [ {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 = "upolygon" -version = "0.1.10" -description = "Collection of fast polygon operations for DL" -optional = false -python-versions = ">=3.6" -files = [ +upolygon = [ {file = "upolygon-0.1.10-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:363c0e10768c64da5563242d4c4b0a83ff001d7d482b41bf8817381e31d61e26"}, {file = "upolygon-0.1.10-cp310-cp310-win_amd64.whl", hash = "sha256:480749a637feaab7da667be4c62f64472082ef74c9059ec2130ab8a3e2f4411d"}, {file = "upolygon-0.1.10-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:c0604ce5536f9fc43f17020e0d71b090cc706bc9a2e6f2527e6915fa8789f58a"}, @@ -1563,64 +1711,15 @@ files = [ {file = "upolygon-0.1.10-cp39-cp39-win_amd64.whl", hash = "sha256:fc73ae4db1551b0d433f98a4092ec71a64bf0eee5da4fff5ca0d95a410e07549"}, {file = "upolygon-0.1.10.tar.gz", hash = "sha256:ab983bc1a146b58b6712be35d0de1656d89f3432f318b1e9ba6b990849192827"}, ] - -[package.dependencies] -numpy = "*" - -[[package]] -name = "urllib3" -version = "2.0.6" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.7" -files = [ +urllib3 = [ {file = "urllib3-2.0.6-py3-none-any.whl", hash = "sha256:7a7c7003b000adf9e7ca2a377c9688bbc54ed41b985789ed576570342a375cd2"}, {file = "urllib3-2.0.6.tar.gz", hash = "sha256:b19e1a85d206b56d7df1d5e683df4a7725252a964e3993648dd0fb5a1c157564"}, ] - -[package.extras] -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 = "wheel" -version = "0.41.2" -description = "A built-package format for Python" -optional = true -python-versions = ">=3.7" -files = [ +wheel = [ {file = "wheel-0.41.2-py3-none-any.whl", hash = "sha256:75909db2664838d015e3d9139004ee16711748a52c8f336b52882266540215d8"}, {file = "wheel-0.41.2.tar.gz", hash = "sha256:0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985"}, ] - -[package.extras] -test = ["pytest (>=6.0.0)", "setuptools (>=65)"] - -[[package]] -name = "zipp" -version = "3.15.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.7" -files = [ +zipp = [ {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, ] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] - -[extras] -dev = ["black", "debugpy", "isort", "mypy", "pytest", "pytest-rerunfailures", "responses"] -medical = ["connected-components-3d", "nibabel"] -ml = ["scikit-learn", "torch", "torchvision"] -ocv = ["opencv-python-headless"] -test = ["pytest", "responses"] - -[metadata] -lock-version = "2.0" -python-versions = ">=3.7.0,<3.11" -content-hash = "9865d21e7a68ded971e8b79d8d7c3b3ec669bb97eadce284fda60b892540ad2d" diff --git a/pyproject.toml b/pyproject.toml index e341f2ea0..e12960cd1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -95,7 +95,7 @@ mypy = { version = "^1.5", optional = true, python = ">=3.8" } responses = { version = "^0.22.0", optional = true } pytest = { version = "^7.2.1", optional = true } debugpy = { version = "^1.6.5", optional = true } -types-requests = { version = "^2.28.11.8" } +types-requests = "^2.28.11.8" mpire = { version = "^2.7.0" } tqdm = "^4.64.1" types-pyyaml = "^6.0.12.9" @@ -103,6 +103,7 @@ python-dotenv = { version = "^1.0.0", python = ">3.8" } opencv-python-headless = { version = "^4.8.0.76", optional = true } pyyaml = "^6.0.1" pytest-rerunfailures = { version = "^12.0", optional = true } +ruff = { version = "^0.0.292", optional = true } [tool.poetry.extras] dev = [ @@ -115,6 +116,7 @@ dev = [ "pytest", "flake8-pyproject", "pytest-rerunfailures", + "ruff", ] test = ["responses", "pytest", "flake8-pyproject"] ml = ["torch", "torchvision", "scikit-learn", "albumentations"]