Skip to content

Commit

Permalink
pythongh-126543: Docs: change "bound type var" to "bounded" when used…
Browse files Browse the repository at this point in the history
… in the context of the 'bound' kw argument to TypeVar (pythonGH-126584)

(cherry picked from commit 434b297)

Co-authored-by: Pedro Fonini <fonini@protonmail.ch>
  • Loading branch information
fofoni authored and miss-islington committed Nov 11, 2024
1 parent abb8265 commit fe4e357
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 fe4e357

Please sign in to comment.