mypy icon indicating copy to clipboard operation
mypy copied to clipboard

Cleanup generic class variable access

Open ilevkivskyi opened this issue 5 months ago • 4 comments

Fixes https://github.com/python/mypy/issues/5144 Fixes https://github.com/python/mypy/issues/15223

This is related to the work on https://github.com/python/mypy/issues/7724

Now that all attribute access goes through checkmember.py there is not much benefit in giving an error at the definition site, especially that it prohibits some valid (and common) use cases, see comments in https://github.com/python/mypy/issues/5144. While looking at this I discovered a bunch of defects in the implementation, that I also fix (I am keeping unsafe self-type related logic as is):

  • We used to erase type vars of the definition class instead of the use class. This caused type variables leaks.
  • The erasure was inconsistent, so that in some cases we silently erased type variables to Any even in allowed use cases
  • TypeVarTuple and ParamSpec were not handled as equal to regular type variables (I guess because of old problems with erasing them)

ilevkivskyi avatar Jun 13 '25 15:06 ilevkivskyi

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

mypy_primer (https://github.com/hauntsaninja/mypy_primer)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

paroxython (https://github.com/laowantong/paroxython)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

pytest-robotframework (https://github.com/detachhead/pytest-robotframework)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 251, in _analyze_member_access
+   File "/checkmember.py", line 250, in _analyze_member_access
-   File "/checkmember.py", line 478, in analyze_type_type_member_access
+   File "/checkmember.py", line 477, in analyze_type_type_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

anyio (https://github.com/agronholm/anyio)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

pylox (https://github.com/sco1/pylox)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

CPython (peg_generator) (https://github.com/python/cpython)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

setuptools (https://github.com/pypa/setuptools)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

websockets (https://github.com/aaugustin/websockets)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

colour (https://github.com/colour-science/colour)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

ignite (https://github.com/pytorch/ignite)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

speedrun.com_global_scoreboard_webapp (https://github.com/Avasam/speedrun.com_global_scoreboard_webapp)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

aiortc (https://github.com/aiortc/aiortc)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

httpx-caching (https://github.com/johtso/httpx-caching)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

archinstall (https://github.com/archlinux/archinstall)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

aiohttp-devtools (https://github.com/aio-libs/aiohttp-devtools)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

PyGithub (https://github.com/PyGithub/PyGithub)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

sockeye (https://github.com/awslabs/sockeye)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

aiohttp (https://github.com/aio-libs/aiohttp)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

parso (https://github.com/davidhalter/parso)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

zipp (https://github.com/jaraco/zipp)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 251, in _analyze_member_access
+   File "/checkmember.py", line 250, in _analyze_member_access
-   File "/checkmember.py", line 478, in analyze_type_type_member_access
+   File "/checkmember.py", line 477, in analyze_type_type_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

pip (https://github.com/pypa/pip)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

CPython (cases_generator) (https://github.com/python/cpython)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

nox (https://github.com/wntrblm/nox)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

antidote (https://github.com/Finistere/antidote)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

poetry (https://github.com/python-poetry/poetry)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 251, in _analyze_member_access
+   File "/checkmember.py", line 250, in _analyze_member_access
-   File "/checkmember.py", line 478, in analyze_type_type_member_access
+   File "/checkmember.py", line 477, in analyze_type_type_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

tornado (https://github.com/tornadoweb/tornado)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

kopf (https://github.com/nolar/kopf)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

jinja (https://github.com/pallets/jinja)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

mkdocs (https://github.com/mkdocs/mkdocs)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

Tanjun (https://github.com/FasterSpeeding/Tanjun)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

ibis (https://github.com/ibis-project/ibis)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
- ibis/common/bases.py:110: error: Unsupported target for indexed assignment ("Mapping[Any, Any]")  [index]
+ ibis/common/bases.py:110: error: Unsupported target for indexed assignment ("Mapping[Any, Self]")  [index]
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

pandas (https://github.com/pandas-dev/pandas)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

porcupine (https://github.com/Akuli/porcupine)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

yarl (https://github.com/aio-libs/yarl)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

hydpy (https://github.com/hydpy-dev/hydpy)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

mongo-python-driver (https://github.com/mongodb/mongo-python-driver)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

pycryptodome (https://github.com/Legrandin/pycryptodome)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

cloud-init (https://github.com/canonical/cloud-init)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

scikit-learn (https://github.com/scikit-learn/scikit-learn)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

urllib3 (https://github.com/urllib3/urllib3)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

downforeveryone (https://github.com/rpdelaney/downforeveryone)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

build (https://github.com/pypa/build)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

typeshed-stats (https://github.com/AlexWaygood/typeshed-stats)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

bokeh (https://github.com/bokeh/bokeh)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

pandera (https://github.com/pandera-dev/pandera)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

prefect (https://github.com/PrefectHQ/prefect)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

materialize (https://github.com/MaterializeInc/materialize)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

janus (https://github.com/aio-libs/janus)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

python-chess (https://github.com/niklasf/python-chess)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 251, in _analyze_member_access
+   File "/checkmember.py", line 250, in _analyze_member_access
-   File "/checkmember.py", line 478, in analyze_type_type_member_access
+   File "/checkmember.py", line 477, in analyze_type_type_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

bidict (https://github.com/jab/bidict)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 251, in _analyze_member_access
+   File "/checkmember.py", line 250, in _analyze_member_access
-   File "/checkmember.py", line 478, in analyze_type_type_member_access
+   File "/checkmember.py", line 477, in analyze_type_type_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

python-sop (https://gitlab.com/dkg/python-sop)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

kornia (https://github.com/kornia/kornia)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 251, in _analyze_member_access
+   File "/checkmember.py", line 250, in _analyze_member_access
-   File "/checkmember.py", line 478, in analyze_type_type_member_access
+   File "/checkmember.py", line 477, in analyze_type_type_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

nionutils (https://github.com/nion-software/nionutils)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

strawberry (https://github.com/strawberry-graphql/strawberry)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

asynq (https://github.com/quora/asynq)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

trio (https://github.com/python-trio/trio)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

pyodide (https://github.com/pyodide/pyodide)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 251, in _analyze_member_access
+   File "/checkmember.py", line 250, in _analyze_member_access
-   File "/checkmember.py", line 478, in analyze_type_type_member_access
+   File "/checkmember.py", line 477, in analyze_type_type_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

itsdangerous (https://github.com/pallets/itsdangerous)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

apprise (https://github.com/caronc/apprise)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

koda-validate (https://github.com/keithasaurus/koda-validate)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

boostedblob (https://github.com/hauntsaninja/boostedblob)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

jax (https://github.com/google/jax)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

dulwich (https://github.com/dulwich/dulwich)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 251, in _analyze_member_access
+   File "/checkmember.py", line 250, in _analyze_member_access
-   File "/checkmember.py", line 478, in analyze_type_type_member_access
+   File "/checkmember.py", line 477, in analyze_type_type_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

scipy (https://github.com/scipy/scipy)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

artigraph (https://github.com/artigraph/artigraph)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 251, in _analyze_member_access
+   File "/checkmember.py", line 250, in _analyze_member_access
-   File "/checkmember.py", line 478, in analyze_type_type_member_access
+   File "/checkmember.py", line 477, in analyze_type_type_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

arviz (https://github.com/arviz-devs/arviz)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

pyppeteer (https://github.com/pyppeteer/pyppeteer)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

Expression (https://github.com/cognitedata/Expression)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40
+ version: 1.17.0+dev.d95e747c29ef5d9ba14ded802b8efe3a08acb5bc
-   File "/checkmember.py", line 225, in analyze_member_access
+   File "/checkmember.py", line 224, in analyze_member_access
-   File "/checkmember.py", line 249, in _analyze_member_access
+   File "/checkmember.py", line 248, in _analyze_member_access
-   File "/checkmember.py", line 425, in analyze_type_callable_member_access
+   File "/checkmember.py", line 424, in analyze_type_callable_member_access
-   File "/checkmember.py", line 1241, in analyze_class_attribute_access
+   File "/checkmember.py", line 1245, in analyze_class_attribute_access

schema_salad (https://github.com/common-workflow-language/schema_salad)
- version: 1.17.0+dev.2ba79cba94c8a416c16877c1532932662ea20d40

... (truncated 839 lines) ...```

github-actions[bot] avatar Jun 13 '25 16:06 github-actions[bot]

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

ibis (https://github.com/ibis-project/ibis)
- ibis/common/bases.py:110: error: Unsupported target for indexed assignment ("Mapping[Any, Any]")  [index]
+ ibis/common/bases.py:110: error: Unsupported target for indexed assignment ("Mapping[Any, Self]")  [index]

hydpy (https://github.com/hydpy-dev/hydpy)
+ hydpy/core/variabletools.py:2448: error: Unused "type: ignore" comment  [unused-ignore]

artigraph (https://github.com/artigraph/artigraph)
- src/arti/internal/mappings.py:100: error: ClassVar cannot contain type variables  [misc]
+ src/arti/storage/__init__.py:74: error: Unused "type: ignore" comment  [unused-ignore]

comtypes (https://github.com/enthought/comtypes)
+ comtypes/hints.pyi:56: error: Unused "type: ignore" comment  [unused-ignore]

pwndbg (https://github.com/pwndbg/pwndbg)
- pwndbg/aglib/heap/structs.py:175: error: Access to generic instance variables via class is ambiguous  [misc]
- pwndbg/aglib/heap/structs.py:206: error: Access to generic instance variables via class is ambiguous  [misc]

github-actions[bot] avatar Jun 13 '25 17:06 github-actions[bot]

mypy_primer looks good.

ilevkivskyi avatar Jun 13 '25 17:06 ilevkivskyi

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

ibis (https://github.com/ibis-project/ibis)
- ibis/common/bases.py:110: error: Unsupported target for indexed assignment ("Mapping[Any, Any]")  [index]
+ ibis/common/bases.py:110: error: Unsupported target for indexed assignment ("Mapping[Any, Self]")  [index]

hydpy (https://github.com/hydpy-dev/hydpy)
+ hydpy/core/variabletools.py:2448: error: Unused "type: ignore" comment  [unused-ignore]

artigraph (https://github.com/artigraph/artigraph)
- src/arti/internal/mappings.py:100: error: ClassVar cannot contain type variables  [misc]
+ src/arti/storage/__init__.py:74: error: Unused "type: ignore" comment  [unused-ignore]

comtypes (https://github.com/enthought/comtypes)
+ comtypes/hints.pyi:56: error: Unused "type: ignore" comment  [unused-ignore]

pwndbg (https://github.com/pwndbg/pwndbg)
- pwndbg/aglib/heap/structs.py:175: error: Access to generic instance variables via class is ambiguous  [misc]
- pwndbg/aglib/heap/structs.py:206: error: Access to generic instance variables via class is ambiguous  [misc]

github-actions[bot] avatar Jun 18 '25 21:06 github-actions[bot]

@JukkaL Yeah, I was thinking about adding some more detailed docs on instance vs class vars in general (not just generic ones). I will do this separately.

ilevkivskyi avatar Jun 19 '25 16:06 ilevkivskyi