Skip to content

[ty] Detect invalid attempts to instantiate abstract classes#22898

Draft
AlexWaygood wants to merge 2 commits intomainfrom
alex/abstract-class-instantiation
Draft

[ty] Detect invalid attempts to instantiate abstract classes#22898
AlexWaygood wants to merge 2 commits intomainfrom
alex/abstract-class-instantiation

Conversation

@AlexWaygood
Copy link
Member

@AlexWaygood AlexWaygood commented Jan 27, 2026

Summary

Closes astral-sh/ty#1877

Test Plan

@AlexWaygood AlexWaygood added the ty Multi-file analysis & type inference label Jan 27, 2026
@astral-sh-bot
Copy link

astral-sh-bot bot commented Jan 27, 2026

Typing conformance results improved 🎉

The percentage of diagnostics emitted that were expected errors increased from 79.63% to 79.71%. The percentage of expected errors that received a diagnostic increased from 70.86% to 71.23%.

Summary

Metric Old New Diff Outcome
True Positives 766 770 +4 ⏫ (✅)
False Positives 196 196 +0
False Negatives 315 311 -4 ⏬ (✅)
Total Diagnostics 962 966 +4
Precision 79.63% 79.71% +0.08% ⏫ (✅)
Recall 70.86% 71.23% +0.37% ⏫ (✅)

True positives added

Details
Location Name Message
protocols_explicit.py:134:6 call-non-callable Cannot instantiate Concrete5 with unimplemented abstract method method1
protocols_explicit.py:164:7 call-non-callable Cannot instantiate Concrete7A with unimplemented abstract method method1
protocols_explicit.py:60:5 call-non-callable Cannot instantiate Point with unimplemented abstract methods intensity and transparency
protocols_merging.py:82:5 call-non-callable Cannot instantiate SizedAndClosable4 with unimplemented abstract method close

@astral-sh-bot
Copy link

astral-sh-bot bot commented Jan 27, 2026

mypy_primer results

Changes were detected when running on open source projects
attrs (https://github.com/python-attrs/attrs)
+ tests/test_abc.py:62:13: error[call-non-callable] Cannot instantiate `StillAbstract` with unimplemented abstract method `foo`
- Found 628 diagnostics
+ Found 629 diagnostics

spack (https://github.com/spack/spack)
+ lib/spack/spack/test/llnl/util/argparsewriter.py:22:9: error[call-non-callable] Cannot instantiate `ArgparseWriter` with unimplemented abstract method `format`
- Found 4338 diagnostics
+ Found 4339 diagnostics

werkzeug (https://github.com/pallets/werkzeug)
+ tests/test_wsgi.py:197:33: error[call-non-callable] Cannot instantiate `OneByteStream` with unimplemented abstract methods `close`, `fileno` and `flush`
+ tests/test_wsgi.py:207:33: error[call-non-callable] Cannot instantiate `OneByteStream` with unimplemented abstract methods `close`, `fileno` and `flush`
+ tests/test_wsgi.py:214:33: error[call-non-callable] Cannot instantiate `OneByteStream` with unimplemented abstract methods `close`, `fileno` and `flush`
+ tests/test_wsgi.py:217:33: error[call-non-callable] Cannot instantiate `OneByteStream` with unimplemented abstract methods `close`, `fileno` and `flush`
- Found 410 diagnostics
+ Found 414 diagnostics

scrapy (https://github.com/scrapy/scrapy)
+ tests/test_engine.py:617:17: error[call-non-callable] Cannot instantiate `TestScheduler` with unimplemented abstract methods `has_pending_requests` and `next_request`
+ tests/test_scheduler_base.py:73:26: error[call-non-callable] Cannot instantiate `BaseScheduler` with unimplemented abstract methods `has_pending_requests`, `enqueue_request` and `next_request`
- Found 1774 diagnostics
+ Found 1776 diagnostics

ignite (https://github.com/pytorch/ignite)
+ tests/ignite/metrics/test_metric.py:415:9: error[call-non-callable] Cannot instantiate `Metric` with unimplemented abstract methods `reset`, `update` and `compute`
- Found 2078 diagnostics
+ Found 2079 diagnostics

tornado (https://github.com/tornadoweb/tornado)
- tornado/platform/asyncio.py:110:76: warning[unused-ignore-comment] Unused blanket `type: ignore` directive
- tornado/test/asyncio_test.py:113:70: warning[unused-ignore-comment] Unused blanket `type: ignore` directive
- Found 327 diagnostics
+ Found 325 diagnostics

mitmproxy (https://github.com/mitmproxy/mitmproxy)
+ examples/contrib/webscanner_helper/test_proxyauth_selenium.py:39:13: error[call-non-callable] Cannot instantiate `SeleniumAddon` with unimplemented abstract method `login`
+ examples/contrib/webscanner_helper/test_urlindex.py:22:24: error[call-non-callable] Cannot instantiate `UrlIndexWriter` with unimplemented abstract methods `load`, `add_url` and `save`
+ examples/contrib/webscanner_helper/test_urlinjection.py:22:31: error[call-non-callable] Cannot instantiate `InjectionGenerator` with unimplemented abstract method `inject`
+ test/mitmproxy/proxy/test_layer.py:74:13: error[call-non-callable] Cannot instantiate `Layer` with unimplemented abstract method `_handle_event`
- Found 2140 diagnostics
+ Found 2144 diagnostics

antidote (https://github.com/Finistere/antidote)
- tests/core/test_data.py:201:18: warning[unused-ignore-comment] Unused blanket `type: ignore` directive
- Found 248 diagnostics
+ Found 247 diagnostics

pyodide (https://github.com/pyodide/pyodide)
+ src/tests/test_python.py:111:20: error[call-non-callable] Cannot instantiate `BaseBrowser` with unimplemented abstract method `open`
- Found 939 diagnostics
+ Found 940 diagnostics

zope.interface (https://github.com/zopefoundation/zope.interface)
+ src/zope/interface/common/tests/test_idatetime.py:44:31: error[call-non-callable] Cannot instantiate `tzinfo` with unimplemented abstract methods `tzname`, `utcoffset` and `dst`
- Found 421 diagnostics
+ Found 422 diagnostics

setuptools (https://github.com/pypa/setuptools)
+ setuptools/_distutils/tests/test_cmd.py:19:12: error[call-non-callable] Cannot instantiate `MyCmd` with unimplemented abstract methods `finalize_options` and `run`
+ setuptools/tests/config/test_setupcfg.py:79:19: error[call-non-callable] Cannot instantiate `ErrConfigHandler` with unimplemented abstract method `parsers`
- Found 1151 diagnostics
+ Found 1153 diagnostics

prefect (https://github.com/PrefectHQ/prefect)
- src/integrations/prefect-dbt/prefect_dbt/core/settings.py:94:28: error[invalid-assignment] Object of type `dict[Any, Any] | int | dict[str, Any] | ... omitted 4 union elements` is not assignable to `dict[str, Any]`
+ src/integrations/prefect-dbt/prefect_dbt/core/settings.py:94:28: error[invalid-assignment] Object of type `dict[str, Any] | int | dict[Any, Any] | ... omitted 4 union elements` is not assignable to `dict[str, Any]`
- src/prefect/cli/deploy/_core.py:86:21: error[invalid-assignment] Object of type `dict[Any, Any] | int | dict[str, Any] | ... omitted 4 union elements` is not assignable to `dict[str, Any]`
+ src/prefect/cli/deploy/_core.py:86:21: error[invalid-assignment] Object of type `dict[str, Any] | int | dict[Any, Any] | ... omitted 4 union elements` is not assignable to `dict[str, Any]`
- src/prefect/deployments/steps/core.py:137:38: error[invalid-argument-type] Argument is incorrect: Argument type `dict[Any, Any] | int | dict[str, Any] | ... omitted 4 union elements` does not satisfy constraints (`str`, `int`, `int | float`, `bool`, `dict[Any, Any]`, `list[Any]`, `None`) of type variable `T`
+ src/prefect/deployments/steps/core.py:137:38: error[invalid-argument-type] Argument is incorrect: Argument type `dict[str, Any] | int | dict[Any, Any] | ... omitted 4 union elements` does not satisfy constraints (`str`, `int`, `int | float`, `bool`, `dict[Any, Any]`, `list[Any]`, `None`) of type variable `T`
+ src/prefect/task_runners.py:219:16: error[call-non-callable] Cannot instantiate `PrefectFutureList` with unimplemented abstract method `__next__`
- src/prefect/utilities/templating.py:320:13: error[invalid-assignment] Invalid subscript assignment with key of type `object` and value of type `Unknown | int | dict[str, Any] | ... omitted 4 union elements` on object of type `dict[str, Any]`
+ src/prefect/utilities/templating.py:320:13: error[invalid-assignment] Invalid subscript assignment with key of type `object` and value of type `dict[str, Any] | int | Unknown | ... omitted 4 union elements` on object of type `dict[str, Any]`
- src/prefect/utilities/templating.py:323:16: error[invalid-return-type] Return type does not match returned value: expected `T@resolve_block_document_references | dict[str, Any]`, found `list[Unknown | int | dict[str, Any] | ... omitted 4 union elements]`
+ src/prefect/utilities/templating.py:323:16: error[invalid-return-type] Return type does not match returned value: expected `T@resolve_block_document_references | dict[str, Any]`, found `list[Unknown | dict[str, Any] | int | ... omitted 4 union elements]`
- src/prefect/workers/base.py:232:13: error[invalid-argument-type] Argument is incorrect: Argument type `str | int | dict[str, Any] | ... omitted 3 union elements` does not satisfy constraints (`str`, `int`, `int | float`, `bool`, `dict[Any, Any]`, `list[Any]`, `None`) of type variable `T`
+ src/prefect/workers/base.py:232:13: error[invalid-argument-type] Argument is incorrect: Argument type `dict[str, Any] | int | str | ... omitted 3 union elements` does not satisfy constraints (`str`, `int`, `int | float`, `bool`, `dict[Any, Any]`, `list[Any]`, `None`) of type variable `T`
- Found 5374 diagnostics
+ Found 5375 diagnostics

dd-trace-py (https://github.com/DataDog/dd-trace-py)
+ ddtrace/contrib/internal/botocore/patch.py:148:37: error[call-non-callable] Cannot instantiate `BedrockIntegration` with unimplemented abstract method `_set_base_span_tags`
+ ddtrace/contrib/internal/crewai/patch.py:190:38: error[call-non-callable] Cannot instantiate `CrewAIIntegration` with unimplemented abstract method `_set_base_span_tags`
+ ddtrace/contrib/internal/langgraph/patch.py:389:19: error[call-non-callable] Cannot instantiate `LangGraphIntegration` with unimplemented abstract method `_set_base_span_tags`
+ ddtrace/contrib/internal/mcp/patch.py:297:32: error[call-non-callable] Cannot instantiate `MCPIntegration` with unimplemented abstract method `_set_base_span_tags`
+ ddtrace/contrib/internal/openai_agents/patch.py:70:19: error[call-non-callable] Cannot instantiate `OpenAIAgentsIntegration` with unimplemented abstract method `_set_base_span_tags`
+ tests/llmobs/test_llmobs_integrations.py:28:19: error[call-non-callable] Cannot instantiate `BaseLLMIntegration` with unimplemented abstract methods `_set_base_span_tags` and `_llmobs_set_tags`
+ tests/llmobs/test_llmobs_integrations.py:31:19: error[call-non-callable] Cannot instantiate `BaseLLMIntegration` with unimplemented abstract methods `_set_base_span_tags` and `_llmobs_set_tags`
+ tests/llmobs/test_llmobs_integrations.py:38:19: error[call-non-callable] Cannot instantiate `BaseLLMIntegration` with unimplemented abstract methods `_set_base_span_tags` and `_llmobs_set_tags`
+ tests/llmobs/test_llmobs_integrations.py:42:19: error[call-non-callable] Cannot instantiate `BaseLLMIntegration` with unimplemented abstract methods `_set_base_span_tags` and `_llmobs_set_tags`
+ tests/llmobs/test_llmobs_integrations.py:48:19: error[call-non-callable] Cannot instantiate `BaseLLMIntegration` with unimplemented abstract methods `_set_base_span_tags` and `_llmobs_set_tags`
+ tests/llmobs/test_llmobs_integrations.py:65:19: error[call-non-callable] Cannot instantiate `BaseLLMIntegration` with unimplemented abstract methods `_set_base_span_tags` and `_llmobs_set_tags`
+ tests/tracer/test_filters.py:11:9: error[call-non-callable] Cannot instantiate `Filter` with unimplemented abstract method `process_trace`
+ tests/tracer/test_processors.py:43:9: error[call-non-callable] Cannot instantiate `BadProcessor` with unimplemented abstract methods `on_span_start` and `on_span_finish`
- Found 8253 diagnostics
+ Found 8266 diagnostics

pywin32 (https://github.com/mhammond/pywin32)
+ com/win32com/test/testPyComTest.py:505:19: error[call-non-callable] Cannot instantiate `TestStruct1` with unimplemented abstract method `__init__`
+ com/win32com/test/testPyComTest.py:555:17: error[call-non-callable] Cannot instantiate `TestStruct1` with unimplemented abstract method `__init__`
+ com/win32com/test/testPyComTest.py:566:13: error[call-non-callable] Cannot instantiate `TestStruct1` with unimplemented abstract method `__init__`
+ com/win32com/test/testPyComTest.py:584:16: error[call-non-callable] Cannot instantiate `ArrayOfStructsTestStruct` with unimplemented abstract method `__init__`
+ com/win32com/test/testPyComTest.py:591:16: error[call-non-callable] Cannot instantiate `TestStruct1` with unimplemented abstract method `__init__`
- Found 2697 diagnostics
+ Found 2702 diagnostics

ibis (https://github.com/ibis-project/ibis)
+ ibis/backends/athena/__init__.py:235:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/bigquery/__init__.py:751:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/bigquery/tests/unit/test_compiler.py:275:13: error[call-non-callable] Cannot instantiate `SQLQueryResult` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/databricks/__init__.py:265:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/duckdb/__init__.py:290:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/exasol/__init__.py:437:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/flink/__init__.py:284:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/flink/utils.py:306:34: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/mssql/__init__.py:742:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/mysql/__init__.py:450:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/oracle/__init__.py:475:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/polars/__init__.py:104:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/polars/compiler.py:862:13: error[call-non-callable] Cannot instantiate `Cast` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/compiler.py:866:13: error[call-non-callable] Cannot instantiate `Cast` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/compiler.py:869:13: error[call-non-callable] Cannot instantiate `IfElse` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/compiler.py:870:13: error[call-non-callable] Cannot instantiate `IfElse` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/rewrites.py:27:18: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/rewrites.py:70:29: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/polars/rewrites.py:99:20: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/rewrites.py:100:25: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/rewrites.py:110:20: error[call-non-callable] Cannot instantiate `PandasAsofJoin` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/rewrites.py:123:20: error[call-non-callable] Cannot instantiate `PandasJoin` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/rewrites.py:131:16: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/backends/polars/rewrites.py:133:12: error[call-non-callable] Cannot instantiate `Project` with unimplemented abstract methods `__argnames__` and `values`
+ ibis/backends/polars/rewrites.py:138:12: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/postgres/__init__.py:670:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/risingwave/__init__.py:602:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/singlestoredb/__init__.py:631:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/singlestoredb/tests/test_compiler.py:384:20: error[call-non-callable] Cannot instantiate `MinRank` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/__init__.py:86:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/sql/__init__.py:165:16: error[call-non-callable] Cannot instantiate `SQLQueryResult` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/backends/sql/compilers/base.py:817:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/base.py:827:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/base.py:837:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/base.py:847:21: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/clickhouse.py:343:21: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/clickhouse.py:357:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/clickhouse.py:367:21: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/duckdb.py:491:29: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/flink.py:217:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/flink.py:239:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/flink.py:253:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/flink.py:261:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/oracle.py:236:44: error[call-non-callable] Cannot instantiate `Pi` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/compilers/oracle.py:239:32: error[call-non-callable] Cannot instantiate `Pi` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/compilers/snowflake.py:54:16: error[call-non-callable] Cannot instantiate `StructField` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/compilers/snowflake.py:58:16: error[call-non-callable] Cannot instantiate `StructField` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/compilers/snowflake.py:277:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/snowflake.py:282:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/snowflake.py:293:25: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/compilers/trino.py:383:29: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/rewrites.py:102:12: error[call-non-callable] Cannot instantiate `Select` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:122:12: error[call-non-callable] Cannot instantiate `Select` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:130:12: error[call-non-callable] Cannot instantiate `Select` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:136:12: error[call-non-callable] Cannot instantiate `Select` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:147:12: error[call-non-callable] Cannot instantiate `Select` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:167:15: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:169:19: error[call-non-callable] Cannot instantiate `Coalesce` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:172:12: error[call-non-callable] Cannot instantiate `Select` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:179:20: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:187:18: error[call-non-callable] Cannot instantiate `NotNull` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:191:18: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/rewrites.py:195:12: error[call-non-callable] Cannot instantiate `Select` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:306:13: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:322:14: error[call-non-callable] Cannot instantiate `Select` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:413:20: error[call-non-callable] Cannot instantiate `CTE` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:471:20: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:476:16: error[call-non-callable] Cannot instantiate `Select` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:498:12: error[call-non-callable] Cannot instantiate `Subtract` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:504:15: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/backends/sql/rewrites.py:506:15: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:517:12: error[call-non-callable] Cannot instantiate `Subtract` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:522:12: error[call-non-callable] Cannot instantiate `Subtract` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:543:12: error[call-non-callable] Cannot instantiate `Log` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:549:12: error[call-non-callable] Cannot instantiate `Log` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:583:17: error[call-non-callable] Cannot instantiate `And` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:583:25: error[call-non-callable] Cannot instantiate `LessEqual` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:583:54: error[call-non-callable] Cannot instantiate `LessEqual` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:587:26: error[call-non-callable] Cannot instantiate `And` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:601:12: error[call-non-callable] Cannot instantiate `SearchedCase` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:609:13: error[call-non-callable] Cannot instantiate `Uppercase` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:609:27: error[call-non-callable] Cannot instantiate `Substring` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:614:12: error[call-non-callable] Cannot instantiate `Lowercase` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:614:26: error[call-non-callable] Cannot instantiate `Substring` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:614:63: error[call-non-callable] Cannot instantiate `StringLength` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:615:12: error[call-non-callable] Cannot instantiate `StringConcat` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:654:20: error[call-non-callable] Cannot instantiate `Filter` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:655:28: error[call-non-callable] Cannot instantiate `LessEqual` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:655:42: error[call-non-callable] Cannot instantiate `RandomScalar` with unimplemented abstract method `__argnames__`
+ ibis/backends/sql/rewrites.py:670:16: error[call-non-callable] Cannot instantiate `Subtract` with unimplemented abstract method `__argnames__`
+ ibis/backends/sqlite/__init__.py:557:16: error[call-non-callable] Cannot instantiate `DatabaseTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/common/tests/test_bases.py:43:9: error[call-non-callable] Cannot instantiate `Foo` with unimplemented abstract methods `foo` and `bar`
+ ibis/common/tests/test_egraph.py:166:12: error[call-non-callable] Cannot instantiate `MyNode` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:182:12: error[call-non-callable] Cannot instantiate `MySecondNode` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:202:12: error[call-non-callable] Cannot instantiate `MyThirdNode` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:202:32: error[call-non-callable] Cannot instantiate `MyInt` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:202:48: error[call-non-callable] Cannot instantiate `MyInt` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:231:11: error[call-non-callable] Cannot instantiate `MyLit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:232:11: error[call-non-callable] Cannot instantiate `MyLit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:233:12: error[call-non-callable] Cannot instantiate `MyAdd` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:234:14: error[call-non-callable] Cannot instantiate `MyAdd` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:235:12: error[call-non-callable] Cannot instantiate `MyMul` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:236:14: error[call-non-callable] Cannot instantiate `MyAdd` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:468:12: error[call-non-callable] Cannot instantiate `Mul` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:468:16: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:468:24: error[call-non-callable] Cannot instantiate `Mul` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:468:28: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:468:36: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:469:17: error[call-non-callable] Cannot instantiate `Mul` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:469:21: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:469:29: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:469:38: error[call-non-callable] Cannot instantiate `Mul` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:469:42: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:469:50: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:7: error[call-non-callable] Cannot instantiate `Mul` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:11: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:19: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:29: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:39: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:43: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:51: error[call-non-callable] Cannot instantiate `Mul` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:55: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:63: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:481:73: error[call-non-callable] Cannot instantiate `Lit` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:510:14: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:510:21: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:510:28: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:510:35: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:510:42: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:510:49: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:511:14: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:511:21: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:511:28: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:511:35: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:511:42: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:511:49: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:514:14: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:514:21: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:514:25: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:514:36: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:514:43: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:514:50: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:515:14: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:515:21: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:515:25: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:515:36: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:515:40: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:515:51: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:529:12: error[call-non-callable] Cannot instantiate `Add` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_egraph.py:529:19: error[call-non-callable] Cannot instantiate `Mul` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:223:9: error[call-non-callable] Cannot instantiate `BoolLiteral` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:224:9: error[call-non-callable] Cannot instantiate `BoolLiteral` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:225:9: error[call-non-callable] Cannot instantiate `BoolLiteral` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:226:9: error[call-non-callable] Cannot instantiate `BoolLiteral` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:228:12: error[call-non-callable] Cannot instantiate `And` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:229:11: error[call-non-callable] Cannot instantiate `Or` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:230:15: error[call-non-callable] Cannot instantiate `Collect` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:260:12: error[call-non-callable] Cannot instantiate `Value` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:260:25: error[call-non-callable] Cannot instantiate `Value` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:262:12: error[call-non-callable] Cannot instantiate `All` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:266:12: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:270:12: error[call-non-callable] Cannot instantiate `All` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:270:20: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:270:30: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:271:34: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:271:44: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:273:19: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:273:29: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:276:9: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:276:19: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:276:38: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:277:9: error[call-non-callable] Cannot instantiate `Either` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph.py:281:22: error[call-non-callable] Cannot instantiate `All` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph_benchmarks.py:28:16: error[call-non-callable] Cannot instantiate `MyNode` with unimplemented abstract method `__argnames__`
+ ibis/common/tests/test_graph_benchmarks.py:29:12: error[call-non-callable] Cannot instantiate `MyNode` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:148:5: error[call-non-callable] Cannot instantiate `E` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:149:6: error[call-non-callable] Cannot instantiate `Pi` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:214:12: error[call-non-callable] Cannot instantiate `ScalarParameter` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/expr/api.py:325:12: error[call-non-callable] Cannot instantiate `UnboundTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/expr/api.py:489:10: error[call-non-callable] Cannot instantiate `InMemoryTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/expr/api.py:509:12: error[call-non-callable] Cannot instantiate `InMemoryTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/expr/api.py:525:12: error[call-non-callable] Cannot instantiate `InMemoryTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/expr/api.py:563:12: error[call-non-callable] Cannot instantiate `InMemoryTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/expr/api.py:684:12: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:688:12: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:771:12: error[call-non-callable] Cannot instantiate `RandomScalar` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:801:12: error[call-non-callable] Cannot instantiate `RandomUUID` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:898:16: error[call-non-callable] Cannot instantiate `TimestampFromYMDHMS` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:976:16: error[call-non-callable] Cannot instantiate `DateFromYMD` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1049:16: error[call-non-callable] Cannot instantiate `TimeFromHMS` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1271:12: error[call-non-callable] Cannot instantiate `SearchedCase` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1283:12: error[call-non-callable] Cannot instantiate `TimestampNow` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1295:12: error[call-non-callable] Cannot instantiate `DateNow` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1328:12: error[call-non-callable] Cannot instantiate `MinRank` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1363:12: error[call-non-callable] Cannot instantiate `DenseRank` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1394:12: error[call-non-callable] Cannot instantiate `PercentRank` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1425:12: error[call-non-callable] Cannot instantiate `CumeDist` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1456:12: error[call-non-callable] Cannot instantiate `NTile` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:1491:12: error[call-non-callable] Cannot instantiate `RowNumber` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:2427:12: error[call-non-callable] Cannot instantiate `IntegerRange` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:2438:12: error[call-non-callable] Cannot instantiate `TimestampRange` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:2522:12: error[call-non-callable] Cannot instantiate `Coalesce` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:2550:12: error[call-non-callable] Cannot instantiate `Greatest` with unimplemented abstract method `__argnames__`
+ ibis/expr/api.py:2578:12: error[call-non-callable] Cannot instantiate `Least` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:34:12: error[call-non-callable] Cannot instantiate `SearchedCase` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:118:16: error[call-non-callable] Cannot instantiate `SimpleCase` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:167:31: error[call-non-callable] Cannot instantiate `Cast` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:169:24: error[call-non-callable] Cannot instantiate `Cast` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:266:44: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:267:17: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:278:17: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:279:42: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:283:17: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:284:17: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:289:24: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/builders.py:293:30: error[call-non-callable] Cannot instantiate `WindowBoundary` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/core.py:75:20: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/expr/operations/generic.py:157:8: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/expr/operations/relations.py:76:38: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/relations.py:358:27: error[call-non-callable] Cannot instantiate `Field` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/relations.py:359:21: error[call-non-callable] Cannot instantiate `Project` with unimplemented abstract methods `__argnames__` and `values`
+ ibis/expr/operations/tests/test_core.py:47:7: error[call-non-callable] Cannot instantiate `NamedValue` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:47:32: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:48:7: error[call-non-callable] Cannot instantiate `NamedValue` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:48:32: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:49:9: error[call-non-callable] Cannot instantiate `NamedValue` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:49:34: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:50:10: error[call-non-callable] Cannot instantiate `Values` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:56:32: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:61:9: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:62:9: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:63:9: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:64:9: error[call-non-callable] Cannot instantiate `NamedValue` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:64:23: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:65:9: error[call-non-callable] Cannot instantiate `NamedValue` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:65:23: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:66:9: error[call-non-callable] Cannot instantiate `NamedValue` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:66:23: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:78:10: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:79:10: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:80:10: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:97:13: error[call-non-callable] Cannot instantiate `Aliased` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:99:26: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:99:42: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:103:16: error[call-non-callable] Cannot instantiate `Values` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:103:24: error[call-non-callable] Cannot instantiate `NamedValue` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:103:49: error[call-non-callable] Cannot instantiate `Name` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:133:12: error[call-non-callable] Cannot instantiate `Op1` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:134:12: error[call-non-callable] Cannot instantiate `Op2` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:135:12: error[call-non-callable] Cannot instantiate `Op3` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:136:12: error[call-non-callable] Cannot instantiate `Op4` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:150:12: error[call-non-callable] Cannot instantiate `Log` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:150:34: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/expr/operations/tests/test_core.py:151:12: error[call-non-callable] Cannot instantiate `Log` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:151:35: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/expr/operations/tests/test_core.py:152:12: error[call-non-callable] Cannot instantiate `Log` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:152:31: error[call-non-callable] Cannot instantiate `Literal` with unimplemented abstract methods `__argnames__` and `dtype`
+ ibis/expr/operations/tests/test_core.py:153:12: error[call-non-callable] Cannot instantiate `Log` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:155:23: error[call-non-callable] Cannot instantiate `Log` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:165:5: error[call-non-callable] Cannot instantiate `MyOperation` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:168:9: error[call-non-callable] Cannot instantiate `MyOperation` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:178:10: error[call-non-callable] Cannot instantiate `MyOp` with unimplemented abstract method `__argnames__`
+ ibis/expr/operations/tests/test_core.py:192:12: error[call-non-callable] Cannot instantiate `SpecialTable` with unimplemented abstract methods `__argnames__` and `schema`
+ ibis/expr/operations/tests/test_core.py:202:9: error[call-non-callable] Cannot instantiate `DummyOp` with unimplemented abstract methods `__argnames__`, `dt

... (truncated 754 lines) ...
Memory usage changes were detected when running on open source projects
flake8 (https://github.com/pycqa/flake8)
-     struct fields = ~3MB
+     struct fields = ~4MB
-     memo fields = ~49MB
+     memo fields = ~52MB

trio (https://github.com/python-trio/trio)
-     struct metadata = ~10MB
+     struct metadata = ~11MB
-     memo metadata = ~31MB
+     memo metadata = ~33MB

sphinx (https://github.com/sphinx-doc/sphinx)
- TOTAL MEMORY USAGE: ~287MB
+ TOTAL MEMORY USAGE: ~301MB
-     struct fields = ~20MB
+     struct fields = ~21MB

prefect (https://github.com/PrefectHQ/prefect)
-     struct metadata = ~49MB
+     struct metadata = ~52MB
-     memo fields = ~424MB
+     memo fields = ~445MB

@AlexWaygood AlexWaygood force-pushed the alex/abstract-class-instantiation branch from ce9fc32 to e0c7af0 Compare January 27, 2026 21:00
@astral-sh-bot
Copy link

astral-sh-bot bot commented Jan 27, 2026

ecosystem-analyzer results

Lint rule Added Removed Changed
call-non-callable 1,029 0 0
invalid-return-type 0 4 4
invalid-assignment 4 0 1
invalid-argument-type 2 0 1
unused-ignore-comment 0 3 0
Total 1,035 7 6

Full report with detailed diff (timing results)

@AlexWaygood
Copy link
Member Author

+ tests/test_abc.py:62:13: error[call-non-callable] Cannot instantiate `StillAbstract` with unimplemented abstract method `foo`

sounds like that one might be intentional, idk

@codspeed-hq
Copy link

codspeed-hq bot commented Jan 28, 2026

CodSpeed Performance Report

Merging this PR will not alter performance

Comparing alex/abstract-class-instantiation (c9ef28e) with alex/trivial-bodies (718fce8)

Summary

✅ 23 untouched benchmarks
⏩ 30 skipped benchmarks1

Footnotes

  1. 30 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@AlexWaygood AlexWaygood force-pushed the alex/abstract-class-instantiation branch 3 times, most recently from b19b967 to 7b05b07 Compare January 28, 2026 18:15
@AlexWaygood AlexWaygood force-pushed the alex/trivial-bodies branch 2 times, most recently from 86f5ce8 to ee7a9ac Compare January 29, 2026 15:19
@AlexWaygood
Copy link
Member Author

Ecosystem analysis (WIP)

homeassistant/components/ring

These look like true positives to me. The base classes of RingDoorButton, for example, look like this:

from abc import ABC, abstractmethod

class AbstractMixin(ABC):
    @abstractmethod
    def bar(self): ...

class ConcreteMixin:
    def bar(self): ...

class Sub1(AbstractMixin, ConcreteMixin): ...

Sub()  # error: [call-non-callable]

But Sub1 actually is still abstract, because AbstractMixin comes before ConcreteMixin in the MRO of Sub. It looks to me like they have their base classes in the wrong order here?

ddtrace/contrib/internal/botocore/patch.py

This also looks like a true positive -- BaseLLMIntegration declares an abstract method here that is never overridden by BedrockIntegration. I suppose the class is still instantiable at runtime because the class doesn't have ABCMeta as its metaclass -- but they clearly intend BaseLLMIntegration to be abstract, or they wouldn't have decorated a method on the class with @abstractmethod. So I think it's correct for us to emit an error when they try to construct an instance of a subclass that doesn't override that method.

Base automatically changed from alex/trivial-bodies to main January 31, 2026 10:02
@AlexWaygood AlexWaygood force-pushed the alex/abstract-class-instantiation branch from c9ef28e to f3f7bd1 Compare February 17, 2026 15:27
@AlexWaygood AlexWaygood changed the base branch from main to alex/abstract-method-test-fixes February 17, 2026 15:27
@AlexWaygood AlexWaygood force-pushed the alex/abstract-class-instantiation branch from f3f7bd1 to c6add40 Compare February 17, 2026 15:28
@AlexWaygood AlexWaygood force-pushed the alex/abstract-method-test-fixes branch from 023dc3a to 84ff2c1 Compare February 17, 2026 15:32
@AlexWaygood AlexWaygood force-pushed the alex/abstract-class-instantiation branch from c6add40 to 9fe24aa Compare February 17, 2026 15:34
Base automatically changed from alex/abstract-method-test-fixes to main February 17, 2026 17:11
@AlexWaygood AlexWaygood force-pushed the alex/abstract-class-instantiation branch from 9fe24aa to 89a1fcc Compare February 17, 2026 17:13
@AlexWaygood AlexWaygood changed the base branch from main to alex/tweak-abstract-diagnostics February 17, 2026 17:14
AlexWaygood added a commit that referenced this pull request Feb 17, 2026
…3376)

## Summary

Another PR split out from #22898, to reduce the diff in that PR. Changes
made here:

- Use "declared" rather than "defined" in a diagnostic message
- Use secondary annotations (underlined with `______`) rather than
primary annotations (underlined with `^^^^^^^`) for annotations in
informational subdiagnostics
- Shorten one diagnostic message in some situations: if the abstract
method was defined on the same class that we're emitting a diagnostic
on, just say "method X declared here" rather than "method X declared
here on superclass Y"

## Test Plan

`cargo insta test -p ty_python_semantic`
Base automatically changed from alex/tweak-abstract-diagnostics to main February 17, 2026 17:57
@AlexWaygood AlexWaygood force-pushed the alex/abstract-class-instantiation branch from 89a1fcc to 81a682a Compare February 17, 2026 18:55
@AlexWaygood AlexWaygood changed the base branch from main to alex/final-class-many-abstract-methods February 17, 2026 18:56
Base automatically changed from alex/final-class-many-abstract-methods to main February 17, 2026 19:39
…ns when determining whether an abstract method has been overridden in a subclass
allow abstract methods to be overridden by synthesized methods

return a ref from the tracked function

add cycle handling

truncate the list of abstractmethods by default

try to reduce memory usage

add more docs
@AlexWaygood AlexWaygood force-pushed the alex/abstract-class-instantiation branch from 81a682a to eac38c8 Compare February 17, 2026 20:02
@AlexWaygood AlexWaygood changed the base branch from main to alex/abstract-classvar-override February 17, 2026 20:07
AlexWaygood added a commit that referenced this pull request Feb 17, 2026
…ns when determining whether an abstract method has been overridden in a subclass (#23381)

## Summary

This is another standalone PR pulled out of #22898, to reduce the diff
on that PR.

Currently we emit a false-positive `abstract-method-in-final-class`
diagnostic on this class, because we do not see that the synthesized
`__lt__` method created by `@dataclass(order=True)` has overridden the
abstract `__lt__` method from the class's superclass:

```py
from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import final

class AbstractOrdered(ABC):
    @AbstractMethod
    def __lt__(self, other): ...

@Final
@DataClass(order=True)
class ConcreteOrdered(AbstractOrdered): ...
```

We also currently do not recognise `ClassVar` declarations in a subclass
as overriding an abstract method/property on a base class. While an
annotation without a binding is not sufficient at runtime as an abstract
method override, the `ClassVar` qualifier serves as an explicit
declaration from the user to the type checker that the attribute will be
accessible on the class object itself (not simply instances of the
class) at runtime. We therefore choose to treat `ClassVar` declarations
as overrides of abstract methods from superclasses.

## Test Plan

mdtests updated/extended
Base automatically changed from alex/abstract-classvar-override to main February 17, 2026 21:39
@danielhollas
Copy link

I suppose the class is still instantiable at runtime because the class doesn't have ABCMeta as its metaclass -- but they clearly intend BaseLLMIntegration to be abstract, or they wouldn't have decorated a method on the class with @AbstractMethod. So I think it's correct for us to emit an error when they try to construct an instance of a subclass that doesn't override that method.

btw: There is a recent discussion about semantics of abstractmethod on classes that don't have ABC as metaclass.

https://discuss.python.org/t/documenting-use-of-abc-abstractmethod-in-non-abcmeta-classes/106055

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

Labels

ecosystem-analyzer ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Emit diagnostic on constructor call to class with abstract methods

2 participants