@@ -1315,47 +1315,37 @@ These can be used as types in annotations. They all support subscription using
13151315 T1 = Annotated[int, ValueRange(-10, 5)]
13161316 T2 = Annotated[T1, ValueRange(-20, 3)]
13171317
1318- Details of the syntax:
1318+ The first argument to ``Annotated `` must be a valid type. Multiple metadata
1319+ elements can be supplied as ``Annotated `` supports variadic arguments. The
1320+ order of the metadata elements is preserved and matters for equality checks::
13191321
1320- * The first argument to ``Annotated `` must be a valid type
1321-
1322- * Multiple metadata elements can be supplied (``Annotated `` supports variadic
1323- arguments)::
1324-
1325- @dataclass
1326- class ctype:
1327- kind: str
1328-
1329- Annotated[int, ValueRange(3, 10), ctype("char")]
1330-
1331- It is up to the tool consuming the annotations to decide whether the
1332- client is allowed to add multiple metadata elements to one annotation and how to
1333- merge those annotations.
1322+ @dataclass
1323+ class ctype:
1324+ kind: str
13341325
1335- * `` Annotated `` must be subscripted with at least two arguments (
1336- `` Annotated[int] `` is not valid)
1326+ a1 = Annotated[int, ValueRange(3, 10), ctype("char")]
1327+ a2 = Annotated[int, ctype("char"), ValueRange(3, 10)]
13371328
1338- * The order of the metadata elements is preserved and matters for equality
1339- checks::
1329+ assert a1 != a2 # Order matters
13401330
1341- assert Annotated[int, ValueRange(3, 10), ctype("char")] != Annotated[
1342- int, ctype("char"), ValueRange(3, 10)
1343- ]
1331+ It is up to the tool consuming the annotations to decide whether the
1332+ client is allowed to add multiple metadata elements to one annotation and how to
1333+ merge those annotations.
13441334
1345- * Nested ``Annotated `` types are flattened. The order of the metadata elements
1346- starts with the innermost annotation::
1335+ Nested ``Annotated `` types are flattened. The order of the metadata elements
1336+ starts with the innermost annotation::
13471337
1348- assert Annotated[Annotated[int, ValueRange(3, 10)], ctype("char")] == Annotated[
1349- int, ValueRange(3, 10), ctype("char")
1350- ]
1338+ assert Annotated[Annotated[int, ValueRange(3, 10)], ctype("char")] == Annotated[
1339+ int, ValueRange(3, 10), ctype("char")
1340+ ]
13511341
1352- * Duplicated metadata elements are not removed::
1342+ Duplicated metadata elements are not removed::
13531343
1354- assert Annotated[int, ValueRange(3, 10)] != Annotated[
1355- int, ValueRange(3, 10), ValueRange(3, 10)
1356- ]
1344+ assert Annotated[int, ValueRange(3, 10)] != Annotated[
1345+ int, ValueRange(3, 10), ValueRange(3, 10)
1346+ ]
13571347
1358- * ``Annotated `` can be used with nested and generic aliases:
1348+ ``Annotated `` can be used with nested and generic aliases:
13591349
13601350 .. testcode ::
13611351
@@ -1369,19 +1359,15 @@ These can be used as types in annotations. They all support subscription using
13691359 # ``Annotated[list[tuple[int, int]], MaxLen(10)] ``:
13701360 type V = Vec[int]
13711361
1372- * ``Annotated `` cannot be used with an unpacked :class: `TypeVarTuple `::
1373-
1374- type Variadic[*Ts] = Annotated[*Ts, Ann1] # NOT valid
1375-
1376- This would be equivalent to::
1362+ ``Annotated `` cannot be used with an unpacked :class: `TypeVarTuple `::
13771363
1378- Annotated[T1, T2, T3, ..., Ann1]
1364+ type Variadic[*Ts] = Annotated[*Ts, Ann1] = Annotated[ T1, T2, T3, ..., Ann1] # NOT valid
13791365
1380- where ``T1``, ``T2``, etc. are :class:`TypeVars <TypeVar>`. This would be
1381- invalid: only one type should be passed to Annotated.
1366+ where ``T1 ``, ``T2 ``, ... are :class: `TypeVars <TypeVar> `. This is invalid as
1367+ only one type should be passed to Annotated.
13821368
1383- * By default, :func: `get_type_hints ` strips the metadata from annotations.
1384- Pass ``include_extras=True `` to have the metadata preserved:
1369+ By default, :func: `get_type_hints ` strips the metadata from annotations.
1370+ Pass ``include_extras=True `` to have the metadata preserved:
13851371
13861372 .. doctest ::
13871373
@@ -1393,8 +1379,8 @@ These can be used as types in annotations. They all support subscription using
13931379 >>> get_type_hints(func, include_extras = True )
13941380 {'x': typing.Annotated[int, 'metadata'], 'return': <class 'NoneType'>}
13951381
1396- * At runtime, the metadata associated with an ``Annotated `` type can be
1397- retrieved via the :attr: `!__metadata__ ` attribute:
1382+ At runtime, the metadata associated with an ``Annotated `` type can be
1383+ retrieved via the :attr: `!__metadata__ ` attribute:
13981384
13991385 .. doctest ::
14001386
@@ -1405,8 +1391,8 @@ These can be used as types in annotations. They all support subscription using
14051391 >>> X.__metadata__
14061392 ('very', 'important', 'metadata')
14071393
1408- * At runtime, if you want to retrieve the original
1409- type wrapped by `` Annotated ``, use the :attr: `!__origin__ ` attribute:
1394+ If you want to retrieve the original type wrapped by `` Annotated ``, use the
1395+ :attr: `!__origin__ ` attribute:
14101396
14111397 .. doctest ::
14121398
@@ -1415,7 +1401,7 @@ These can be used as types in annotations. They all support subscription using
14151401 >>> Password.__origin__
14161402 <class 'str'>
14171403
1418- Note that using :func: `get_origin ` will return ``Annotated `` itself:
1404+ Note that using :func: `get_origin ` will return ``Annotated `` itself:
14191405
14201406 .. doctest ::
14211407
0 commit comments