Closed
Description
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