Language record
Python
Python is indexed with forward resolution: a class declared below the line that uses it is still recognised, so construction and call edges land on real names instead of dangling — and a module's __all__ becomes a queryable export surface.
The registry row this page is generated from
Read at render time from the same family row the register reads, so nothing in this block can disagree with it.
- Extensions
- .py, .pyw, .pyi
- Registry names
python- Recorded symbols
- functions · classes · methods · types
Relationship types this analyzer constructs
11 of 14 constructed, read from this analyzer's source and re-derived by the languages gate. Each row below is one of the engine's types, in the engine's own order.
| Relationship type | Constructed |
|---|---|
calls | constructed by this analyzer |
extends | constructed by this analyzer |
implements | constructed by this analyzer |
uses | constructed by this analyzer |
imports | constructed by this analyzer |
exports | constructed by this analyzer |
contains | constructed by this analyzer |
references | constructed by this analyzer |
overrides | constructed by this analyzer |
instantiates | constructed by this analyzer |
decorates | constructed by this analyzer |
renders | ruled absent |
mixes_in | ruled absent |
part_of | ruled absent |
11 constructed, 3 not constructed. All 3 absent types are recorded as ruled absent: the written reason and the corpus measurement behind each are in this family's completeness record. The register explains what each label means.
What this analyzer does not resolve
- Builtins are excluded from the call graph on purpose: a builtin is a call into the interpreter, not a node in the repository. The same rule drops every __dunder__ call.
- A callee that is not a plain name or an attribute names nothing statically, so (f if flag else g)(), FACTORIES[k](x) and f()() all record nothing — a fallback to the first child node was removed because it produced fabrications.
- A decorator call is never a call edge, and a def nested inside another function publishes no symbol at all: its body is attributed to the enclosing function, because a local function is a scope, not a declaration.
Every line above was written against Python’s own analyzer module and is named against a construct in it, so it can be checked against the source. Nothing here is inherited from a template, or from another language’s page.
Where you meet it in a repository
Recognised by extension — .py, .pyw, .pyi. Everything below is about where those files actually sit in a working repository.
- __init__.py marks a package, so a bare import utils inside one is relative to the importing file — the same name can mean different modules in different directories.
- Framework code is mostly inheritance: models, views and serializers subclass bases that live in the framework or in another installed app.
- Type annotations name types across module boundaries, so a method's parameters carry references to types the file never declares.
Questions this index answers
Phrased as retrievals, because that is what an index can honestly do: it holds the symbols and the edges between them, and hands them back with the evidence attached.
- Which classes extend this base, and which method overrides which?
- What does this module export through __all__?
- Which functions in this file call that one?
- Which attributes does this class assign to self, and which methods read them?
What the analyzer sees in code like this
from .models import User
class Cart(Base): # bb records: class Cart · extends Base
def add(self, user: User) -> None: # bb records: method add · references User
self.count += 1 # bb records: attribute count
def total(self) -> int: # bb records: method total
return self.countSymbols are stored with the file they came from and the bytes they span, so a hit points at a line rather than at a guess. The annotations in the sample are commentary for the reader, not strings the index would store.
Languages that turn up in the same repository
Application & systems — the count beside each name is how many relationship types that family’s analyzer constructs.
The extensions, registry names, recorded symbols and relationship types above are the parser registry row for Python, read while the page rendered — the same row the register reads, so the two surfaces cannot tell two stories. Every relationship type listed as constructed appears in src/ast/real-*, the analyzer modules bb ships. bb 0.1.0 answers from a local store over 50 languages (53 registry ids, three of them aliases). There is no benchmark on this page: every claim here is one you can go and read in the source.