MCPcopy Index your code
hub / github.com/python/mypy / find_implicit_op_dependencies

Function find_implicit_op_dependencies

mypyc/analysis/capsule_deps.py:10–35  ·  view source on GitHub ↗

Find implicit dependencies that need to be imported. Using primitives or types defined in librt submodules such as "librt.base64" requires dependency imports (e.g., capsule imports). Note that a module can depend on a librt module even if it doesn't explicitly import it, for exampl

(fn: FuncIR)

Source from the content-addressed store, hash-verified

8
9
10def find_implicit_op_dependencies(fn: FuncIR) -> set[Dependency] | None:
11 """Find implicit dependencies that need to be imported.
12
13 Using primitives or types defined in librt submodules such as "librt.base64"
14 requires dependency imports (e.g., capsule imports).
15
16 Note that a module can depend on a librt module even if it doesn't explicitly
17 import it, for example via re-exported names or via return types of functions
18 defined in other modules.
19 """
20 deps: set[Dependency] | None = None
21 # Check function signature types for dependencies
22 deps = find_type_dependencies(fn, deps)
23 # Check ops for dependencies
24 for block in fn.blocks:
25 for op in block.ops:
26 assert not isinstance(op, PrimitiveOp), "Lowered IR is expected"
27 if isinstance(op, CallC) and op.dependencies is not None:
28 for dep in op.dependencies:
29 if deps is None:
30 deps = set()
31 deps.add(dep)
32 deps = collect_type_deps(op.type, deps)
33 if isinstance(op, Assign):
34 deps = collect_type_deps(op.dest.type, deps)
35 return deps
36
37
38def find_type_dependencies(fn: FuncIR, deps: set[Dependency] | None) -> set[Dependency] | None:

Callers 2

run_caseMethod · 0.90
compile_scc_to_irFunction · 0.90

Calls 5

find_type_dependenciesFunction · 0.85
isinstanceFunction · 0.85
setClass · 0.85
collect_type_depsFunction · 0.85
addMethod · 0.45

Tested by 1

run_caseMethod · 0.72

Used in the wild real call sites across dependent graphs

searching dependent graphs…