From e49c093f48c7371aaad6ea44d2f3a613729d3978 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Thu, 7 May 2026 08:21:49 -0400
Subject: [PATCH] chore(deps): bump ty from 0.0.23 to 0.0.33 in /libs/sdk-py
(#7666)
Bumps the minor-and-patch group with 1 update in the /libs/sdk-py
directory: [ty](https://github.com/astral-sh/ty).
Updates `ty` from 0.0.23 to 0.0.33
Release notes
Sourced from ty's
releases.
0.0.33
Release Notes
Released on 2026-04-28.
Notable changes
-
ty now prefers the declared type of an annotated assignment in more
situations (#24802).
Consider this example:
from some_library import untyped_function
threshold: int | None = 0
result: str = untyped_function()
ty previously favored the inferred type of the right hand
side expression when threshold and result were
used. This is useful for threshold, as it allows something
like threshold += 1 to work without an error: we know that
threshold could later become None, but
right now, we see that it is an int. However, for
result, the inferred type is Unknown. This is
not a useful type and it can lead to false negatives. Starting
with this release, ty will therefore prefer
the declared type if the inferred and declared types are mutually
assignable. In the above example, threshold will still
be inferred as int (or rather Literal[1]), but
result will now be inferred as str. If you
previously added casts to work around this behavior, you
should be able to remove them after upgrading.
Bug fixes
- Fix reporting of annotation-only locals as unused (#24811)
- Fix project and workspace selection (#24824)
- Fix go-to definition for generic classes (#24714)
- Fix receiver coloring for aliased decorators (#24884)
LSP server
- Add support for go-to definition in literal enum member inlay hints
(#24792)
- Add support for "baking" keyword argument inlay hints into
the source code (#24667)
- Don't allow inlay hint edits when introducing a non global scope
symbol (#24797)
- Omit semantic highlighting for unresolved symbols (#24718)
Core type checking
- Support narrowing with aliased conditional expressions (#24302)
- Model short-circuiting control flow in Boolean expressions (#24458)
- Handle
finally blocks where all
try/except blocks are terminal (#24882)
- Detect invalid
ClassVar vs instance-attribute overrides
(#24767)
- Emit diagnostic for invalid uses of
Unpack[...] (#24868)
- Infer lambda parameter types with
Callable type context
(#24317)
- Support
** unpacking of TypedDict in
dict-literal assignments (#24703)
- Support
Unpack[TypedDict] in **kwargs
signatures (#24653)
- Treat
[*xs] as an irrefutable pattern when matching on
Sequence (#24787)
- Improve generics solving for unions in invariant positions (#24698)
- Improve generics solving for unions when matching against protocols
(#24837)
Diagnostics
... (truncated)
Changelog
Sourced from ty's
changelog.
0.0.33
Released on 2026-04-28.
Notable changes
-
ty now prefers the declared type of an annotated assignment in more
situations (#24802).
Consider this example:
from some_library import untyped_function
threshold: int | None = 0
result: str = untyped_function()
ty previously favored the inferred type of the right hand
side expression when threshold and result were
used. This is useful for threshold, as it allows something
like threshold += 1 to work without an error: we know that
threshold could later become None, but
right now, we see that it is an int. However, for
result, the inferred type is Unknown. This is
not a useful type and it can lead to false negatives. Starting
with this release, ty will therefore prefer
the declared type if the inferred and declared types are mutually
assignable. In the above example, threshold will still
be inferred as int (or rather Literal[1]), but
result will now be inferred as str. If you
previously added casts to work around this behavior, you
should be able to remove them after upgrading.
Bug fixes
- Fix reporting of annotation-only locals as unused (#24811)
- Fix project and workspace selection (#24824)
- Fix go-to definition for generic classes (#24714)
- Fix receiver coloring for aliased decorators (#24884)
LSP server
- Add support for go-to definition in literal enum member inlay hints
(#24792)
- Add support for "baking" keyword argument inlay hints into
the source code (#24667)
- Don't allow inlay hint edits when introducing a non global scope
symbol (#24797)
- Omit semantic highlighting for unresolved symbols (#24718)
Core type checking
- Support narrowing with aliased conditional expressions (#24302)
- Model short-circuiting control flow in Boolean expressions (#24458)
- Handle
finally blocks where all
try/except blocks are terminal (#24882)
- Detect invalid
ClassVar vs instance-attribute overrides
(#24767)
- Emit diagnostic for invalid uses of
Unpack[...] (#24868)
- Infer lambda parameter types with
Callable type context
(#24317)
- Support
** unpacking of TypedDict in
dict-literal assignments (#24703)
- Support
Unpack[TypedDict] in **kwargs
signatures (#24653)
- Treat
[*xs] as an irrefutable pattern when matching on
Sequence (#24787)
- Improve generics solving for unions in invariant positions (#24698)
- Improve generics solving for unions when matching against protocols
(#24837)
Diagnostics
- Add error context to
invalid-return-type diagnostics,
invalid-yield diagnostics, attribute assignment diagnostics
(#24770,
#24771)
... (truncated)
Commits
---------
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: John Kennedy <65985482+jkennedyvz@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context)
---
libs/langgraph/uv.lock | 4 +-
libs/prebuilt/uv.lock | 4 +-
libs/sdk-py/langgraph_sdk/_async/client.py | 6 +--
libs/sdk-py/langgraph_sdk/_async/runs.py | 2 +-
.../sdk-py/langgraph_sdk/_shared/utilities.py | 7 ++--
libs/sdk-py/langgraph_sdk/_sync/client.py | 2 +-
libs/sdk-py/langgraph_sdk/_sync/runs.py | 2 +-
libs/sdk-py/langgraph_sdk/cache.py | 13 +++---
libs/sdk-py/langgraph_sdk/errors.py | 2 +-
libs/sdk-py/langgraph_sdk/runtime.py | 2 +-
libs/sdk-py/langgraph_sdk/sse.py | 6 +--
libs/sdk-py/pyproject.toml | 2 +-
libs/sdk-py/tests/test_client_stream.py | 4 +-
libs/sdk-py/tests/test_encryption.py | 2 +-
libs/sdk-py/uv.lock | 40 +++++++++----------
15 files changed, 51 insertions(+), 47 deletions(-)
diff --git a/libs/langgraph/uv.lock b/libs/langgraph/uv.lock
index ed05cd4ae..776f87957 100644
--- a/libs/langgraph/uv.lock
+++ b/libs/langgraph/uv.lock
@@ -1849,14 +1849,14 @@ dev = [
{ name = "pytest-watch" },
{ name = "ruff", specifier = "==0.15.12" },
{ name = "starlette" },
- { name = "ty", specifier = "==0.0.23" },
+ { name = "ty", specifier = "==0.0.33" },
]
lint = [
{ name = "codespell" },
{ name = "mypy", specifier = "==1.20.2" },
{ name = "ruff", specifier = "==0.15.12" },
{ name = "starlette" },
- { name = "ty", specifier = "==0.0.23" },
+ { name = "ty", specifier = "==0.0.33" },
]
test = [
{ name = "pytest" },
diff --git a/libs/prebuilt/uv.lock b/libs/prebuilt/uv.lock
index 4f00624e6..09f5a8805 100644
--- a/libs/prebuilt/uv.lock
+++ b/libs/prebuilt/uv.lock
@@ -618,14 +618,14 @@ dev = [
{ name = "pytest-watch" },
{ name = "ruff", specifier = "==0.15.12" },
{ name = "starlette" },
- { name = "ty", specifier = "==0.0.23" },
+ { name = "ty", specifier = "==0.0.33" },
]
lint = [
{ name = "codespell" },
{ name = "mypy", specifier = "==1.20.2" },
{ name = "ruff", specifier = "==0.15.12" },
{ name = "starlette" },
- { name = "ty", specifier = "==0.0.23" },
+ { name = "ty", specifier = "==0.0.33" },
]
test = [
{ name = "pytest" },
diff --git a/libs/sdk-py/langgraph_sdk/_async/client.py b/libs/sdk-py/langgraph_sdk/_async/client.py
index 3087ead5c..dc852c41f 100644
--- a/libs/sdk-py/langgraph_sdk/_async/client.py
+++ b/libs/sdk-py/langgraph_sdk/_async/client.py
@@ -110,7 +110,7 @@ def get_client(
if url is None:
url = "http://api"
if os.environ.get("__LANGGRAPH_DEFER_LOOPBACK_TRANSPORT") == "true":
- transport = get_asgi_transport()(app=None, root_path="/noauth") # type: ignore[invalid-argument-type]
+ transport = get_asgi_transport()(app=None, root_path="/noauth") # ty: ignore[invalid-argument-type]
_registered_transports.append(transport)
else:
try:
@@ -122,7 +122,7 @@ def get_client(
"Failed to connect to in-process LangGraph server. Deferring configuration.",
exc_info=True,
)
- transport = get_asgi_transport()(app=None, root_path="/noauth") # type: ignore[invalid-argument-type]
+ transport = get_asgi_transport()(app=None, root_path="/noauth") # ty: ignore[invalid-argument-type]
_registered_transports.append(transport)
if transport is None:
@@ -131,7 +131,7 @@ def get_client(
base_url=url,
transport=transport,
timeout=(
- httpx.Timeout(timeout) # type: ignore[arg-type]
+ httpx.Timeout(timeout) # ty: ignore[invalid-argument-type]
if timeout is not None
else httpx.Timeout(connect=5, read=300, write=300, pool=5)
),
diff --git a/libs/sdk-py/langgraph_sdk/_async/runs.py b/libs/sdk-py/langgraph_sdk/_async/runs.py
index 587d23e7d..96f155b53 100644
--- a/libs/sdk-py/langgraph_sdk/_async/runs.py
+++ b/libs/sdk-py/langgraph_sdk/_async/runs.py
@@ -49,7 +49,7 @@ async def _wrap_stream_v2(
async for part in raw:
v2 = _sse_to_v2_dict(part.event, part.data)
if v2 is not None:
- yield v2
+ yield v2 # ty: ignore[invalid-yield]
class RunsClient:
diff --git a/libs/sdk-py/langgraph_sdk/_shared/utilities.py b/libs/sdk-py/langgraph_sdk/_shared/utilities.py
index c7b2583e2..e65c3b237 100644
--- a/libs/sdk-py/langgraph_sdk/_shared/utilities.py
+++ b/libs/sdk-py/langgraph_sdk/_shared/utilities.py
@@ -144,8 +144,9 @@ def _resolve_timezone(tz: str | tzinfo | ZoneInfo | None) -> str | None:
return tz
if isinstance(tz, tzinfo):
# ZoneInfo objects have a .key attribute with the IANA name
- if hasattr(tz, "key"):
- return tz.key # type: ignore[union-attr]
+ key = getattr(tz, "key", None)
+ if isinstance(key, str):
+ return key
# Fall back to tzname for fixed-offset timezones like datetime.timezone.utc
name = tz.tzname(None)
if name is not None:
@@ -209,7 +210,7 @@ def configure_loopback_transports(app: Any) -> None:
@functools.lru_cache(maxsize=1)
def get_asgi_transport() -> type[httpx.ASGITransport]:
try:
- from langgraph_api import asgi_transport # type: ignore[unresolved-import]
+ from langgraph_api import asgi_transport # ty: ignore[unresolved-import]
return asgi_transport.ASGITransport
except ImportError:
diff --git a/libs/sdk-py/langgraph_sdk/_sync/client.py b/libs/sdk-py/langgraph_sdk/_sync/client.py
index 1a0d641e2..0d943b554 100644
--- a/libs/sdk-py/langgraph_sdk/_sync/client.py
+++ b/libs/sdk-py/langgraph_sdk/_sync/client.py
@@ -77,7 +77,7 @@ def get_sync_client(
base_url=url,
transport=transport,
timeout=(
- httpx.Timeout(timeout) # type: ignore[arg-type]
+ httpx.Timeout(timeout) # ty: ignore[invalid-argument-type]
if timeout is not None
else httpx.Timeout(connect=5, read=300, write=300, pool=5)
),
diff --git a/libs/sdk-py/langgraph_sdk/_sync/runs.py b/libs/sdk-py/langgraph_sdk/_sync/runs.py
index 0a184d320..66323d31b 100644
--- a/libs/sdk-py/langgraph_sdk/_sync/runs.py
+++ b/libs/sdk-py/langgraph_sdk/_sync/runs.py
@@ -49,7 +49,7 @@ def _wrap_stream_v2_sync(
for part in raw:
v2 = _sse_to_v2_dict(part.event, part.data)
if v2 is not None:
- yield v2
+ yield v2 # ty: ignore[invalid-yield]
class SyncRunsClient:
diff --git a/libs/sdk-py/langgraph_sdk/cache.py b/libs/sdk-py/langgraph_sdk/cache.py
index bc6001d51..9b15dbec7 100644
--- a/libs/sdk-py/langgraph_sdk/cache.py
+++ b/libs/sdk-py/langgraph_sdk/cache.py
@@ -16,10 +16,10 @@ T = TypeVar("T")
CacheStatus = Literal["miss", "fresh", "stale", "expired"]
try:
- from langgraph_api.cache import ( # type: ignore[unresolved-import]
+ from langgraph_api.cache import ( # ty: ignore[unresolved-import]
cache_get as _cache_get,
)
- from langgraph_api.cache import ( # type: ignore[unresolved-import]
+ from langgraph_api.cache import ( # ty: ignore[unresolved-import]
cache_set as _cache_set,
)
except ImportError:
@@ -28,8 +28,8 @@ except ImportError:
try:
- from langgraph_api.cache import SWRResult # type: ignore[unresolved-import]
- from langgraph_api.cache import swr as _api_swr # type: ignore[unresolved-import]
+ from langgraph_api.cache import SWRResult # ty: ignore[unresolved-import]
+ from langgraph_api.cache import swr as _api_swr # ty: ignore[unresolved-import]
except ImportError:
_api_swr = None
@@ -40,7 +40,10 @@ except ImportError:
value: T
status: CacheStatus
- async def mutate(self, value: T = ...) -> T: # type: ignore[assignment]
+ async def mutate(
+ self,
+ value: T = ..., # ty: ignore[invalid-parameter-default]
+ ) -> T: # ty: ignore[empty-body]
"""Update or revalidate the cached value."""
...
diff --git a/libs/sdk-py/langgraph_sdk/errors.py b/libs/sdk-py/langgraph_sdk/errors.py
index e5f09ad1b..b2dfadeb2 100644
--- a/libs/sdk-py/langgraph_sdk/errors.py
+++ b/libs/sdk-py/langgraph_sdk/errors.py
@@ -37,7 +37,7 @@ class APIError(httpx.HTTPStatusError, LangGraphError):
req = response_or_request
response = None
- httpx.HTTPStatusError.__init__(self, message, request=req, response=response) # type: ignore[arg-type]
+ httpx.HTTPStatusError.__init__(self, message, request=req, response=response) # ty: ignore[invalid-argument-type]
LangGraphError.__init__(self, message)
self.request = req
diff --git a/libs/sdk-py/langgraph_sdk/runtime.py b/libs/sdk-py/langgraph_sdk/runtime.py
index 872c4f3de..04704c0fb 100644
--- a/libs/sdk-py/langgraph_sdk/runtime.py
+++ b/libs/sdk-py/langgraph_sdk/runtime.py
@@ -156,7 +156,7 @@ class _ExecutionRuntime(_ServerRuntimeBase[ContextT], Generic[ContextT]):
This API is in beta and may change in future releases.
"""
- context: ContextT = field(default=None) # type: ignore[assignment]
+ context: ContextT = field(default=None) # ty: ignore[invalid-assignment]
"""The graph run context, typed by the graph's `context_schema`.
Only available during `threads.create_run`.
diff --git a/libs/sdk-py/langgraph_sdk/sse.py b/libs/sdk-py/langgraph_sdk/sse.py
index 16aa0c8cf..9002d90dc 100644
--- a/libs/sdk-py/langgraph_sdk/sse.py
+++ b/libs/sdk-py/langgraph_sdk/sse.py
@@ -55,7 +55,7 @@ class BytesLineDecoder:
# Include any existing buffer in the first portion of the
# splitlines result.
self.buffer.extend(lines[0])
- lines = cast(list[BytesLike], [self.buffer, *lines[1:]])
+ lines = [self.buffer, *lines[1:]]
self.buffer = bytearray()
if not trailing_newline:
@@ -69,7 +69,7 @@ class BytesLineDecoder:
if not self.buffer and not self.trailing_cr:
return []
- lines = [self.buffer]
+ lines: list[BytesLike] = [self.buffer]
self.buffer = bytearray()
self.trailing_cr = False
return lines
@@ -102,7 +102,7 @@ class SSEDecoder:
sse = StreamPart(
event=self._event,
- data=orjson.loads(self._data) if self._data else None, # type: ignore[invalid-argument-type]
+ data=orjson.loads(self._data) if self._data else None, # ty: ignore[invalid-argument-type]
id=self.last_event_id,
)
diff --git a/libs/sdk-py/pyproject.toml b/libs/sdk-py/pyproject.toml
index 22f398e37..622d75873 100644
--- a/libs/sdk-py/pyproject.toml
+++ b/libs/sdk-py/pyproject.toml
@@ -33,7 +33,7 @@ lint = [
"ruff==0.15.12",
"codespell",
"mypy==1.20.2",
- "ty==0.0.23",
+ "ty==0.0.33",
"starlette",
]
dev = [
diff --git a/libs/sdk-py/tests/test_client_stream.py b/libs/sdk-py/tests/test_client_stream.py
index 9ac455f9f..9d37263a5 100644
--- a/libs/sdk-py/tests/test_client_stream.py
+++ b/libs/sdk-py/tests/test_client_stream.py
@@ -388,7 +388,7 @@ async def test_async_stream_v2_client_side_conversion() -> None:
event="values", data={"messages": [{"role": "user", "content": "hi"}]}
)
yield StreamPart(event="updates|sub:abc", data={"node": {"out": 1}})
- yield StreamPart(event="end", data=None) # type: ignore[arg-type]
+ yield StreamPart(event="end", data=None) # ty: ignore[invalid-argument-type]
parts: list[StreamPartV2] = [part async for part in _wrap_stream_v2(mock_stream())]
assert len(parts) == 3
@@ -420,7 +420,7 @@ def test_sync_stream_v2_client_side_conversion() -> None:
def mock_stream() -> Any:
yield StreamPart(event="metadata", data={"run_id": "r1"})
yield StreamPart(event="values", data={"state": "full"})
- yield StreamPart(event="end", data=None) # type: ignore[arg-type]
+ yield StreamPart(event="end", data=None) # ty: ignore[invalid-argument-type]
parts: list[StreamPartV2] = list(_wrap_stream_v2_sync(mock_stream()))
assert len(parts) == 2
diff --git a/libs/sdk-py/tests/test_encryption.py b/libs/sdk-py/tests/test_encryption.py
index a5f52db27..90804c2a1 100644
--- a/libs/sdk-py/tests/test_encryption.py
+++ b/libs/sdk-py/tests/test_encryption.py
@@ -67,6 +67,6 @@ class TestHandlerValidation:
with pytest.raises(TypeError, match="must accept exactly 2 parameters"):
- @encryption.encrypt.blob # type: ignore[arg-type]
+ @encryption.encrypt.blob # ty: ignore[invalid-argument-type]
async def wrong_params(ctx):
return ctx
diff --git a/libs/sdk-py/uv.lock b/libs/sdk-py/uv.lock
index 072876a6c..811e180a9 100644
--- a/libs/sdk-py/uv.lock
+++ b/libs/sdk-py/uv.lock
@@ -533,14 +533,14 @@ dev = [
{ name = "pytest-watch" },
{ name = "ruff", specifier = "==0.15.12" },
{ name = "starlette" },
- { name = "ty", specifier = "==0.0.23" },
+ { name = "ty", specifier = "==0.0.33" },
]
lint = [
{ name = "codespell" },
{ name = "mypy", specifier = "==1.20.2" },
{ name = "ruff", specifier = "==0.15.12" },
{ name = "starlette" },
- { name = "ty", specifier = "==0.0.23" },
+ { name = "ty", specifier = "==0.0.33" },
]
test = [
{ name = "pytest" },
@@ -1275,26 +1275,26 @@ wheels = [
[[package]]
name = "ty"
-version = "0.0.23"
+version = "0.0.33"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/75/ba/d3c998ff4cf6b5d75b39356db55fe1b7caceecc522b9586174e6a5dee6f7/ty-0.0.23.tar.gz", hash = "sha256:5fb05db58f202af366f80ef70f806e48f5237807fe424ec787c9f289e3f3a4ef", size = 5341461, upload-time = "2026-03-13T12:34:23.125Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/84/44/9478c50c266826c1bf30d1692e589755bffa8f1c0a3eb7af8a346c255991/ty-0.0.33.tar.gz", hash = "sha256:46d63bda07403322cb6c28ccfdd5536be916e13df725c29f7ccd0a21f06bd9e8", size = 5559373, upload-time = "2026-04-28T10:45:13.18Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f4/21/aab32603dfdfacd4819e52fa8c6074e7bd578218a5142729452fc6a62db6/ty-0.0.23-py3-none-linux_armv6l.whl", hash = "sha256:e810eef1a5f1cfc0731a58af8d2f334906a96835829767aed00026f1334a8dd7", size = 10329096, upload-time = "2026-03-13T12:34:09.432Z" },
- { url = "https://files.pythonhosted.org/packages/9f/a9/dd3287a82dce3df546ec560296208d4905dcf06346b6e18c2f3c63523bd1/ty-0.0.23-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e43d36bd89a151ddcad01acaeff7dcc507cb73ff164c1878d2d11549d39a061c", size = 10156631, upload-time = "2026-03-13T12:34:53.122Z" },
- { url = "https://files.pythonhosted.org/packages/0f/01/3f25909b02fac29bb0a62b2251f8d62e65d697781ffa4cf6b47a4c075c85/ty-0.0.23-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bd6a340969577b4645f231572c4e46012acba2d10d4c0c6570fe1ab74e76ae00", size = 9653211, upload-time = "2026-03-13T12:34:15.049Z" },
- { url = "https://files.pythonhosted.org/packages/d5/60/bfc0479572a6f4b90501c869635faf8d84c8c68ffc5dd87d04f049affabc/ty-0.0.23-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341441783e626eeb7b1ec2160432956aed5734932ab2d1c26f94d0c98b229937", size = 10156143, upload-time = "2026-03-13T12:34:34.468Z" },
- { url = "https://files.pythonhosted.org/packages/3a/81/8a93e923535a340f54bea20ff196f6b2787782b2f2f399bd191c4bc132d6/ty-0.0.23-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ce1dc66c26d4167e2c78d12fa870ef5a7ec9cc344d2baaa6243297cfa88bd52", size = 10136632, upload-time = "2026-03-13T12:34:28.832Z" },
- { url = "https://files.pythonhosted.org/packages/da/cb/2ac81c850c58acc9f976814404d28389c9c1c939676e32287b9cff61381e/ty-0.0.23-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bae1e7a294bf8528836f7617dc5c360ea2dddb63789fc9471ae6753534adca05", size = 10655025, upload-time = "2026-03-13T12:34:37.105Z" },
- { url = "https://files.pythonhosted.org/packages/b5/9b/bac771774c198c318ae699fc013d8cd99ed9caf993f661fba11238759244/ty-0.0.23-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2b162768764d9dc177c83fb497a51532bb67cbebe57b8fa0f2668436bf53f3c", size = 11230107, upload-time = "2026-03-13T12:34:20.751Z" },
- { url = "https://files.pythonhosted.org/packages/14/09/7644fb0e297265e18243f878aca343593323b9bb19ed5278dcbc63781be0/ty-0.0.23-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d28384e48ca03b34e4e2beee0e230c39bbfb68994bb44927fec61ef3642900da", size = 10934177, upload-time = "2026-03-13T12:34:17.904Z" },
- { url = "https://files.pythonhosted.org/packages/18/14/69a25a0cad493fb6a947302471b579a03516a3b00e7bece77fdc6b4afb9b/ty-0.0.23-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:559d9a299df793cb7a7902caed5eda8a720ff69164c31c979673e928f02251ee", size = 10752487, upload-time = "2026-03-13T12:34:31.785Z" },
- { url = "https://files.pythonhosted.org/packages/9d/2a/42fc3cbccf95af0a62308ebed67e084798ab7a85ef073c9986ef18032743/ty-0.0.23-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:32a7b8a14a98e1d20a9d8d2af23637ed7efdb297ac1fa2450b8e465d05b94482", size = 10133007, upload-time = "2026-03-13T12:34:42.838Z" },
- { url = "https://files.pythonhosted.org/packages/e1/69/307833f1b52fa3670e0a1d496e43ef7df556ecde838192d3fcb9b35e360d/ty-0.0.23-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6f803b9b9cca87af793467973b9abdd4b83e6b96d9b5e749d662cff7ead70b6d", size = 10169698, upload-time = "2026-03-13T12:34:12.351Z" },
- { url = "https://files.pythonhosted.org/packages/89/ae/5dd379ec22d0b1cba410d7af31c366fcedff191d5b867145913a64889f66/ty-0.0.23-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4a0bf086ec8e2197b7ea7ebfcf4be36cb6a52b235f8be61647ef1b2d99d6ffd3", size = 10346080, upload-time = "2026-03-13T12:34:40.012Z" },
- { url = "https://files.pythonhosted.org/packages/98/c7/dfc83203d37998620bba9c4873a080c8850a784a8a46f56f8163c5b4e320/ty-0.0.23-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:252539c3fcd7aeb9b8d5c14e2040682c3e1d7ff640906d63fd2c4ce35865a4ba", size = 10848162, upload-time = "2026-03-13T12:34:45.421Z" },
- { url = "https://files.pythonhosted.org/packages/89/08/05481511cfbcc1fd834b6c67aaae090cb609a079189ddf2032139ccfc490/ty-0.0.23-py3-none-win32.whl", hash = "sha256:51b591d19eef23bbc3807aef77d38fa1f003c354e1da908aa80ea2dca0993f77", size = 9748283, upload-time = "2026-03-13T12:34:50.607Z" },
- { url = "https://files.pythonhosted.org/packages/31/2e/eaed4ff5c85e857a02415084c394e02c30476b65e158eec1938fdaa9a205/ty-0.0.23-py3-none-win_amd64.whl", hash = "sha256:1e137e955f05c501cfbb81dd2190c8fb7d01ec037c7e287024129c722a83c9ad", size = 10698355, upload-time = "2026-03-13T12:34:26.134Z" },
- { url = "https://files.pythonhosted.org/packages/91/29/b32cb7b4c7d56b9ed50117f8ad6e45834aec293e4cb14749daab4e9236d5/ty-0.0.23-py3-none-win_arm64.whl", hash = "sha256:a0399bd13fd2cd6683fd0a2d59b9355155d46546d8203e152c556ddbdeb20842", size = 10155890, upload-time = "2026-03-13T12:34:48.082Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/24/e287388c63a19191be26b32ff4dbd06029834068150ebe2532939bc4c851/ty-0.0.33-py3-none-linux_armv6l.whl", hash = "sha256:94d0a9d2234261a8911396d59e506b5923fe0971dbda43b9dcea287936887fcc", size = 11021308, upload-time = "2026-04-28T10:45:43.34Z" },
+ { url = "https://files.pythonhosted.org/packages/00/ca/ba1eed819895bd239fba8ee35dfcd5fcb266c203b0914a17a59579096bb5/ty-0.0.33-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e4a2b5ba078f90de342f56b5f7979bb77c9b9b1d8625a041352ffc6ee93c4073", size = 10777272, upload-time = "2026-04-28T10:45:32.905Z" },
+ { url = "https://files.pythonhosted.org/packages/25/a8/c3131d37b44b3fea1d6654a1c929a0cd0873822f77a90482b8ec28f6fbbd/ty-0.0.33-py3-none-macosx_11_0_arm64.whl", hash = "sha256:84ff5707825e9af9668d2bcf66975f93e520a63b524ab494e3a8265735be2563", size = 10201078, upload-time = "2026-04-28T10:45:23.374Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/db/d8e37ff0045810cc65e1ff36aa0da0a2253c05659787ac987df8a16c7897/ty-0.0.33-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e375285736f57886868e7af0b11c7b0ec5b6543fa15e7ad2a714fed9f077d4e0", size = 10732347, upload-time = "2026-04-28T10:45:21.444Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/1a/20e83a412506a918e4684fc67b567cf7cc13b105470b3428cb23c3d5aa13/ty-0.0.33-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5680f6350c3b4e46b8bff6d7bb132366ea239463d6cad4892725d06046e65464", size = 10808238, upload-time = "2026-04-28T10:45:38.565Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/4b/d0a39f4464dc6cb4cc2c159473ce216bd1846bfb684c0323a3cb36dce5c6/ty-0.0.33-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5535538bad8d0f7e62bcdff02197cdb30e41451d80b35d27e17d128f2e1dc5d", size = 11288348, upload-time = "2026-04-28T10:45:08.419Z" },
+ { url = "https://files.pythonhosted.org/packages/35/7e/f1745e0f9583363d7a83d9a4990fc244f76ecc30840ddad83dc16a33c52d/ty-0.0.33-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:da196c42bbbc069e1e21e3e52107c061aa9660352dae57a41930690b56e2c02d", size = 11789907, upload-time = "2026-04-28T10:45:19.064Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/71/25f39f46a12d662859d45bc648555d0661044eb43db6b5648c9947487da9/ty-0.0.33-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9281672921ef6d4460e03146b5e6c18cb1a3e3a3b8a1a88f6f33226d05a469b7", size = 11500774, upload-time = "2026-04-28T10:45:48.012Z" },
+ { url = "https://files.pythonhosted.org/packages/94/ec/136959ecbb7c71cb90537f5aea441c73f4ab24612868a6ecdc9d7444d32d/ty-0.0.33-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82c1b8f303f82da64e878108e764be3ecbcd7c9903ac0a7f7031614ed00b97ab", size = 11360314, upload-time = "2026-04-28T10:45:05.402Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/95/32809575c222f00beed498cb728e9290a0f5009f930025381bb7253b2206/ty-0.0.33-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:efe3af412c9ff67bce5fa37d0a2b0d8555c24072b145a5bac6c79637f1c83abe", size = 10707785, upload-time = "2026-04-28T10:45:10.836Z" },
+ { url = "https://files.pythonhosted.org/packages/13/89/c8e9531f7aa4a093359e15fa32c8e1277fbbe90d16894d7c6032d29f4b34/ty-0.0.33-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aeec29c91ea768601747da546c3efc20b72c2fb1bd52bcc786a5c6eeff51d27b", size = 10834987, upload-time = "2026-04-28T10:45:40.738Z" },
+ { url = "https://files.pythonhosted.org/packages/31/16/9835fbcf5338af1a1917bd28fdb8a7193c210b83f243aa286fa9f79cb3ad/ty-0.0.33-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a535977c52bbb5f7e96b8b70a6ad375ad077f4a9ff2492508ea3816a2b403819", size = 10968968, upload-time = "2026-04-28T10:45:30.26Z" },
+ { url = "https://files.pythonhosted.org/packages/36/69/64c76aabc1bc70c7f24b686cd93c3407f8ea430905e395f59bf9603ef571/ty-0.0.33-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1d732facf39fcb221ba279d469c5040d37883e964f123b1563888efd34818180", size = 11458077, upload-time = "2026-04-28T10:45:45.971Z" },
+ { url = "https://files.pythonhosted.org/packages/91/84/fae27b0c4718776a298690d31ca4cc1995f2e3e1c63a7b59e84c41498e9a/ty-0.0.33-py3-none-win32.whl", hash = "sha256:d90960b574428dc252f85e8598ec5fcb7f619794196b2fc95a90da075ed4681c", size = 10345364, upload-time = "2026-04-28T10:45:16.836Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/a0/a2938b23ae3e1a09a2d7c189e2ac5f7113676bae4e0e23948b568e18e5f8/ty-0.0.33-py3-none-win_amd64.whl", hash = "sha256:c1c3aec62c44de610c6e95f0a4e97ac3dbc07934bfdbf1fd90d758c9ff72f48e", size = 11342470, upload-time = "2026-04-28T10:45:26.455Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/62/7fb948aace38d2f6329261bb33c035a8484549c74f1db28649c7a4c6fed9/ty-0.0.33-py3-none-win_arm64.whl", hash = "sha256:0d44f99ba1b441e55e2aa301b2ac0a21112784931b46a5f66f4ea9efe5620d97", size = 10742673, upload-time = "2026-04-28T10:45:35.555Z" },
]
[[package]]