Skip to content

Conversation

@randolf-scholz
Copy link
Contributor

@randolf-scholz randolf-scholz commented Jan 19, 2026

Fixes #14071

It doesn't seem like this will be fixed in CPython (python/cpython#135312), so we should at least fix this in the stubs to prevent false positives like this: mypy-playground

from collections.abc import Sequence

def null_count(seq: Sequence[int | None]) -> int:
    return seq.count(value=None)

null_count([1, None, 2])  # TypeError at runtime. (false negative)

Updated methods of the following types to only accept positional-only arguments:

  • Sequence
  • MutableSequence
  • AbstractSet
  • MutableSet
  • KeysView
  • ValuesView
  • ItemsView

2026-01-20 (@srittau): Marked as deferred, until tests for 3.9 are dropped (#13782).

@randolf-scholz
Copy link
Contributor Author

I guess the failure for 3.9 will resolve itself soon: #13782

@github-actions

This comment has been minimized.

@srittau
Copy link
Collaborator

srittau commented Jan 20, 2026

LGTM, once we drop 3.9. (I've marked this as deferred until then.)

@srittau srittau added the status: deferred Issue or PR deferred until some precondition is fixed label Jan 20, 2026
@randolf-scholz randolf-scholz force-pushed the collections_abc_positional_only branch from 119ce3d to f85e9d3 Compare February 13, 2026 15:02
@randolf-scholz
Copy link
Contributor Author

Did a rebase to resolve conflicts (slice got updated and _from_iterable added).

Additionally:

  • made _from_iterable also positional only (it is an arbitrary name)
  • made ABCMeta.{__instancecheck__, __subclasscheck__} positional only

@github-actions
Copy link
Contributor

Diff from mypy_primer, showing the effect of this PR on open source code:

cwltool (https://github.com/common-workflow-language/cwltool)
+ cwltool/update.py: note: In function "v1_2to1_3dev1":
+ cwltool/update.py:55:25: error: Unexpected keyword argument "index" for "pop" of "MutableSequence"  [call-arg]
+ ...typeshed_to_test/stdlib/typing.pyi:698:5: note: "pop" of "MutableSequence" defined here

pydantic (https://github.com/pydantic/pydantic)
- pydantic/_internal/_model_construction.py:308: error: Incompatible types in assignment (expression has type "Callable[[Any], bool]", base class "ABCMeta" defined the type as "def __instancecheck__(cls, instance: Any) -> bool")  [assignment]
- pydantic/_internal/_model_construction.py:309: error: Incompatible types in assignment (expression has type "Callable[[type], bool]", base class "ABCMeta" defined the type as "def __subclasscheck__(cls, subclass: type) -> bool")  [assignment]

jax (https://github.com/google/jax)
+ jax/_src/util.py:826: error: Unused "type: ignore" comment  [unused-ignore]
+ jax/_src/util.py:827: error: Unused "type: ignore" comment  [unused-ignore]

@randolf-scholz
Copy link
Contributor Author

randolf-scholz commented Feb 13, 2026

nice, the ABCMeta change got rid of false positive here: https://github.com/pydantic/pydantic/blob/a910cae58661194d5a56b2f1300ebae9a8a747a3/pydantic/_internal/_model_construction.py#L308-L309

    __instancecheck__ = type.__instancecheck__  # pyright: ignore[reportAssignmentType]
    __subclasscheck__ = type.__subclasscheck__  # pyright: ignore[reportAssignmentType]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status: deferred Issue or PR deferred until some precondition is fixed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Use positional only arguments for dunder methods in collections.abc

2 participants