{"info":{"author":null,"author_email":"Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Samuel Colvin <s@muelcolvin.com>, Zac Hatfield-Dodds <zac@zhd.dev>","bugtrack_url":null,"classifiers":["Development Status :: 4 - Beta","Environment :: Console","Environment :: MacOS X","Intended Audience :: Developers","Intended Audience :: Information Technology","License :: OSI Approved :: MIT License","Operating System :: POSIX :: Linux","Operating System :: Unix","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Topic :: Software Development :: Libraries :: Python Modules","Typing :: Typed"],"description":"# annotated-types\n\n[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)\n[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)\n[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)\n\n[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of\nadding context-specific metadata to existing types, and specifies that\n`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special\nlogic for `x`.\n\nThis package provides metadata objects which can be used to represent common\nconstraints such as upper and lower bounds on scalar values and collection sizes,\na `Predicate` marker for runtime checks, and\ndescriptions of how we intend these metadata to be interpreted. In some cases,\nwe also note alternative representations which do not require this package.\n\n## Install\n\n```bash\npip install annotated-types\n```\n\n## Examples\n\n```python\nfrom typing import Annotated\nfrom annotated_types import Gt, Len, Predicate\n\nclass MyClass:\n    age: Annotated[int, Gt(18)]                         # Valid: 19, 20, ...\n                                                        # Invalid: 17, 18, \"19\", 19.0, ...\n    factors: list[Annotated[int, Predicate(is_prime)]]  # Valid: 2, 3, 5, 7, 11, ...\n                                                        # Invalid: 4, 8, -2, 5.0, \"prime\", ...\n\n    my_list: Annotated[list[int], Len(0, 10)]           # Valid: [], [10, 20, 30, 40, 50]\n                                                        # Invalid: (1, 2), [\"abc\"], [0] * 20\n```\n\n## Documentation\n\n_While `annotated-types` avoids runtime checks for performance, users should not\nconstruct invalid combinations such as `MultipleOf(\"non-numeric\")` or `Annotated[int, Len(3)]`.\nDownstream implementors may choose to raise an error, emit a warning, silently ignore\na metadata item, etc., if the metadata objects described below are used with an\nincompatible type - or for any other reason!_\n\n### Gt, Ge, Lt, Le\n\nExpress inclusive and/or exclusive bounds on orderable values - which may be numbers,\ndates, times, strings, sets, etc. Note that the boundary value need not be of the\nsame type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`\nis fine, for example, and implies that the value is an integer x such that `x > 1.5`.\n\nWe suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`\nas being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on\nthe `annotated-types` package.\n\nTo be explicit, these types have the following meanings:\n\n* `Gt(x)` - value must be \"Greater Than\" `x` - equivalent to exclusive minimum\n* `Ge(x)` - value must be \"Greater than or Equal\" to `x` - equivalent to inclusive minimum\n* `Lt(x)` - value must be \"Less Than\" `x` - equivalent to exclusive maximum\n* `Le(x)` - value must be \"Less than or Equal\" to `x` - equivalent to inclusive maximum\n\n### Interval\n\n`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single\nmetadata object. `None` attributes should be ignored, and non-`None` attributes\ntreated as per the single bounds above.\n\n### MultipleOf\n\n`MultipleOf(multiple_of=x)` might be interpreted in two ways:\n\n1. Python semantics, implying `value % multiple_of == 0`, or\n2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),\n   where `int(value / multiple_of) == value / multiple_of`.\n\nWe encourage users to be aware of these two common interpretations and their\ndistinct behaviours, especially since very large or non-integer numbers make\nit easy to cause silent data corruption due to floating-point imprecision.\n\nWe encourage libraries to carefully document which interpretation they implement.\n\n### MinLen, MaxLen, Len\n\n`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.\n\nAs well as `Len()` which can optionally include upper and lower bounds, we also\nprovide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`\nand `Len(max_length=y)` respectively.\n\n`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.\n\nExamples of usage:\n\n* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10)]`) - list must have a length of 10 or less\n* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less\n* `Annotated[list, MinLen(3)]` (or `Annotated[list, Len(min_length=3)]`) - list must have a length of 3 or more\n* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6\n* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8\n\n#### Changed in v0.4.0\n\n* `min_inclusive` has been renamed to `min_length`, no change in meaning\n* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**\n* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic\n  meaning of the upper bound in slices vs. `Len`\n\nSee [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.\n\n### Timezone\n\n`Timezone` can be used with a `datetime` or a `time` to express which timezones\nare allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.\n`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))\nexpresses that any timezone-aware datetime is allowed. You may also pass a specific\ntimezone string or [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects)\nobject such as `Timezone(timezone.utc)` or `Timezone(\"Africa/Abidjan\")` to express that you only\nallow a specific timezone, though we note that this is often a symptom of fragile design.\n\n#### Changed in v0.x.x\n\n* `Timezone` accepts [`tzinfo`](https://docs.python.org/3/library/datetime.html#tzinfo-objects) objects instead of\n  `timezone`, extending compatibility to [`zoneinfo`](https://docs.python.org/3/library/zoneinfo.html) and third party libraries.\n\n### Unit\n\n`Unit(unit: str)` expresses that the annotated numeric value is the magnitude of\na quantity with the specified unit. For example, `Annotated[float, Unit(\"m/s\")]`\nwould be a float representing a velocity in meters per second.\n\nPlease note that `annotated_types` itself makes no attempt to parse or validate\nthe unit string in any way. That is left entirely to downstream libraries,\nsuch as [`pint`](https://pint.readthedocs.io) or\n[`astropy.units`](https://docs.astropy.org/en/stable/units/).\n\nAn example of how a library might use this metadata:\n\n```python\nfrom annotated_types import Unit\nfrom typing import Annotated, TypeVar, Callable, Any, get_origin, get_args\n\n# given a type annotated with a unit:\nMeters = Annotated[float, Unit(\"m\")]\n\n\n# you can cast the annotation to a specific unit type with any\n# callable that accepts a string and returns the desired type\nT = TypeVar(\"T\")\ndef cast_unit(tp: Any, unit_cls: Callable[[str], T]) -> T | None:\n    if get_origin(tp) is Annotated:\n        for arg in get_args(tp):\n            if isinstance(arg, Unit):\n                return unit_cls(arg.unit)\n    return None\n\n\n# using `pint`\nimport pint\npint_unit = cast_unit(Meters, pint.Unit)\n\n\n# using `astropy.units`\nimport astropy.units as u\nastropy_unit = cast_unit(Meters, u.Unit)\n```\n\n### Predicate\n\n`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.\nUsers should prefer the statically inspectable metadata above, but if you need\nthe full power and flexibility of arbitrary runtime predicates... here it is.\n\nFor some common constraints, we provide generic types:\n\n* `LowerCase     = Annotated[T, Predicate(str.islower)]`\n* `UpperCase     = Annotated[T, Predicate(str.isupper)]`\n* `IsDigit       = Annotated[T, Predicate(str.isdigit)]`\n* `IsFinite      = Annotated[T, Predicate(math.isfinite)]`\n* `IsNotFinite   = Annotated[T, Predicate(Not(math.isfinite))]`\n* `IsNan         = Annotated[T, Predicate(math.isnan)]`\n* `IsNotNan      = Annotated[T, Predicate(Not(math.isnan))]`\n* `IsInfinite    = Annotated[T, Predicate(math.isinf)]`\n* `IsNotInfinite = Annotated[T, Predicate(Not(math.isinf))]`\n\nso that you can write e.g. `x: IsFinite[float] = 2.0` instead of the longer\n(but exactly equivalent) `x: Annotated[float, Predicate(math.isfinite)] = 2.0`.\n\nSome libraries might have special logic to handle known or understandable predicates,\nfor example by checking for `str.isdigit` and using its presence to both call custom\nlogic to enforce digit-only strings, and customise some generated external schema.\nUsers are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in\nfavor of introspectable methods such as `str.lower` or `re.compile(\"pattern\").search`.\n\nTo enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.\n\nWe do not specify what behaviour should be expected for predicates that raise\nan exception.  For example `Annotated[int, Predicate(str.isdigit)]` might silently\nskip invalid constraints, or statically raise an error; or it might try calling it\nand then propagate or discard the resulting\n`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`\nexception.  We encourage libraries to document the behaviour they choose.\n\n### Doc\n\n`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.\n\nIt expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.\n\nIt returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.\n\nThis is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).\n\n### Integrating downstream types with `GroupedMetadata`\n\nImplementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.\nThis can help reduce verbosity and cognitive overhead for users.\nFor example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Iterator\nfrom annotated_types import GroupedMetadata, Ge\n\n@dataclass\nclass Field(GroupedMetadata):\n    ge: int | None = None\n    description: str | None = None\n\n    def __iter__(self) -> Iterator[object]:\n        # Iterating over a GroupedMetadata object should yield annotated-types\n        # constraint metadata objects which describe it as fully as possible,\n        # and may include other unknown objects too.\n        if self.ge is not None:\n            yield Ge(self.ge)\n        if self.description is not None:\n            yield Description(self.description)\n```\n\nLibraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been \"unpacked\" in the `Annotated` type.  The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.\n\nLibraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.\n\nOur own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern.  Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.\n\n### Consuming metadata\n\nWe intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).\n\nIt is up to the implementer to determine how this metadata is used.\nYou could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.\n\n## Design & History\n\nThis package was designed at the PyCon 2022 sprints by the maintainers of Pydantic\nand Hypothesis, with the goal of making it as easy as possible for end-users to\nprovide more informative annotations for use by runtime libraries.\n\nIt is deliberately minimal, and following PEP-593 allows considerable downstream\ndiscretion in what (if anything!) they choose to support. Nonetheless, we expect\nthat staying simple and covering _only_ the most common use-cases will give users\nand maintainers the best experience we can. If you'd like more constraints for your\ntypes - follow our lead, by defining them and documenting them downstream!\n","description_content_type":"text/markdown","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":null,"home_page":null,"keywords":null,"license":null,"license_expression":"MIT","license_files":["LICENSE"],"maintainer":null,"maintainer_email":null,"name":"annotated-types","package_url":"https://pypi.org/project/annotated-types/","platform":null,"project_url":"https://pypi.org/project/annotated-types/","project_urls":{"Changelog":"https://github.com/annotated-types/annotated-types/releases","Homepage":"https://github.com/annotated-types/annotated-types","Source":"https://github.com/annotated-types/annotated-types"},"provides_extra":null,"release_url":"https://pypi.org/project/annotated-types/0.8.0/","requires_dist":null,"requires_python":">=3.10","summary":"Reusable constraint types to use with typing.Annotated","version":"0.8.0","yanked":false,"yanked_reason":null},"last_serial":39309454,"ownership":{"organization":null,"roles":[{"role":"Owner","user":"Zac-HD"},{"role":"Owner","user":"adriangb"}]},"releases":{"0.1.0":[{"comment_text":"","core-metadata":{"sha256":"cae1593cddddb7c329df6b09bf76c35258802f64cabed35d966bc0ae64a4b2ae"},"digests":{"blake2b_256":"e8364eb8221e09a75ecde013080851d5e90d7ea2b605a3a1b9d9f154831e5ca2","md5":"cc57ab5ec65d5488ac360919a935b0c9","sha256":"950981439bbaba02482f5d7c68c6de529c19eb8f321896c60d6debcda5e2a747"},"downloads":-1,"filename":"annotated_types-0.1.0-py3-none-any.whl","has_sig":false,"md5_digest":"cc57ab5ec65d5488ac360919a935b0c9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7,<4.0","size":1115,"upload_time":"2022-05-02T17:42:51","upload_time_iso_8601":"2022-05-02T17:42:51.066761Z","url":"https://files.pythonhosted.org/packages/e8/36/4eb8221e09a75ecde013080851d5e90d7ea2b605a3a1b9d9f154831e5ca2/annotated_types-0.1.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"2e3b1f5659cfedf20e958cabda69ba006ffe7c48e0e9fed7f708e7e34989e900","md5":"af0f2cb8f1de2fe6eab0a23fe4e23d30","sha256":"fd8d0a78367851b037f9aa6e65d4cf5357b295f6e64fe17510f06af6ac0bb88b"},"downloads":-1,"filename":"annotated-types-0.1.0.tar.gz","has_sig":false,"md5_digest":"af0f2cb8f1de2fe6eab0a23fe4e23d30","packagetype":"sdist","python_version":"source","requires_python":">=3.7,<4.0","size":886,"upload_time":"2022-05-02T17:42:49","upload_time_iso_8601":"2022-05-02T17:42:49.820181Z","url":"https://files.pythonhosted.org/packages/2e/3b/1f5659cfedf20e958cabda69ba006ffe7c48e0e9fed7f708e7e34989e900/annotated-types-0.1.0.tar.gz","yanked":false,"yanked_reason":null}],"0.2.0":[{"comment_text":"","core-metadata":{"sha256":"c741fdac5ed61bac1d1e9045ff55b174b85f9be52723567ee4d4d1fab60a7bc8"},"digests":{"blake2b_256":"1d3fbd2fb1eb48062ee269d8c9692bb1c900d14f781ea760e40d7fadb4698265","md5":"5c57be969aee5ef681f27b9aa67d5be9","sha256":"5e7d2e6f477b7abe7b44c1903bb5fb86320fa2fa41837d8e9a81c7beb999a079"},"downloads":-1,"filename":"annotated_types-0.2.0-py3-none-any.whl","has_sig":false,"md5_digest":"5c57be969aee5ef681f27b9aa67d5be9","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7.0,<4.0.0","size":9274,"upload_time":"2022-06-15T04:42:47","upload_time_iso_8601":"2022-06-15T04:42:47.813246Z","url":"https://files.pythonhosted.org/packages/1d/3f/bd2fb1eb48062ee269d8c9692bb1c900d14f781ea760e40d7fadb4698265/annotated_types-0.2.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"deb9314ad264b5630f6f7c8a37baea52042b47bab959bd96d90e79743a771473","md5":"fa72ec0ac7a468c1773463b48a167f49","sha256":"82afd5f40c1e77066b7cf54209c7160a5a30b91108d6dead943c64a511b10918"},"downloads":-1,"filename":"annotated-types-0.2.0.tar.gz","has_sig":false,"md5_digest":"fa72ec0ac7a468c1773463b48a167f49","packagetype":"sdist","python_version":"source","requires_python":">=3.7.0,<4.0.0","size":9387,"upload_time":"2022-06-15T04:42:46","upload_time_iso_8601":"2022-06-15T04:42:46.669504Z","url":"https://files.pythonhosted.org/packages/de/b9/314ad264b5630f6f7c8a37baea52042b47bab959bd96d90e79743a771473/annotated-types-0.2.0.tar.gz","yanked":false,"yanked_reason":null}],"0.3.0":[{"comment_text":"","core-metadata":{"sha256":"ea3f9854317d3d144c7d7329b921456af7d1cf0f50b844cffc3522331802e809"},"digests":{"blake2b_256":"6e6dc91d549204fb4413c95b7f1366b6ceb7afa5e0f796be3459e94dbaa92e78","md5":"dd7ff56e7d25b82c4ee9827086316fd0","sha256":"229951d843ef3877d2bddcb1aa22990868eef22cf8e88140eacee803b83e09a4"},"downloads":-1,"filename":"annotated_types-0.3.0-py3-none-any.whl","has_sig":false,"md5_digest":"dd7ff56e7d25b82c4ee9827086316fd0","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7.0,<4.0.0","size":10700,"upload_time":"2022-09-25T02:37:15","upload_time_iso_8601":"2022-09-25T02:37:15.612326Z","url":"https://files.pythonhosted.org/packages/6e/6d/c91d549204fb4413c95b7f1366b6ceb7afa5e0f796be3459e94dbaa92e78/annotated_types-0.3.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"a35ef6c570eee53190edcdc88def6604e0c4a2296db0d7cb1b4bbe5c288cbac8","md5":"873ba9bc8945040e3d4b6e48515acd17","sha256":"e256fab6d2cce99d6166ff742a67addad9ec07dbae58421f04a0c0ed84772a51"},"downloads":-1,"filename":"annotated-types-0.3.0.tar.gz","has_sig":false,"md5_digest":"873ba9bc8945040e3d4b6e48515acd17","packagetype":"sdist","python_version":"source","requires_python":">=3.7.0,<4.0.0","size":13203,"upload_time":"2022-09-25T02:37:14","upload_time_iso_8601":"2022-09-25T02:37:14.056816Z","url":"https://files.pythonhosted.org/packages/a3/5e/f6c570eee53190edcdc88def6604e0c4a2296db0d7cb1b4bbe5c288cbac8/annotated-types-0.3.0.tar.gz","yanked":false,"yanked_reason":null}],"0.3.1":[{"comment_text":"","core-metadata":{"sha256":"b868d466b4ce636d6c97404bc30fa17a97b4de19f60e7d50b6834e3f81535dde"},"digests":{"blake2b_256":"0c4f416437e08635edb6116c707d38fff5ae361b5887e75fb213ed057ce6cf4e","md5":"4da94fa4969e1ee7ca8534583e90d2e4","sha256":"de6be29714cc5943221d5fc75cfa2293d78b2ad99ef6dc4d46abe59522b742f3"},"downloads":-1,"filename":"annotated_types-0.3.1-py3-none-any.whl","has_sig":false,"md5_digest":"4da94fa4969e1ee7ca8534583e90d2e4","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7.0,<4.0.0","size":10705,"upload_time":"2022-09-25T17:08:04","upload_time_iso_8601":"2022-09-25T17:08:04.584891Z","url":"https://files.pythonhosted.org/packages/0c/4f/416437e08635edb6116c707d38fff5ae361b5887e75fb213ed057ce6cf4e/annotated_types-0.3.1-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"6f29df1f669e5a58731880b611f7f2acc21b7a08a7e7db65e1e1c089e905a2e0","md5":"771abce895e91d1dc33b3dc9957d31c1","sha256":"29190eb758201c03ae3935615a03245618b4cff7abdbb951c3d1d7344877d91c"},"downloads":-1,"filename":"annotated-types-0.3.1.tar.gz","has_sig":false,"md5_digest":"771abce895e91d1dc33b3dc9957d31c1","packagetype":"sdist","python_version":"source","requires_python":">=3.7.0,<4.0.0","size":13199,"upload_time":"2022-09-25T17:08:03","upload_time_iso_8601":"2022-09-25T17:08:03.237969Z","url":"https://files.pythonhosted.org/packages/6f/29/df1f669e5a58731880b611f7f2acc21b7a08a7e7db65e1e1c089e905a2e0/annotated-types-0.3.1.tar.gz","yanked":false,"yanked_reason":null}],"0.4.0":[{"comment_text":"","core-metadata":{"sha256":"9bd60bcf6334f76347cf0ad427ffee54902bde029584299b4f5a83d839e409e8"},"digests":{"blake2b_256":"7206228244d7bc5db85719963cb957abd097ecc0e412053c70a4d3d5ef7cd5f3","md5":"27794e2c465098f5d839162fac4f5d7b","sha256":"ac27bcccc7a1447efe9a9bd1145766cc14a841b107a6040a799c260e83adf67d"},"downloads":-1,"filename":"annotated_types-0.4.0-py3-none-any.whl","has_sig":false,"md5_digest":"27794e2c465098f5d839162fac4f5d7b","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":11591,"upload_time":"2022-10-12T10:59:15","upload_time_iso_8601":"2022-10-12T10:59:15.063139Z","url":"https://files.pythonhosted.org/packages/72/06/228244d7bc5db85719963cb957abd097ecc0e412053c70a4d3d5ef7cd5f3/annotated_types-0.4.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ca8eb5223a88cdf4f9bc0d5e44d02ca9cd8c7e4a0d18b99d8b7ebd2f7dd7275f","md5":"7b68e3def5b0af4850ee7635b2fd98a5","sha256":"fae0ca44ad43b7e54dbb02b22137885b1cb1cb7a312fe9fe7a6d77a0e5b0443a"},"downloads":-1,"filename":"annotated_types-0.4.0.tar.gz","has_sig":false,"md5_digest":"7b68e3def5b0af4850ee7635b2fd98a5","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":12835,"upload_time":"2022-10-12T10:59:16","upload_time_iso_8601":"2022-10-12T10:59:16.878555Z","url":"https://files.pythonhosted.org/packages/ca/8e/b5223a88cdf4f9bc0d5e44d02ca9cd8c7e4a0d18b99d8b7ebd2f7dd7275f/annotated_types-0.4.0.tar.gz","yanked":false,"yanked_reason":null}],"0.5.0":[{"comment_text":"","core-metadata":{"sha256":"89ed8d4c1ba214a493e4cdb251580e832999910e6269df3604f15c674ed92814"},"digests":{"blake2b_256":"d8f0a2ee543a96cc624c35a9086f39b1ed2aa403c6d355dfe47a11ee5c64a164","md5":"2180d19462a7a27079d0d3162a81e752","sha256":"58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd"},"downloads":-1,"filename":"annotated_types-0.5.0-py3-none-any.whl","has_sig":false,"md5_digest":"2180d19462a7a27079d0d3162a81e752","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.7","size":11136,"upload_time":"2023-05-31T19:09:56","upload_time_iso_8601":"2023-05-31T19:09:56.141367Z","url":"https://files.pythonhosted.org/packages/d8/f0/a2ee543a96cc624c35a9086f39b1ed2aa403c6d355dfe47a11ee5c64a164/annotated_types-0.5.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"429741ccb6acac36fdd13592a686a21b311418f786f519e5794b957afbcea938","md5":"45a0d68f2cb300d45126622d2724b78a","sha256":"47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802"},"downloads":-1,"filename":"annotated_types-0.5.0.tar.gz","has_sig":false,"md5_digest":"45a0d68f2cb300d45126622d2724b78a","packagetype":"sdist","python_version":"source","requires_python":">=3.7","size":13504,"upload_time":"2023-05-31T19:09:57","upload_time_iso_8601":"2023-05-31T19:09:57.294215Z","url":"https://files.pythonhosted.org/packages/42/97/41ccb6acac36fdd13592a686a21b311418f786f519e5794b957afbcea938/annotated_types-0.5.0.tar.gz","yanked":false,"yanked_reason":null}],"0.6.0":[{"comment_text":"","core-metadata":{"sha256":"efc61eaee4f76ff76887c4dbb0aeea71ba98e1cbc2333fd041108651bc80a3a3"},"digests":{"blake2b_256":"2878d31230046e58c207284c6b2c4e8d96e6d3cb4e52354721b944d3e1ee4aa5","md5":"7ef400377e3898c3af4de1dec8a2f7ce","sha256":"0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},"downloads":-1,"filename":"annotated_types-0.6.0-py3-none-any.whl","has_sig":false,"md5_digest":"7ef400377e3898c3af4de1dec8a2f7ce","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":12360,"upload_time":"2023-10-06T18:53:18","upload_time_iso_8601":"2023-10-06T18:53:18.027190Z","url":"https://files.pythonhosted.org/packages/28/78/d31230046e58c207284c6b2c4e8d96e6d3cb4e52354721b944d3e1ee4aa5/annotated_types-0.6.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"67fe8c7b275824c6d2cd17c93ee85d0ee81c090285b6d52f4876ccc47cf9c3c4","md5":"5fe2125b08851f0d05a8efad6456861c","sha256":"563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},"downloads":-1,"filename":"annotated_types-0.6.0.tar.gz","has_sig":false,"md5_digest":"5fe2125b08851f0d05a8efad6456861c","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":14670,"upload_time":"2023-10-06T18:53:19","upload_time_iso_8601":"2023-10-06T18:53:19.389579Z","url":"https://files.pythonhosted.org/packages/67/fe/8c7b275824c6d2cd17c93ee85d0ee81c090285b6d52f4876ccc47cf9c3c4/annotated_types-0.6.0.tar.gz","yanked":false,"yanked_reason":null}],"0.7.0":[{"comment_text":"","core-metadata":{"sha256":"ee5b6ac64b09274c026051813484025939564067801f485115d9cadc207cf791"},"digests":{"blake2b_256":"78b66307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8","md5":"b132aea373e91e5a46e3b5425c9970e2","sha256":"1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"},"downloads":-1,"filename":"annotated_types-0.7.0-py3-none-any.whl","has_sig":false,"md5_digest":"b132aea373e91e5a46e3b5425c9970e2","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.8","size":13643,"upload_time":"2024-05-20T21:33:24","upload_time_iso_8601":"2024-05-20T21:33:24.100469Z","url":"https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"ee67531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5","md5":"5c943b7c51b0b7dcadf46da4a99c84a1","sha256":"aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"},"downloads":-1,"filename":"annotated_types-0.7.0.tar.gz","has_sig":false,"md5_digest":"5c943b7c51b0b7dcadf46da4a99c84a1","packagetype":"sdist","python_version":"source","requires_python":">=3.8","size":16081,"upload_time":"2024-05-20T21:33:25","upload_time_iso_8601":"2024-05-20T21:33:25.928805Z","url":"https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz","yanked":false,"yanked_reason":null}],"0.8.0":[{"comment_text":null,"core-metadata":{"sha256":"614985b278f601b8ef863f82783b991cc3ada4b89f592eb71c7c48c5f2ef2298"},"digests":{"blake2b_256":"99918acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90","md5":"1959042ee69ece0a558a30aa700cfc59","sha256":"f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0"},"downloads":-1,"filename":"annotated_types-0.8.0-py3-none-any.whl","has_sig":false,"md5_digest":"1959042ee69ece0a558a30aa700cfc59","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":13427,"upload_time":"2026-07-23T20:16:12","upload_time_iso_8601":"2026-07-23T20:16:12.938651Z","url":"https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"5f56a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a","md5":"e82458911a4050ecf61f2a4c6015b7e9","sha256":"13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7"},"downloads":-1,"filename":"annotated_types-0.8.0.tar.gz","has_sig":false,"md5_digest":"e82458911a4050ecf61f2a4c6015b7e9","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":15893,"upload_time":"2026-07-23T20:16:13","upload_time_iso_8601":"2026-07-23T20:16:13.995706Z","url":"https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":null,"core-metadata":{"sha256":"614985b278f601b8ef863f82783b991cc3ada4b89f592eb71c7c48c5f2ef2298"},"digests":{"blake2b_256":"99918acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90","md5":"1959042ee69ece0a558a30aa700cfc59","sha256":"f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0"},"downloads":-1,"filename":"annotated_types-0.8.0-py3-none-any.whl","has_sig":false,"md5_digest":"1959042ee69ece0a558a30aa700cfc59","packagetype":"bdist_wheel","python_version":"py3","requires_python":">=3.10","size":13427,"upload_time":"2026-07-23T20:16:12","upload_time_iso_8601":"2026-07-23T20:16:12.938651Z","url":"https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":null,"core-metadata":false,"digests":{"blake2b_256":"5f56a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a","md5":"e82458911a4050ecf61f2a4c6015b7e9","sha256":"13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7"},"downloads":-1,"filename":"annotated_types-0.8.0.tar.gz","has_sig":false,"md5_digest":"e82458911a4050ecf61f2a4c6015b7e9","packagetype":"sdist","python_version":"source","requires_python":">=3.10","size":15893,"upload_time":"2026-07-23T20:16:13","upload_time_iso_8601":"2026-07-23T20:16:13.995706Z","url":"https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz","yanked":false,"yanked_reason":null}],"vulnerabilities":[]}
