Skip to content

Commit be11ab8

Browse files
authored
Speed up type checking by caching argument inference context (#19323)
This speeds up self check by about 1.5% on my computer, according to `perf_compare.py`: ``` ... === Results === master 4.264s (0.0%) | stdev 0.024s HEAD 4.201s (-1.5%) | stdev 0.030s ``` I noticed this bottleneck when I was looking at a CPU profile generated using the script from #19322.
1 parent 6886b7a commit be11ab8

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

mypy/checkexpr.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,8 @@ class ExpressionChecker(ExpressionVisitor[Type], ExpressionCheckerSharedApi):
318318
strfrm_checker: StringFormatterChecker
319319
plugin: Plugin
320320

321+
_arg_infer_context_cache: ArgumentInferContext | None
322+
321323
def __init__(
322324
self,
323325
chk: mypy.checker.TypeChecker,
@@ -352,6 +354,8 @@ def __init__(
352354
self.is_callee = False
353355
type_state.infer_polymorphic = not self.chk.options.old_type_inference
354356

357+
self._arg_infer_context_cache = None
358+
355359
def reset(self) -> None:
356360
self.resolved_type = {}
357361

@@ -2277,9 +2281,11 @@ def infer_function_type_arguments_pass2(
22772281
return callee_type, inferred_args
22782282

22792283
def argument_infer_context(self) -> ArgumentInferContext:
2280-
return ArgumentInferContext(
2281-
self.chk.named_type("typing.Mapping"), self.chk.named_type("typing.Iterable")
2282-
)
2284+
if self._arg_infer_context_cache is None:
2285+
self._arg_infer_context_cache = ArgumentInferContext(
2286+
self.chk.named_type("typing.Mapping"), self.chk.named_type("typing.Iterable")
2287+
)
2288+
return self._arg_infer_context_cache
22832289

22842290
def get_arg_infer_passes(
22852291
self,

0 commit comments

Comments
 (0)