Uh oh!
There was an error while loading. Please reload this page.
parameter specification/type variable tuple variance - #2215
Conversation
5f8e0cc to
d9d82c9Compare81ba400 to
54ad5e1Compare
JelleZijlstra
left a comment
There was a problem hiding this comment.
I like adding this if we can get it specified nicely, but this PR is not ready; the proposed test is incorrect.
Also, https://typing.python.org/en/latest/spec/generics.html#paramspec-variables still says variance on ParamSpec is unsupported; this should be updated.
I'd also like to see an implementation in at least one type checker, even if only as a draft PR, so we can be confident this is something that can be feasibly implemented.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
davidhalter
commented
Apr 2, 2026
I personally would also like to see tests added for param spec variance inference, since that would probably need to be supported as well. |
JelleZijlstra
commented
Apr 2, 2026
The test cases do have variance inference, though as I noted some of the cases are wrong. But it would probably be useful to have a few more cases, and I'd recommend putting the tests for paramspec variance in their own file so we can track type checker support more precisely. |
I have wip support in PyCharm, but I could also add it to basedpyright it was very straightforward to implement |
Oh right, sorry I didn't see them, because I thought they would be in a different file. I'm also very much +1 on putting those tests into a different file (for example |
8f30004 to
117964eCompare7a21592 to
5788125CompareKotlinIsland
commented
Apr 23, 2026
support has landed in pycharm and cpython |
JelleZijlstra
commented
Apr 23, 2026
https://typing.python.org/en/latest/spec/generics.html#paramspec-variables stills says that we don't support variance in ParamSpec, that should be fixed in this PR. |
JelleZijlstra
commented
Apr 23, 2026
Also can you open an issue on python/typing-council asking for a formal pronouncement? |
5788125 to
f23d8aeCompareKotlinIsland
commented
Apr 23, 2026
JelleZijlstra
commented
Apr 23, 2026
Noticed some more issues:
|
not |
414c697 to
02c4628CompareJelleZijlstra
commented
Apr 23, 2026
I don't think that's right. The form we want here should be a supertype of every other possible value, and something like a one-parameter callable is not a subtype of |
AlexWaygood
commented
Apr 23, 2026
In ty we have a type that we spell as |
JelleZijlstra
left a comment
There was a problem hiding this comment.
Agree with this idea, we might have to tweak the exact PR a bit more.
## Summary This PR adds `covariant`, `contravariant`, and `infer_variance` support to `ParamSpec`. See: python/typing#2215. See: astral-sh#24479 (review).
davidhalter
left a comment
There was a problem hiding this comment.
I like the general approach. I think it would also be useful to have at least one type checker with a proper implementation of this new feature.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
see the mr description, it's implemented in pycharm and basedpyright |
94b1653 to
7a4c793CompareUh oh!
There was an error while loading. Please reload this page.
b001edf to
5f531efCompare7c7dc6a to
34c9c0dCompareUh oh!
There was an error while loading. Please reload this page.
fixup! fixup! specify that parameter specification should have variance
31deb73 to
1d4ba59Compare1d4ba59 to
424faf1Compare
discussion: https://discuss.python.org/t/parameter-specifications-should-have-variance/106452
typing.TypeVarTuplecpython#148212typing.TypeVarTuple: add bound/variance properties from 3.15 typeshed#15670 / Add Python 3.15 typing updates typeshed#15725