From e1c0fe8bdc36a34ae6787514694ba5b3d6a28761 Mon Sep 17 00:00:00 2001 From: Sergiy Popovych Date: Mon, 17 Jul 2023 23:47:22 +0000 Subject: [PATCH 1/6] feat: builder lambdas to be nameable for progress report --- zetta_utils/builder/build.py | 5 ++++- zetta_utils/builder/built_in_registrations.py | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/zetta_utils/builder/build.py b/zetta_utils/builder/build.py index c1efbac97..85b0b22c3 100644 --- a/zetta_utils/builder/build.py +++ b/zetta_utils/builder/build.py @@ -171,9 +171,12 @@ class BuilderPartial: spec: dict[str, Any] _built_spec_kwargs: dict[str, Any] | None = attrs.field(init=False, default=None) + name: str | None = None def get_display_name(self): # pragma: no cover # pretty print - if SPECIAL_KEYS["type"] in self.spec: + if self.name is not None: + return self.name + elif SPECIAL_KEYS["type"] in self.spec: return self.spec[SPECIAL_KEYS["type"]] else: return "BuilderPartial" diff --git a/zetta_utils/builder/built_in_registrations.py b/zetta_utils/builder/built_in_registrations.py index 83715fafd..7e9070674 100644 --- a/zetta_utils/builder/built_in_registrations.py +++ b/zetta_utils/builder/built_in_registrations.py @@ -11,7 +11,7 @@ @register("lambda", False) -def efficient_parse_lambda_str(lambda_str: str) -> Callable: +def efficient_parse_lambda_str(lambda_str: str, name: str | None = None) -> Callable: """Parses strings that are lambda functions""" if not isinstance(lambda_str, str): raise TypeError("`lambda_str` must be a string.") @@ -20,7 +20,7 @@ def efficient_parse_lambda_str(lambda_str: str) -> Callable: if len(lambda_str) > LAMBDA_STR_MAX_LENGTH: raise ValueError(f"`lambda_str` must be at most {LAMBDA_STR_MAX_LENGTH} characters.") - return BuilderPartial(spec={"@type": "invoke_lambda_str", "lambda_str": lambda_str}) + return BuilderPartial(spec={"@type": "invoke_lambda_str", "lambda_str": lambda_str}, name=name) @register("invoke_lambda_str", False) From 91cfa3cb41113e4fec7a32e6750c7293f60c8dce Mon Sep 17 00:00:00 2001 From: Sergiy Popovych Date: Tue, 18 Jul 2023 00:15:45 +0000 Subject: [PATCH 2/6] chore: bump typeguard version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 608261844..114204b23 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,7 @@ urls = {Homepage = "https://github.com/zettaai/zetta_utils"} requires-python = ">3.8,<3.11" dependencies = [ "attrs >= 21.3", - "typeguard @ git+https://github.com/agronholm/typeguard.git@63b28186a9d00bb489f282f80b76834ac3d057fc", + "typeguard @ git+https://github.com/agronholm/typeguard.git@f377be389765ed0db104b41d78fce3c45e72e149", "cachetools >= 5.2.0", "fsspec >= 2022.8.2", "rich >= 12.6.0", From c2784158938ba23084b2cd6b572cd81edd66f7fe Mon Sep 17 00:00:00 2001 From: Sergiy Popovych Date: Mon, 24 Jul 2023 16:48:44 +0000 Subject: [PATCH 3/6] chore: retrograde typeguard commit version --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 114204b23..0a24b045b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,7 +23,8 @@ urls = {Homepage = "https://github.com/zettaai/zetta_utils"} requires-python = ">3.8,<3.11" dependencies = [ "attrs >= 21.3", - "typeguard @ git+https://github.com/agronholm/typeguard.git@f377be389765ed0db104b41d78fce3c45e72e149", + "typeguard", + "typeguard @ git+https://github.com/agronholm/typeguard.git@63b28186a9d00bb489f282f80b76834ac3d057fc", "cachetools >= 5.2.0", "fsspec >= 2022.8.2", "rich >= 12.6.0", From 5a6e0173c65779df9c0d7a53b9cf7824fda7acf3 Mon Sep 17 00:00:00 2001 From: Sergiy Popovych Date: Mon, 24 Jul 2023 17:47:23 +0000 Subject: [PATCH 4/6] chore: further bump typeguard --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0a24b045b..84eb412a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ requires-python = ">3.8,<3.11" dependencies = [ "attrs >= 21.3", "typeguard", - "typeguard @ git+https://github.com/agronholm/typeguard.git@63b28186a9d00bb489f282f80b76834ac3d057fc", + "typeguard @ git+https://github.com/agronholm/typeguard.git@f377be389765ed0db104b41d78fce3c45e72e149", "cachetools >= 5.2.0", "fsspec >= 2022.8.2", "rich >= 12.6.0", From b2e2ccbc821e70153811b31f913a94cda2b99109 Mon Sep 17 00:00:00 2001 From: Sergiy Popovych Date: Mon, 24 Jul 2023 17:48:27 +0000 Subject: [PATCH 5/6] fix: better typing annotations --- zetta_utils/builder/build.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/zetta_utils/builder/build.py b/zetta_utils/builder/build.py index 85b0b22c3..a73710491 100644 --- a/zetta_utils/builder/build.py +++ b/zetta_utils/builder/build.py @@ -2,7 +2,7 @@ from __future__ import annotations import json -from typing import Any, Callable, Final, Optional, Union +from typing import Any, Callable, Final import attrs from typeguard import typechecked @@ -22,8 +22,8 @@ @typechecked def build( - spec: Optional[Union[dict, list]] = None, - path: Optional[str] = None, + spec: dict | list | None = None, + path: str | None = None, ) -> Any: """Build an object from the given spec. @@ -172,6 +172,7 @@ class BuilderPartial: spec: dict[str, Any] _built_spec_kwargs: dict[str, Any] | None = attrs.field(init=False, default=None) name: str | None = None + # name: str | None = None def get_display_name(self): # pragma: no cover # pretty print if self.name is not None: From d595bd087bf5b0ddf388a68f2bd462da93b07e21 Mon Sep 17 00:00:00 2001 From: Sergiy Popovych Date: Mon, 24 Jul 2023 18:10:11 +0000 Subject: [PATCH 6/6] fix: Use `Union` to make typeguard happy --- zetta_utils/layer/volumetric/layer_set/layer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zetta_utils/layer/volumetric/layer_set/layer.py b/zetta_utils/layer/volumetric/layer_set/layer.py index 258b3b55e..279b6d42b 100644 --- a/zetta_utils/layer/volumetric/layer_set/layer.py +++ b/zetta_utils/layer/volumetric/layer_set/layer.py @@ -33,7 +33,7 @@ def __getitem__(self, idx: UserVolumetricIndex) -> dict[str, torch.Tensor]: return self.read_with_procs(idx=idx_backend) def __setitem__( - self, idx: UserVolumetricIndex, data: Mapping[str, torch.Tensor | int | float | bool] + self, idx: UserVolumetricIndex, data: Mapping[str, Union[torch.Tensor, int, float, bool]] ): idx_backend: VolumetricIndex | None = None idx_last: VolumetricIndex | None = None