https://github.com/python/cpython/commit/e4ac196aaaa9fd2f1bd0050797b58959671c549a
commit: e4ac196aaaa9fd2f1bd0050797b58959671c549a
branch: main
author: Stan Ulbrych <89152624+stanfromirel...@users.noreply.github.com>
committer: picnixz <10796600+picn...@users.noreply.github.com>
date: 2025-03-14T10:46:57+01:00
summary:

gh-124269: Simplify `typing.Annotated` docs (#130770)

---------

Co-authored-by: Jelle Zijlstra <jelle.zijls...@gmail.com>
Co-authored-by: Bénédikt Tran <10796600+picn...@users.noreply.github.com>

files:
M Doc/library/typing.rst

diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
index 6d5ee75f11efa7..44cbc73d7ca478 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -1376,47 +1376,37 @@ These can be used as types in annotations. They all 
support subscription using
       T1 = Annotated[int, ValueRange(-10, 5)]
       T2 = Annotated[T1, ValueRange(-20, 3)]
 
-   Details of the syntax:
+   The first argument to ``Annotated`` must be a valid type. Multiple metadata
+   elements can be supplied as ``Annotated`` supports variadic arguments. The
+   order of the metadata elements is preserved and matters for equality 
checks::
 
-   * The first argument to ``Annotated`` must be a valid type
-
-   * Multiple metadata elements can be supplied (``Annotated`` supports 
variadic
-     arguments)::
-
-        @dataclass
-        class ctype:
-            kind: str
-
-        Annotated[int, ValueRange(3, 10), ctype("char")]
-
-     It is up to the tool consuming the annotations to decide whether the
-     client is allowed to add multiple metadata elements to one annotation and 
how to
-     merge those annotations.
+      @dataclass
+      class ctype:
+           kind: str
 
-   * ``Annotated`` must be subscripted with at least two arguments (
-     ``Annotated[int]`` is not valid)
+      a1 = Annotated[int, ValueRange(3, 10), ctype("char")]
+      a2 = Annotated[int, ctype("char"), ValueRange(3, 10)]
 
-   * The order of the metadata elements is preserved and matters for equality
-     checks::
+      assert a1 != a2  # Order matters
 
-        assert Annotated[int, ValueRange(3, 10), ctype("char")] != Annotated[
-            int, ctype("char"), ValueRange(3, 10)
-        ]
+   It is up to the tool consuming the annotations to decide whether the
+   client is allowed to add multiple metadata elements to one annotation and 
how to
+   merge those annotations.
 
-   * Nested ``Annotated`` types are flattened. The order of the metadata 
elements
-     starts with the innermost annotation::
+   Nested ``Annotated`` types are flattened. The order of the metadata elements
+   starts with the innermost annotation::
 
-        assert Annotated[Annotated[int, ValueRange(3, 10)], ctype("char")] == 
Annotated[
-            int, ValueRange(3, 10), ctype("char")
-        ]
+      assert Annotated[Annotated[int, ValueRange(3, 10)], ctype("char")] == 
Annotated[
+          int, ValueRange(3, 10), ctype("char")
+      ]
 
-   * Duplicated metadata elements are not removed::
+   Duplicated metadata elements are not removed::
 
-        assert Annotated[int, ValueRange(3, 10)] != Annotated[
-            int, ValueRange(3, 10), ValueRange(3, 10)
-        ]
+      assert Annotated[int, ValueRange(3, 10)] != Annotated[
+          int, ValueRange(3, 10), ValueRange(3, 10)
+      ]
 
-   * ``Annotated`` can be used with nested and generic aliases:
+   ``Annotated`` can be used with nested and generic aliases:
 
      .. testcode::
 
@@ -1430,19 +1420,15 @@ These can be used as types in annotations. They all 
support subscription using
         # ``Annotated[list[tuple[int, int]], MaxLen(10)]``:
         type V = Vec[int]
 
-   * ``Annotated`` cannot be used with an unpacked :class:`TypeVarTuple`::
-
-        type Variadic[*Ts] = Annotated[*Ts, Ann1]  # NOT valid
-
-     This would be equivalent to::
+   ``Annotated`` cannot be used with an unpacked :class:`TypeVarTuple`::
 
-        Annotated[T1, T2, T3, ..., Ann1]
+        type Variadic[*Ts] = Annotated[*Ts, Ann1] = Annotated[T1, T2, T3, ..., 
Ann1]  # NOT valid
 
-     where ``T1``, ``T2``, etc. are :class:`TypeVars <TypeVar>`. This would be
-     invalid: only one type should be passed to Annotated.
+   where ``T1``, ``T2``, ... are :class:`TypeVars <TypeVar>`. This is invalid 
as
+   only one type should be passed to Annotated.
 
-   * By default, :func:`get_type_hints` strips the metadata from annotations.
-     Pass ``include_extras=True`` to have the metadata preserved:
+   By default, :func:`get_type_hints` strips the metadata from annotations.
+   Pass ``include_extras=True`` to have the metadata preserved:
 
      .. doctest::
 
@@ -1454,8 +1440,8 @@ These can be used as types in annotations. They all 
support subscription using
         >>> get_type_hints(func, include_extras=True)
         {'x': typing.Annotated[int, 'metadata'], 'return': <class 'NoneType'>}
 
-   * At runtime, the metadata associated with an ``Annotated`` type can be
-     retrieved via the :attr:`!__metadata__` attribute:
+   At runtime, the metadata associated with an ``Annotated`` type can be
+   retrieved via the :attr:`!__metadata__` attribute:
 
      .. doctest::
 
@@ -1466,8 +1452,8 @@ These can be used as types in annotations. They all 
support subscription using
         >>> X.__metadata__
         ('very', 'important', 'metadata')
 
-   * At runtime, if you want to retrieve the original
-     type wrapped by ``Annotated``, use the :attr:`!__origin__` attribute:
+   If you want to retrieve the original type wrapped by ``Annotated``, use the
+   :attr:`!__origin__` attribute:
 
      .. doctest::
 
@@ -1476,7 +1462,7 @@ These can be used as types in annotations. They all 
support subscription using
         >>> Password.__origin__
         <class 'str'>
 
-     Note that using :func:`get_origin` will return ``Annotated`` itself:
+   Note that using :func:`get_origin` will return ``Annotated`` itself:
 
      .. doctest::
 

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to