From 189bd5f118b658f7103b015938aef831b08a6ffb Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Wed, 27 May 2026 19:40:16 +0100 Subject: [PATCH] update conformance results for ty==0.0.40 --- conformance/results/results.html | 10 +-- conformance/results/ty/aliases_variance.toml | 11 ++- .../ty/dataclasses_transform_converter.toml | 14 +-- conformance/results/ty/generics_variance.toml | 27 +++--- .../results/ty/typeforms_typeform.toml | 87 ++++--------------- conformance/results/ty/version.toml | 2 +- conformance/uv.lock | 38 ++++---- 7 files changed, 61 insertions(+), 128 deletions(-) diff --git a/conformance/results/results.html b/conformance/results/results.html index 85fce205e..0edd52cc8 100644 --- a/conformance/results/results.html +++ b/conformance/results/results.html @@ -182,7 +182,7 @@

Python Type System Conformance Test Results

pycroscope 0.4.0
-
ty 0.0.38
+
ty 0.0.40
@@ -237,7 +237,7 @@

Python Type System Conformance Test Results

Pass
Partial

Does not allow assigning a TypeForm to types.GenericAlias.

Does not allow passing a forward reference to a function accepting a TypeForm.

Partial

Fails to reject various weird annotations

-Unsupported +Pass Special types in annotations @@ -515,7 +515,7 @@

Python Type System Conformance Test Results

Pass Pass Pass -Unsupported +Pass      generics_variance_inference Pass @@ -628,7 +628,7 @@

Python Type System Conformance Test Results

Pass Pass Pass -Unsupported +Pass Literals @@ -993,7 +993,7 @@

Python Type System Conformance Test Results

Pass Pass Pass -
Partial

Does not pass all assertions in the test file, due to limitations in ty's generics solver.

Incorrectly rejects a converter of `dict` combined with a default of `()`.

Incorrectly rejects passing a sequence of two-element string tuples to the `dict` constructor.

+Pass      dataclasses_transform_field
Partial

Does not properly handle field constructor that has default value for `kw_only` or `init` parameter.

diff --git a/conformance/results/ty/aliases_variance.toml b/conformance/results/ty/aliases_variance.toml index 435955993..9b8afdb53 100644 --- a/conformance/results/ty/aliases_variance.toml +++ b/conformance/results/ty/aliases_variance.toml @@ -1,10 +1,9 @@ -conformance_automated = "Fail" -conformant = "Unsupported" +conformance_automated = "Pass" errors_diff = """ -Line 24: Expected 1 errors -Line 28: Expected 1 errors -Line 32: Expected 1 errors -Line 44: Expected 1 errors """ output = """ +aliases_variance.py:24:16: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `ClassA` +aliases_variance.py:28:16: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `ClassA` +aliases_variance.py:32:16: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `ClassA` +aliases_variance.py:44:16: error[invalid-generic-class] Variance of type variable `T_contra` is incompatible with base class `ClassB` """ diff --git a/conformance/results/ty/dataclasses_transform_converter.toml b/conformance/results/ty/dataclasses_transform_converter.toml index d6012d039..e04d01805 100644 --- a/conformance/results/ty/dataclasses_transform_converter.toml +++ b/conformance/results/ty/dataclasses_transform_converter.toml @@ -1,26 +1,14 @@ -conformance_automated = "Fail" -conformant = "Partial" -notes = """ -Does not pass all assertions in the test file, due to limitations in ty's generics solver. - -Incorrectly rejects a converter of `dict` combined with a default of `()`. -Incorrectly rejects passing a sequence of two-element string tuples to the `dict` constructor. -""" +conformance_automated = "Pass" errors_diff = """ -Line 104: Unexpected errors ['dataclasses_transform_converter.py:104:30: error[invalid-assignment] Object of type `dict[str, str] | dict[bytes, bytes]` is not assignable to `dict[str, str]`', "dataclasses_transform_converter.py:104:42: error[invalid-argument-type] Argument to function `model_field` is incorrect: Expected `(Iterable[list[str]] | Iterable[list[bytes]], /) -> dict[str, str] | dict[bytes, bytes]`, found ``"] -Line 121: Unexpected errors ['dataclasses_transform_converter.py:121:40: error[invalid-argument-type] Argument is incorrect: Expected `dict[str, str]`, found `tuple[tuple[Literal["a"], Literal["1"]], tuple[Literal["b"], Literal["2"]]]`'] """ output = """ dataclasses_transform_converter.py:48:31: error[invalid-argument-type] Argument to function `model_field` is incorrect: Expected `(Unknown, /) -> Unknown`, found `def bad_converter1() -> int` dataclasses_transform_converter.py:49:31: error[invalid-argument-type] Argument to function `model_field` is incorrect: Expected `(Unknown, /) -> Unknown`, found `def bad_converter2(*, x: int) -> int` -dataclasses_transform_converter.py:104:30: error[invalid-assignment] Object of type `dict[str, str] | dict[bytes, bytes]` is not assignable to `dict[str, str]` -dataclasses_transform_converter.py:104:42: error[invalid-argument-type] Argument to function `model_field` is incorrect: Expected `(Iterable[list[str]] | Iterable[list[bytes]], /) -> dict[str, str] | dict[bytes, bytes]`, found `` dataclasses_transform_converter.py:107:5: error[invalid-argument-type] Argument is incorrect: Expected `str`, found `Literal[1]` dataclasses_transform_converter.py:108:23: error[invalid-argument-type] Argument is incorrect: Expected `str | bytes`, found `Literal[1]` dataclasses_transform_converter.py:109:29: error[invalid-argument-type] Argument is incorrect: Expected `str | list[str]`, found `complex` dataclasses_transform_converter.py:118:1: error[invalid-assignment] Object of type `Literal[1]` is not assignable to attribute `field0` of type `str` dataclasses_transform_converter.py:119:1: error[invalid-assignment] Object of type `Literal[1]` is not assignable to attribute `field3` of type `str | bytes` -dataclasses_transform_converter.py:121:40: error[invalid-argument-type] Argument is incorrect: Expected `dict[str, str]`, found `tuple[tuple[Literal["a"], Literal["1"]], tuple[Literal["b"], Literal["2"]]]` dataclasses_transform_converter.py:130:31: error[invalid-argument-type] Argument to function `model_field` is incorrect: Expected `(str | Literal[1], /) -> int`, found `def converter_simple(s: str) -> int` dataclasses_transform_converter.py:133:31: error[invalid-argument-type] Argument to function `model_field` is incorrect: Expected `(str | int, /) -> int`, found `def converter_simple(s: str) -> int` """ diff --git a/conformance/results/ty/generics_variance.toml b/conformance/results/ty/generics_variance.toml index 4193f749d..dc88240f5 100644 --- a/conformance/results/ty/generics_variance.toml +++ b/conformance/results/ty/generics_variance.toml @@ -1,19 +1,18 @@ -conformance_automated = "Fail" -conformant = "Unsupported" +conformance_automated = "Pass" errors_diff = """ -Line 77: Expected 1 errors -Line 81: Expected 1 errors -Line 93: Expected 1 errors -Line 105: Expected 1 errors -Line 113: Expected 1 errors -Line 163: Expected 1 errors -Line 167: Expected 1 errors -Line 191: Expected 1 errors -Lines 125, 126: Expected error (tag 'CoContra_Child2') -Lines 131, 132: Expected error (tag 'CoContra_Child3') -Lines 141, 142: Expected error (tag 'CoContra_Child5') -Lines 195, 196: Expected error (tag 'ContraToContraToContra_WithTA') """ output = """ generics_variance.py:14:6: error[invalid-legacy-type-variable] A `TypeVar` cannot be both covariant and contravariant +generics_variance.py:77:14: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `Inv` +generics_variance.py:81:14: error[invalid-generic-class] Variance of type variable `T_contra` is incompatible with base class `Inv` +generics_variance.py:93:17: error[invalid-generic-class] Variance of type variable `T_contra` is incompatible with base class `Co` +generics_variance.py:105:21: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `Contra` +generics_variance.py:113:21: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `Contra` +generics_variance.py:126:5: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `CoContra` +generics_variance.py:132:5: error[invalid-generic-class] Variance of type variable `T_contra` is incompatible with base class `CoContra` +generics_variance.py:142:5: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `CoContra` +generics_variance.py:163:26: error[invalid-generic-class] Variance of type variable `T_contra` is incompatible with base class `Contra` +generics_variance.py:167:30: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `Contra` +generics_variance.py:191:33: error[invalid-generic-class] Variance of type variable `T_contra` is incompatible with base class `Contra` +generics_variance.py:196:5: error[invalid-generic-class] Variance of type variable `T_co` is incompatible with base class `Contra` """ diff --git a/conformance/results/ty/typeforms_typeform.toml b/conformance/results/ty/typeforms_typeform.toml index 156663f56..bf5496935 100644 --- a/conformance/results/ty/typeforms_typeform.toml +++ b/conformance/results/ty/typeforms_typeform.toml @@ -1,74 +1,21 @@ -conformant = "Unsupported" -conformance_automated = "Fail" +conformance_automated = "Pass" errors_diff = """ -Line 59: Expected 1 errors -Line 15: Unexpected errors ['typeforms_typeform.py:15:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 16: Unexpected errors ['typeforms_typeform.py:16:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 17: Unexpected errors ['typeforms_typeform.py:17:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 18: Unexpected errors ['typeforms_typeform.py:18:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 19: Unexpected errors ['typeforms_typeform.py:19:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 20: Unexpected errors ['typeforms_typeform.py:20:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 21: Unexpected errors ['typeforms_typeform.py:21:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 29: Unexpected errors ['typeforms_typeform.py:29:8: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 30: Unexpected errors ['typeforms_typeform.py:30:8: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 31: Unexpected errors ["typeforms_typeform.py:31:1: error[type-assertion-failure] Type `` does not match asserted type `Unknown`", 'typeforms_typeform.py:31:20: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 32: Unexpected errors ["typeforms_typeform.py:32:1: error[type-assertion-failure] Type `` does not match asserted type `Unknown`", 'typeforms_typeform.py:32:20: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 40: Unexpected errors ['typeforms_typeform.py:40:14: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a parameter annotation'] -Line 41: Unexpected errors ['typeforms_typeform.py:41:20: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 47: Unexpected errors ['typeforms_typeform.py:47:15: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 49: Unexpected errors ["typeforms_typeform.py:49:33: error[invalid-assignment] Object of type `` is not assignable to `GenericAlias`"] -Line 50: Unexpected errors ['typeforms_typeform.py:50:15: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression'] -Line 52: Unexpected errors ['typeforms_typeform.py:52:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 53: Unexpected errors ['typeforms_typeform.py:53:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 80: Unexpected errors ['typeforms_typeform.py:80:6: error[call-non-callable] Object of type `_SpecialForm` is not callable'] -Line 81: Unexpected errors ['typeforms_typeform.py:81:17: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 83: Unexpected errors ['typeforms_typeform.py:83:6: error[call-non-callable] Object of type `_SpecialForm` is not callable'] -Line 84: Unexpected errors ['typeforms_typeform.py:84:17: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 93: Unexpected errors ['typeforms_typeform.py:93:24: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a return type annotation'] -Line 97: Unexpected errors ['typeforms_typeform.py:97:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] -Line 107: Unexpected errors ['typeforms_typeform.py:107:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression'] """ output = """ -typeforms_typeform.py:15:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:16:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:17:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:18:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:19:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:20:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:21:6: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:23:7: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:24:7: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:29:8: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:30:8: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:31:1: error[type-assertion-failure] Type `` does not match asserted type `Unknown` -typeforms_typeform.py:31:20: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:32:1: error[type-assertion-failure] Type `` does not match asserted type `Unknown` -typeforms_typeform.py:32:20: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:40:14: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a parameter annotation -typeforms_typeform.py:41:20: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:47:15: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:49:33: error[invalid-assignment] Object of type `` is not assignable to `GenericAlias` -typeforms_typeform.py:50:15: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:52:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:53:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:67:7: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:68:7: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:69:7: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:70:7: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:71:7: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:72:7: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:73:7: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:74:7: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:75:7: error[invalid-type-form] Variable of type `_SpecialForm` is not allowed in a type expression -typeforms_typeform.py:80:6: error[call-non-callable] Object of type `_SpecialForm` is not callable -typeforms_typeform.py:81:17: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:83:6: error[call-non-callable] Object of type `_SpecialForm` is not callable -typeforms_typeform.py:84:17: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:86:6: error[call-non-callable] Object of type `_SpecialForm` is not callable -typeforms_typeform.py:88:6: error[call-non-callable] Object of type `_SpecialForm` is not callable -typeforms_typeform.py:93:24: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a return type annotation -typeforms_typeform.py:97:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:98:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:107:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression -typeforms_typeform.py:108:5: error[invalid-type-form] Invalid subscript of object of type `_SpecialForm` in a type expression +typeforms_typeform.py:23:30: error[invalid-assignment] Object of type `TypeForm[str | int]` is not assignable to `TypeForm[str | None]` +typeforms_typeform.py:24:30: error[invalid-assignment] Object of type `TypeForm[list[str | None]]` is not assignable to `TypeForm[str | None]` +typeforms_typeform.py:59:7: error[invalid-syntax-in-forward-annotation] Syntax error in forward annotation: Unexpected token at the end of an expression: Did you mean `typing.Literal["not a type"]`? +typeforms_typeform.py:67:18: error[invalid-type-form] Function calls are not allowed in type expressions +typeforms_typeform.py:68:18: error[invalid-type-form] Tuple literals are not allowed in this context in a type expression +typeforms_typeform.py:69:18: error[invalid-type-form] Int literals are not allowed in this context in a type expression: Did you mean `typing.Literal[1]`? +typeforms_typeform.py:70:18: error[invalid-type-form] Variable of type `` is not allowed in a type expression +typeforms_typeform.py:71:18: error[invalid-type-form] Type qualifier `typing.ClassVar` is not allowed in type expressions (only in annotation expressions) +typeforms_typeform.py:72:18: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) +typeforms_typeform.py:73:18: error[invalid-type-form] `Unpack` is not allowed in type expressions +typeforms_typeform.py:74:18: error[invalid-type-form] `typing.Optional` requires exactly one argument when used in a type expression +typeforms_typeform.py:75:19: error[invalid-type-form] Invalid binary operator `+` in type annotation +typeforms_typeform.py:86:16: error[invalid-type-form] Function calls are not allowed in type expressions +typeforms_typeform.py:88:15: error[invalid-type-form] Function calls are not allowed in type expressions +typeforms_typeform.py:98:21: error[invalid-assignment] Object of type `TypeForm[int]` is not assignable to `TypeForm[str]` +typeforms_typeform.py:108:21: error[invalid-assignment] Object of type `type[int]` is not assignable to `TypeForm[str]` """ diff --git a/conformance/results/ty/version.toml b/conformance/results/ty/version.toml index e7d896692..00cce94ae 100644 --- a/conformance/results/ty/version.toml +++ b/conformance/results/ty/version.toml @@ -1 +1 @@ -version = "ty 0.0.38" +version = "ty 0.0.40" diff --git a/conformance/uv.lock b/conformance/uv.lock index 32858b66a..718dadee2 100644 --- a/conformance/uv.lock +++ b/conformance/uv.lock @@ -178,27 +178,27 @@ wheels = [ [[package]] name = "ty" -version = "0.0.38" +version = "0.0.40" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/33/3b/45be6b37d5060d6917bf7f1f234c00d360fc5f8b7486f8a96af640e25661/ty-0.0.38.tar.gz", hash = "sha256:fbc8d47f7630457669ab41e333dc093897fdb7ead1ffc94dcf8f30b5d39aa56d", size = 5681218, upload-time = "2026-05-20T00:15:32.781Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/f8/a754c96967b71de8723f88be17df8738216bd382ffed229cd500b7a24d13/ty-0.0.40.tar.gz", hash = "sha256:883b53dd98f6e5b33ab1c8e1a3cd94b0f29c762ef22cdf1e86aaffb4fd711c67", size = 5726484, upload-time = "2026-05-27T17:55:43.615Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/43/ea9b4e57d6a266670dbe34858e92f6093ca054ad1b48f1c82580a72340fb/ty-0.0.38-py3-none-linux_armv6l.whl", hash = "sha256:3501dcf44ca03f813f9cb4fabfdf601adc0ac1337c411405b470530679e37a45", size = 11289326, upload-time = "2026-05-20T00:14:52.371Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ff/24e2f623a1c6b5f5ccf8bf82fccd937033c6a7dba57a4028c7f41270fa4a/ty-0.0.38-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b34b4094b76252c3e8c90762cdd5e8a9f1101534484745ff4b480f71eb38ac2e", size = 11063047, upload-time = "2026-05-20T00:14:42.832Z" }, - { url = "https://files.pythonhosted.org/packages/e9/41/4f0d910f0acbd20b358eda80a5cd6a8361d27ff5b8e87ab559d3f69f125e/ty-0.0.38-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c518ad33a877677365baab2e21d82cf59ffee789203a15a143f5179ee5a1d3f8", size = 10494436, upload-time = "2026-05-20T00:15:24.425Z" }, - { url = "https://files.pythonhosted.org/packages/69/d8/da06833422082aa98b169a391f9197e2d73865e96c90b6979ac886b890a2/ty-0.0.38-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9238494722303eccddc6a27eb647948b694eecd6b974910d13b9e6cd46bbeb6a", size = 11000992, upload-time = "2026-05-20T00:14:58.368Z" }, - { url = "https://files.pythonhosted.org/packages/16/f7/e1172197fb827e6410ca3eb0dc68ef2789f3c70683696f2a0ce5c90764fd/ty-0.0.38-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d91d7336c5d51bf822ac0df512f300584ca4dcca041fc6a6d7df03a8ddbb31", size = 11058583, upload-time = "2026-05-20T00:15:11.314Z" }, - { url = "https://files.pythonhosted.org/packages/5b/61/7fbaf0c05981e006a8804287819c574dff90a6bf8e96efad7226be0700aa/ty-0.0.38-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65165879814993450710b9349791e4898c65e36b1e14eec554884c06a2f20ff1", size = 11531036, upload-time = "2026-05-20T00:15:14.62Z" }, - { url = "https://files.pythonhosted.org/packages/49/e3/47c0c64e401d50f925df3e52479d4e7626754b2a9e38201d142fdacd6252/ty-0.0.38-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d61868b8d1c4033bf8088191de953fed245c2f9e1bb9d2d53e5699170b0924c", size = 12129991, upload-time = "2026-05-20T00:14:39.475Z" }, - { url = "https://files.pythonhosted.org/packages/90/99/2f452d02901bcd7f1b109cf5b848727ce37f372c3406143aa52d1305d40e/ty-0.0.38-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f9a9175548c98dbff7707865738c07c2b1f8e07a09b8c68101baebb5dac59a4", size = 11756167, upload-time = "2026-05-20T00:15:27.526Z" }, - { url = "https://files.pythonhosted.org/packages/dd/0c/c7e14d111c813e1a20b82e944f1c997c4631a2bb710eaa64fb6b26835e13/ty-0.0.38-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375d3a964c6b4aea2e9237fdb5eb9ed03dc43088986a94209a28a4ea3b62001c", size = 11637099, upload-time = "2026-05-20T00:15:21.261Z" }, - { url = "https://files.pythonhosted.org/packages/37/de/ab02659dd1ed62898db7db4d37f9937c80854dd45e95093fa0fe10328d82/ty-0.0.38-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:cdfd547782c45267aa0b52abad31bd406bf4768c264532ef9e2360cd3c6ce048", size = 11813583, upload-time = "2026-05-20T00:14:45.875Z" }, - { url = "https://files.pythonhosted.org/packages/7e/57/bd1b5ebf4e71a4295484afac0202df1740b0807762b86744b1bef4534984/ty-0.0.38-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:858bc675b75626470abe4e6c3b3934b853642b04f2ac4d7139fcefea3b48b213", size = 10975405, upload-time = "2026-05-20T00:15:30.354Z" }, - { url = "https://files.pythonhosted.org/packages/e7/55/0305c78711bbd23922cf291996a08ef9544f4179da98e9a75c14e608f379/ty-0.0.38-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:54be4f00432870da42cd74fe145a3362fd248e22d032c74bd807cb45bf068f94", size = 11097551, upload-time = "2026-05-20T00:14:55.179Z" }, - { url = "https://files.pythonhosted.org/packages/7c/4f/7effe7f9a6ac9719eb7234172c01739c5f888bb47f9acc2ea8da1f4afed3/ty-0.0.38-py3-none-musllinux_1_2_i686.whl", hash = "sha256:494af66a76a86dbf16a3003d3b63b03484aa4c7489dfe11f3ee5413b98b22d60", size = 11214391, upload-time = "2026-05-20T00:15:18.094Z" }, - { url = "https://files.pythonhosted.org/packages/75/cd/d9fdfec3a74a6ad0209fa5e7113ae29d4f457d0651cfbb813b4c6563e0d4/ty-0.0.38-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3d92527c4be78a5ce6d32e8bb0aa2a6988d4076eddf1294e56fdaf06d1a98e7e", size = 11730871, upload-time = "2026-05-20T00:14:49.219Z" }, - { url = "https://files.pythonhosted.org/packages/0e/4a/beefade12d109b4f7793d61b04b4478b1ad4d1465a719e7ff55b2d42461a/ty-0.0.38-py3-none-win32.whl", hash = "sha256:36fc5dd5dc09207ff3004b1560a79a3fb8d12456daeec914a7b802a918da654c", size = 10548583, upload-time = "2026-05-20T00:15:07.892Z" }, - { url = "https://files.pythonhosted.org/packages/15/64/941b205e2e46cc2297c245c64aa7691410b7454fa4d07a6cb3cf59487833/ty-0.0.38-py3-none-win_amd64.whl", hash = "sha256:eef0a8956ba14514076b1a963d13eb32986d9ebad7f0527b3cc01cb68bf35147", size = 11650542, upload-time = "2026-05-20T00:15:01.441Z" }, - { url = "https://files.pythonhosted.org/packages/59/02/c1c4f9ec4b94d95190636fa13f79c32f65165fbe3a0503882d4df164d2ac/ty-0.0.38-py3-none-win_arm64.whl", hash = "sha256:79abfc8658a026c30b1c955613437dab3ef4b12feca56a3e6df50903cc39e07f", size = 11010307, upload-time = "2026-05-20T00:15:04.567Z" }, + { url = "https://files.pythonhosted.org/packages/2c/42/d029a72165ad39f95228b67355927fbd35c821dc8e3e475d49f47c2eeb1e/ty-0.0.40-py3-none-linux_armv6l.whl", hash = "sha256:9defb4742450e569a6a09de286a04008d6c2e815112da4362c88b6eaa2f52a36", size = 11406372, upload-time = "2026-05-27T17:55:49.633Z" }, + { url = "https://files.pythonhosted.org/packages/23/99/7f8ea09b7e49afbf795cb3341a3217f30f228db7e62a2268ed8cbbf813d6/ty-0.0.40-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:868258a3330db88b683fcafe2c4e936d6226a6312799bf15b585d93557b2d38c", size = 11159782, upload-time = "2026-05-27T17:55:47.405Z" }, + { url = "https://files.pythonhosted.org/packages/04/d8/1ea745ee97a98b26ae9564d19a430a76a35297cd450e84dcaad22e1f7ee8/ty-0.0.40-py3-none-macosx_11_0_arm64.whl", hash = "sha256:589c81060cf1e7a9ffa2f45bfa35ffd9b9fbd214104e3f13959f113627efcd91", size = 10594139, upload-time = "2026-05-27T17:55:37.206Z" }, + { url = "https://files.pythonhosted.org/packages/39/1a/fbef21273c6617ff4715b4827ee1c0b6550aa7d1df4b8c43b325545c1cf4/ty-0.0.40-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b06108990cb338d941c315ae6e9ba2fff8f518bc15d3f33e5619ff6a6c9beab", size = 11114156, upload-time = "2026-05-27T17:55:56.11Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f9/389fc4976d7ec016a7473cf1274bf9c4f491bb54c66649bd022bff9f2b6a/ty-0.0.40-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3913ef37336bec4f96bd2512f8c3a543ca34c259b7170f7eb5adf75b3ed7f04c", size = 11189050, upload-time = "2026-05-27T17:55:54.099Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a9/4ecabbf4bdda7df0d99d8d3892c6edac0efc8c4cae756a5109178a3d0e86/ty-0.0.40-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fd1486bd5fe48779a8aa857137f3642a0a9161f5cf57d4380f4a0ecea01c8f3", size = 11664266, upload-time = "2026-05-27T17:55:28.17Z" }, + { url = "https://files.pythonhosted.org/packages/45/02/0aa78730116507c265afb1d6d5961c583b49d4c2e368c4a49fd81bcae6dc/ty-0.0.40-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1668364d5254a734329917ee66c2c5fdd5665389d41043f6fce0f22ddb32b749", size = 12187743, upload-time = "2026-05-27T17:56:04.337Z" }, + { url = "https://files.pythonhosted.org/packages/e6/68/ccabf2d173523598271a385c1d3f864dbda23e5ebdc67f5969b9e830ea05/ty-0.0.40-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f77a73edb91e5dfa2ab9af7c4cac64614f8cc121f38a8875f22e830d3aba6a", size = 11862999, upload-time = "2026-05-27T17:55:58.087Z" }, + { url = "https://files.pythonhosted.org/packages/03/8d/6d7ec22771bb23d534797cdb446eb644bccfe7a62b729bb99e7235a02fc3/ty-0.0.40-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1274ce0212ecbfed01bda7c3659c46e8bd0068e32d00c46c790466a95274c3df", size = 11743896, upload-time = "2026-05-27T17:56:00.017Z" }, + { url = "https://files.pythonhosted.org/packages/cd/a4/f9fa076b010c91cb249b1fcc3476569b7b8462cb4b688da2d04c23a0622f/ty-0.0.40-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:5ee1261dbc363e5cc1a0c5bb0c8612c192bfe53491214df8bc85a540835685f9", size = 11883581, upload-time = "2026-05-27T17:56:02.319Z" }, + { url = "https://files.pythonhosted.org/packages/fd/0f/5b776a2328c756d574dd4d6afbd30fc24e1ab4b76935c7c3c23f27ebbcb9/ty-0.0.40-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6220e2cd5cdc4683dd87fb150d195bbd9f1a021395e04cb08bd3c66ea6da6ef8", size = 11093946, upload-time = "2026-05-27T17:55:33.284Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/eb23154bae83ad7c2935e9e5916660fb3e31598a92ee232aebd79410480c/ty-0.0.40-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:46b9ed69d01d98ef046afac9983c68336f572605ea2a27b90fbe6f80bfc8d6b7", size = 11210737, upload-time = "2026-05-27T17:55:45.523Z" }, + { url = "https://files.pythonhosted.org/packages/ff/19/1fb2529703f708cacfd13a89f98613cae2907dfa941b26976467e6119803/ty-0.0.40-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ddbca9fab4406260f141674ab5efcfe7b02bd468e6985e4cdde0a21626e69ffe", size = 11332563, upload-time = "2026-05-27T17:55:41.674Z" }, + { url = "https://files.pythonhosted.org/packages/87/69/b3f5a8ef26c31204e0391147b3adcdb0674eda3e7d99868478ef168a41c6/ty-0.0.40-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b1fcc082a749e6dc11b68fe9aab0420238bbf2a2374c2c7aa3c22e8c1618b136", size = 11843216, upload-time = "2026-05-27T17:55:35.367Z" }, + { url = "https://files.pythonhosted.org/packages/ac/e8/20193069d32787f3e1a6ec8940aaa3759d3de8f48f9281bcc0c5cb0939da/ty-0.0.40-py3-none-win32.whl", hash = "sha256:75feb115b3587824c5bdf8f8305e9547b0d1e398e3077b0addc7a1988ea9bb50", size = 10670731, upload-time = "2026-05-27T17:55:31.316Z" }, + { url = "https://files.pythonhosted.org/packages/a3/f9/8b2aa4da61db81322d4a2f9db227afeb48110ca15ae31d380f64c64ceb63/ty-0.0.40-py3-none-win_amd64.whl", hash = "sha256:b0f905edaad788bd61f779a85801b60a267a25ed57fca05aaddd168d9d8896be", size = 11766211, upload-time = "2026-05-27T17:55:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/04/87/369056ed46f1b235130ec0595393262f9cd2061ca3dab276d490980f9343/ty-0.0.40-py3-none-win_arm64.whl", hash = "sha256:07da2b09d9130e2c9a257d2a29beb53105835b0256ee5fdb288fe1aab83fee47", size = 11117369, upload-time = "2026-05-27T17:55:39.329Z" }, ] [[package]]