Graph API创建
- 作者仓库星标 3,367
- 许可证 MIT
- 作者仓库 atopile
Graph Module
The faebryk.core.graph module is a thin Python wrapper around the Zig graph implementation.
Source-of-truth for behavior is:
- Zig implementation:
src/faebryk/core/zig/src/graph/graph.zig - Python bindings:
src/faebryk/core/zig/src/python/graph/graph_py.zig - Public Python API surface (stubs):
src/faebryk/core/zig/gen/graph/graph.pyi
Quick Start
from faebryk.core.graph import GraphView
g = GraphView.create()
try:
_ = g.create_and_insert_node()
finally:
g.destroy()
Relevant Files
- Python wrapper/re-export:
src/faebryk/core/graph.py - Zig graph core:
src/faebryk/core/zig/src/graph/graph.zig - Zig → Python wrappers:
src/faebryk/core/zig/src/python/graph/graph_py.zig - Generated type stubs:
src/faebryk/core/zig/gen/graph/graph.pyi
Dependants (Call Sites)
src/faebryk/core/node.py(FabLL: nodes/traits are graph-backed)src/atopile/compiler/gentypegraph.py(compiler constructs typegraphs/instances via graph APIs)src/faebryk/core/graph_render.py(graph visualization)
How to Work With / Develop / Test
Mental Model
NodeReference/EdgeReference: value-like handles (UUIDs) into global backing storage in Zig.GraphView: a membership + adjacency view over those references (per-view arena + maps + bitsets).BoundNode/BoundEdge: “reference + owning GraphView pointer” wrappers used for traversal helpers.
Core Invariants (do not violate)
- No direct constructors:
GraphView(),NodeReference(),EdgeReference()are not meant to be called; use the exposed factory methods.GraphView.create()NodeReference.create(**attrs)EdgeReference.create(source=..., target=..., edge_type=..., **attrs)
- Explicit cleanup:
GraphView.create()allocates a Zig-side graph on the C allocator; it is freed only byGraphView.destroy().- Do not rely on Python GC to reclaim Zig allocations.
- Attribute limits: node/edge dynamic attributes are fixed-capacity in Zig (currently 6 entries). Exceeding this is a hard failure.
- Edge type width: edge types are
u8in Zig; treat them as0..255in Python (hashing/modulo happens on the Zig side). - Self node exists:
GraphView.initinserts aself_node; counts include it.
API Cheatsheet (matches src/faebryk/core/zig/gen/graph/graph.pyi)
from faebryk.core.graph import GraphView, Node, Edge
g = GraphView.create()
try:
n1 = g.create_and_insert_node() # -> BoundNode
n2 = Node.create(name="n2") # -> NodeReference (not inserted yet)
bn2 = g.insert_node(node=n2) # -> BoundNode
e = Edge.create(source=n1.node(), target=bn2.node(), edge_type=7, name="link")
_be = g.insert_edge(edge=e) # -> BoundEdge
finally:
g.destroy()
Debugging
GraphView.__repr__()printsGraphView(id=..., |V|=..., |E|=...)from Zig.- Graph wrapper has a stress test:
python -m faebryk.core.graph(runstest_graph_garbage_collection).
Development Workflow
- Zig changes: edit
src/faebryk/core/zig/src/graph/*. - Rebuild:
ato dev compile(importsfaebryk.core.zig, which compiles in editable installs). - If you add/remove exposed methods: update the wrapper in
src/faebryk/core/zig/src/python/graph/graph_py.zigand ensure stubs regenerate.
Testing
Key test entrypoints:
- Python:
python -m faebryk.core.graph - Zig:
zig test src/faebryk/core/zig/src/graph/graph.zig
- 流狐分类
- 通用
- 作者声明 Agent
- 未找到明确声明;不据此推断已兼容或已测试
- 静态检查
- 94 / 100 · 启发式扫描,不代表运行安全
- 作者 / 版本 / 许可
- @atopile · MIT
- 流狐 Token 估算
- 低消耗
- 流狐接入估算
- 需简单配置
- 是否需要外部 API Key
- 未发现要求
- 检测到的系统要求
- macOS · Linux · Windows
- 底层运行要求
- Node.js · Python
- 检测到的文件与系统行为
-
- 只读
- 允许写入 / 修改
- 检测到的网络行为
- 仅限本地
- 安装命令数
- 无(仅作为资料)
档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。
作者没有在当前 SKILL.md 中定义固定输出样例。 Quick Start
Quick Start
Development Workflow
Zig changes: edit src/faebryk/core/zig/src/graph/. Rebuild: ato dev compile (imports faebryk.core.zig, which compiles in editable installs). If you add/remove exposed methods: update the wrapper in src/faebryk/core/zig/src/python/graph/graphpy.zig and ensure…
# Graph Module
The `faebryk.core.graph` module is a thin Python wrapper around the Zig graph implementation.
Source-of-truth for behavior is:
- Zig implementation: `src/faebryk/core/zig/src/graph/graph.zig`
- Python bindings: `src/faebryk/core/zig/src/python/graph/graph_py.zig`
- Public Python API surface (stubs): `src/faebryk/core/zig/gen/graph/graph.pyi`
## Quick Start
```python
from faebryk.core.graph import GraphView
g = GraphView.create()
try:
_ = g.create_and_insert_node()
finally:
g.destroy()
```
## Relevant Files
- Python wrapper/re-export: `src/faebryk/core/graph.py`
- Zig graph core: `src/faebryk/core/zig/src/graph/graph.zig`
- Zig → Python wrappers: `src/faebryk/core/zig/src/python/graph/graph_py.zig`
- Generated type stubs: `src/faebryk/core/zig/gen/graph/graph.pyi`
## Dependants (Call Sites)
- `src/faebryk/core/node.py` (FabLL: nodes/traits are graph-backed)
- `src/atopile/compiler/gentypegraph.py` (compiler constructs typegraphs/instances via graph APIs)
- `src/faebryk/core/graph_render.py` (graph visualization)
## How to Work With / Develop / Test
### Mental Model
- `NodeReference` / `EdgeReference`: value-like handles (UUIDs) into global backing storage in Zig.
- `GraphView`: a *membership + adjacency* view over those references (per-view arena + maps + bitsets).
- `BoundNode` / `BoundEdge`: “reference + owning GraphView pointer” wrappers used for traversal helpers.
### Core Invariants (do not violate)
- **No direct constructors**: `GraphView()`, `NodeReference()`, `EdgeReference()` are not meant to be called; use the exposed factory methods.
- `GraphView.create()`
- `NodeReference.create(**attrs)`
- `EdgeReference.create(source=..., target=..., edge_type=..., **attrs)`
… 证据边界与执行链路
作者原文负责流程事实;流狐只索引当前章节、要点、文件与命令。
章节 -> Quick Start → Relevant Files → Dependants (Call Sites) → How to Work With / Develop / Test → Mental Model → Core Invariants (do not violate)
要点 -> No direct constructors · Explicit cleanup · Attribute limits · Edge type width · Self node exists
文件/命令 -> faebryk.core.graph · src/faebryk/core/zig/src/graph/graph.zig · src/faebryk/core/zig/src/python/graph/graphpy.zig · src/faebryk/core/zig/gen/graph/graph.pyi · src/faebryk/core/graph.py · src/faebryk/core/node.py · src/atopile/compiler/gentypegraph.py · src/faebryk/core/graphrender.py
内容 SHA-256 -> 0a08c7d8a934
方法与流程
适用与边界
原文中的明确线索
faebryk.core.graph、src/faebryk/core/zig/src/graph/graph.zig、src/faebryk/core/zig/src/python/graph/graphpy.zig、src/faebryk/core/zig/gen/graph/graph.pyi、src/faebryk/core/graph.py、src/faebryk/core/node.py、src/atopile/compiler/gentypegraph.py、src/faebryk/core/graphrender.py