Skip to content

Commit

Permalink
[3.12] gh-126543: Docs: change "bound type var" to "bounded" when use…
Browse files Browse the repository at this point in the history
…d in the context of the 'bound' kw argument to TypeVar (GH-126584) (#126658)


(cherry picked from commit 434b297)

Co-authored-by: Pedro Fonini <[email protected]>
  • Loading branch information
miss-islington and fofoni authored Nov 11, 2024
1 parent abb8265 commit 55c5305
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions Doc/library/typing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1609,11 +1609,11 @@ without the dedicated syntax, as documented below.
class Sequence[T]: # T is a TypeVar
...

This syntax can also be used to create bound and constrained type
This syntax can also be used to create bounded and constrained type
variables::

class StrSequence[S: str]: # S is a TypeVar bound to str
...
class StrSequence[S: str]: # S is a TypeVar with a `str` upper bound;
... # we can say that S is "bounded by `str`"


class StrOrBytesSequence[A: (str, bytes)]: # A is a TypeVar constrained to str or bytes
Expand Down Expand Up @@ -1646,8 +1646,8 @@ without the dedicated syntax, as documented below.
"""Add two strings or bytes objects together."""
return x + y

Note that type variables can be *bound*, *constrained*, or neither, but
cannot be both bound *and* constrained.
Note that type variables can be *bounded*, *constrained*, or neither, but
cannot be both bounded *and* constrained.

The variance of type variables is inferred by type checkers when they are created
through the :ref:`type parameter syntax <type-params>` or when
Expand All @@ -1657,8 +1657,8 @@ without the dedicated syntax, as documented below.
By default, manually created type variables are invariant.
See :pep:`484` and :pep:`695` for more details.

Bound type variables and constrained type variables have different
semantics in several important ways. Using a *bound* type variable means
Bounded type variables and constrained type variables have different
semantics in several important ways. Using a *bounded* type variable means
that the ``TypeVar`` will be solved using the most specific type possible::

x = print_capitalized('a string')
Expand All @@ -1672,8 +1672,8 @@ without the dedicated syntax, as documented below.

z = print_capitalized(45) # error: int is not a subtype of str

Type variables can be bound to concrete types, abstract types (ABCs or
protocols), and even unions of types::
The upper bound of a type variable can be a concrete type, abstract type
(ABC or Protocol), or even a union of types::

# Can be anything with an __abs__ method
def print_abs[T: SupportsAbs](arg: T) -> None:
Expand Down Expand Up @@ -1717,7 +1717,7 @@ without the dedicated syntax, as documented below.

.. attribute:: __bound__

The bound of the type variable, if any.
The upper bound of the type variable, if any.

.. versionchanged:: 3.12

Expand Down Expand Up @@ -1903,7 +1903,7 @@ without the dedicated syntax, as documented below.
return x + y

Without ``ParamSpec``, the simplest way to annotate this previously was to
use a :class:`TypeVar` with bound ``Callable[..., Any]``. However this
use a :class:`TypeVar` with upper bound ``Callable[..., Any]``. However this
causes two problems:

1. The type checker can't type check the ``inner`` function because
Expand Down

0 comments on commit 55c5305

Please sign in to comment.