Skip to content

Relax TypeVar default ordering constraints #118772

Closed
@JelleZijlstra

Description

@JelleZijlstra

Bug report

Bug description:

% ./python.exe Python 3.14.0a0 (heads/main-dirty:891fd12e52, May 8 2024, 09:02:37) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from typing import * >>> T = TypeVar("T") >>> T_dflt = TypeVar("T_dflt", default=int) >>> Callable[[T_dflt], T] Traceback (most recent call last): File "<python-input-3>", line 1, in <module> Callable[[T_dflt], T] ~~~~~~~~^^^^^^^^^^^^^ File "/Users/jelle/py/cpython/Lib/typing.py", line 1717, in __getitem__ return self.__getitem_inner__(params) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^ File "/Users/jelle/py/cpython/Lib/typing.py", line 431, in inner return func(*args, **kwds) File "/Users/jelle/py/cpython/Lib/typing.py", line 1730, in __getitem_inner__ return self.copy_with(params) ~~~~~~~~~~~~~~^^^^^^^^ File "/Users/jelle/py/cpython/Lib/typing.py", line 1702, in copy_with return _CallableGenericAlias(self.__origin__, params, name=self._name, inst=self._inst) File "/Users/jelle/py/cpython/Lib/typing.py", line 1419, in __init__ self.__parameters__ = _collect_parameters(args) ~~~~~~~~~~~~~~~~~~~^^^^^^ File "/Users/jelle/py/cpython/Lib/typing.py", line 296, in _collect_parameters raise TypeError(f'Type parameter {t!r} without a default' ' follows type parameter with a default') TypeError: Type parameter ~T without a default follows type parameter with a default

This can reasonably happen if you have a generic class generic over a TypeVar with a default, and that TypeVar appears in a Callable parameter type annotation:

class X[T1=int]: def meth[T](self, x: Callable[[T1], T]): pass 

We encountered this in Hypothesis.

cc @Gobot1234

CPython versions tested on:

CPython main branch

Operating systems tested on:

macOS

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixes3.14bugs and security fixestopic-typingtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions