How Faebryk’s TypeGraph works (GraphView + Zig edges), how to traverse/resolve references, and how FabLL types/traits map onto edge types.
The Faebryk core here is the TypeGraph + edge types implemented in Zig and exposed to Python via faebryk.core.faebrykpy.
Source-of-truth for API + behavior:
src/faebryk/core/faebrykpy.py (Python-facing wrapper + type-safe EdgeTrait.traverse)src/faebryk/core/zig/gen/faebryk/typegraph.pyi (public stubbed API surface)src/faebryk/core/zig/src/faebryk/* (Zig implementation)import faebryk.core.faebrykpy as fbrk
import faebryk.core.graph as graph
g = graph.GraphView.create()
tg = fbrk.TypeGraph.create(g=g)
src/faebryk/core/faebrykpy.py (re-exports + EdgeTraversal + type-safe EdgeTrait.traverse)src/faebryk/core/zig/gen/faebryk/typegraph.pyi (TypeGraph stub)faebrykpy.py):EdgeComposition (parent/child structure)EdgeTrait / Trait (trait attachment)EdgePointer (references)EdgeInterfaceConnection (interface connections)EdgeOperand (solver operand wiring)EdgeType / EdgeNext (type graph plumbing)Linker (used by compiler/linking stages)src/faebryk/core/node.py (binds Python classes into the TypeGraph; uses composition/trait edges)src/atopile/compiler/* (creates and links TypeGraphs)src/faebryk/core/solver/* (operand edges and instance traversal)src/atopile/build_steps.py (visits type/instance edges for PCB/layout features)TypeGraph is created against a GraphView:import faebryk.core.graph as graph
import faebryk.core.faebrykpy as fbrk
g = graph.GraphView.create()
tg = fbrk.TypeGraph.create(g=g)
TypeGraph.ensure_child_reference(..., path=[...]) uses EdgeTraversal items to walk references through the type graph.src/faebryk/core/zig/src/faebryk/* (edges, typegraph internals).ato dev compile (imports faebryk.core.zig).src/faebryk/core/faebrykpy.py (example: type-safe EdgeTrait.traverse).ato dev test --llm test/compiler/test_typegraph.py -qato dev test --llm test/compiler/test_runtime.py -qato dev test --llm test/core/zig/test_interface_pathfinder.py -qfaebryk.core.faebrykpy (so callers get Python helpers, not just raw generated types).EdgeTrait.traverse(trait_type=SomeTrait) over stringly-typed trait_type_name=....