rocket-engine 0.0.2b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rocket_engine/__init__.py +8 -0
- rocket_engine/__main__.py +12 -0
- rocket_engine/adapters/README.md +54 -0
- rocket_engine/adapters/__init__.py +7 -0
- rocket_engine/adapters/api.py +39 -0
- rocket_engine/adapters/base.py +46 -0
- rocket_engine/adapters/cace/__init__.py +163 -0
- rocket_engine/adapters/circulax/README.md +10 -0
- rocket_engine/adapters/circulax/__init__.py +112 -0
- rocket_engine/adapters/circulax/_driver.py +190 -0
- rocket_engine/adapters/circulax/adapter.py +538 -0
- rocket_engine/adapters/circulax/results.py +291 -0
- rocket_engine/adapters/cli/README.md +34 -0
- rocket_engine/adapters/cli/__init__.py +305 -0
- rocket_engine/adapters/connectivity/__init__.py +196 -0
- rocket_engine/adapters/connectivity/results.py +214 -0
- rocket_engine/adapters/cosim/README.md +9 -0
- rocket_engine/adapters/cosim/__init__.py +1390 -0
- rocket_engine/adapters/cosim/results.py +214 -0
- rocket_engine/adapters/devsim/__init__.py +171 -0
- rocket_engine/adapters/digital_flow/README.md +9 -0
- rocket_engine/adapters/digital_flow/__init__.py +1121 -0
- rocket_engine/adapters/digital_flow/results.py +227 -0
- rocket_engine/adapters/digital_flow/state.py +462 -0
- rocket_engine/adapters/drc/README.klayout.md +7 -0
- rocket_engine/adapters/drc/README.md +7 -0
- rocket_engine/adapters/drc/__init__.py +1 -0
- rocket_engine/adapters/drc/klayout.py +952 -0
- rocket_engine/adapters/drc/magic.py +287 -0
- rocket_engine/adapters/drc/results.py +184 -0
- rocket_engine/adapters/drc/results_kl.py +188 -0
- rocket_engine/adapters/elmer/__init__.py +163 -0
- rocket_engine/adapters/envelope.py +120 -0
- rocket_engine/adapters/equivalence/__init__.py +156 -0
- rocket_engine/adapters/errors.py +181 -0
- rocket_engine/adapters/extract_magic/README.md +15 -0
- rocket_engine/adapters/extract_magic/__init__.py +425 -0
- rocket_engine/adapters/extract_magic/results.py +209 -0
- rocket_engine/adapters/formal_sby/README.md +7 -0
- rocket_engine/adapters/formal_sby/__init__.py +773 -0
- rocket_engine/adapters/formal_sby/formal_edge.py +195 -0
- rocket_engine/adapters/formal_sby/results.py +185 -0
- rocket_engine/adapters/gdsfactory/__init__.py +194 -0
- rocket_engine/adapters/gdsfactory/_driver.py +459 -0
- rocket_engine/adapters/gdsfactory/adapter.py +609 -0
- rocket_engine/adapters/gdsfactory/results.py +181 -0
- rocket_engine/adapters/hdl_sim/README.md +7 -0
- rocket_engine/adapters/hdl_sim/__init__.py +369 -0
- rocket_engine/adapters/hdl_sim/ghdl.py +155 -0
- rocket_engine/adapters/hdl_sim/results.py +178 -0
- rocket_engine/adapters/hdl_sim/verilator.py +167 -0
- rocket_engine/adapters/http/README.md +15 -0
- rocket_engine/adapters/http/__init__.py +458 -0
- rocket_engine/adapters/http/events.py +63 -0
- rocket_engine/adapters/ipc/README.md +9 -0
- rocket_engine/adapters/ipc/__init__.py +111 -0
- rocket_engine/adapters/lvs_netgen/README.md +20 -0
- rocket_engine/adapters/lvs_netgen/__init__.py +889 -0
- rocket_engine/adapters/lvs_netgen/results.py +168 -0
- rocket_engine/adapters/mcp/README.md +19 -0
- rocket_engine/adapters/mcp/__init__.py +85 -0
- rocket_engine/adapters/mcp/api-schema.json +6107 -0
- rocket_engine/adapters/mcp/pull.py +246 -0
- rocket_engine/adapters/mcp/server.py +794 -0
- rocket_engine/adapters/meep/__init__.py +167 -0
- rocket_engine/adapters/meow/README.md +7 -0
- rocket_engine/adapters/meow/__init__.py +190 -0
- rocket_engine/adapters/meow/_driver.py +227 -0
- rocket_engine/adapters/meow/_envelope.py +108 -0
- rocket_engine/adapters/meow/adapter.py +491 -0
- rocket_engine/adapters/meow/results.py +218 -0
- rocket_engine/adapters/mutation/__init__.py +192 -0
- rocket_engine/adapters/ngspice/README.md +28 -0
- rocket_engine/adapters/ngspice/__init__.py +627 -0
- rocket_engine/adapters/ngspice/results.py +215 -0
- rocket_engine/adapters/postlayout/README.md +28 -0
- rocket_engine/adapters/postlayout/__init__.py +17 -0
- rocket_engine/adapters/postlayout/adapter.py +1062 -0
- rocket_engine/adapters/postlayout/results.py +330 -0
- rocket_engine/adapters/postlayout/translate.py +71 -0
- rocket_engine/adapters/profile.py +220 -0
- rocket_engine/adapters/sax/README.md +23 -0
- rocket_engine/adapters/sax/__init__.py +516 -0
- rocket_engine/adapters/sax/_driver.py +148 -0
- rocket_engine/adapters/sax/results.py +291 -0
- rocket_engine/adapters/stdio_console.py +1151 -0
- rocket_engine/adapters/syntax/README.md +5 -0
- rocket_engine/adapters/syntax/__init__.py +366 -0
- rocket_engine/adapters/syntax/results.py +181 -0
- rocket_engine/adapters/synth_yosys/README.md +7 -0
- rocket_engine/adapters/synth_yosys/__init__.py +655 -0
- rocket_engine/adapters/synth_yosys/amaranth.py +120 -0
- rocket_engine/adapters/synth_yosys/ghdl.py +128 -0
- rocket_engine/adapters/synth_yosys/results.py +173 -0
- rocket_engine/adapters/timing_sta/README.md +9 -0
- rocket_engine/adapters/timing_sta/__init__.py +726 -0
- rocket_engine/adapters/view_sync/__init__.py +185 -0
- rocket_engine/adapters/view_sync/results.py +189 -0
- rocket_engine/adapters/vlsir/__init__.py +142 -0
- rocket_engine/adapters/xschem/__init__.py +440 -0
- rocket_engine/adapters/xschem/deck.py +266 -0
- rocket_engine/clients/__init__.py +5 -0
- rocket_engine/clients/runtime.py +255 -0
- rocket_engine/composition.py +2279 -0
- rocket_engine/execution/README.md +30 -0
- rocket_engine/execution/__init__.py +150 -0
- rocket_engine/execution/apig/__init__.py +1 -0
- rocket_engine/execution/apig/pool.py +463 -0
- rocket_engine/execution/apig/submit.py +124 -0
- rocket_engine/execution/block_runs_scope.py +479 -0
- rocket_engine/execution/coalesce.py +414 -0
- rocket_engine/execution/console/__init__.py +1 -0
- rocket_engine/execution/console/apply_session.py +318 -0
- rocket_engine/execution/console/lifecycle.py +265 -0
- rocket_engine/execution/dispatch.py +205 -0
- rocket_engine/execution/errors.py +31 -0
- rocket_engine/execution/ports.py +797 -0
- rocket_engine/execution/pyexec/__init__.py +1 -0
- rocket_engine/execution/pyexec/apply_context.py +547 -0
- rocket_engine/execution/pyexec/approvals.py +173 -0
- rocket_engine/execution/pyexec/runner.py +404 -0
- rocket_engine/execution/pyexec/support.py +464 -0
- rocket_engine/execution/python_exec.py +897 -0
- rocket_engine/execution/queue.py +85 -0
- rocket_engine/execution/replay_safe.py +601 -0
- rocket_engine/execution/routing/__init__.py +1 -0
- rocket_engine/execution/routing/calls.py +364 -0
- rocket_engine/execution/routing/namespace.py +785 -0
- rocket_engine/execution/routing/ports.py +102 -0
- rocket_engine/execution/routing/tools.py +346 -0
- rocket_engine/execution/runner.py +311 -0
- rocket_engine/execution/runtime.py +1149 -0
- rocket_engine/execution/service.py +279 -0
- rocket_engine/execution/worker.py +464 -0
- rocket_engine/interfaces/README.md +26 -0
- rocket_engine/interfaces/__init__.py +58 -0
- rocket_engine/interfaces/apig_assets.py +407 -0
- rocket_engine/interfaces/celllink.py +461 -0
- rocket_engine/interfaces/documents.py +92 -0
- rocket_engine/interfaces/envelopes.py +131 -0
- rocket_engine/interfaces/errors.py +16 -0
- rocket_engine/interfaces/layout.py +410 -0
- rocket_engine/interfaces/layout_schema.yaml +278 -0
- rocket_engine/interfaces/paths.py +223 -0
- rocket_engine/interfaces/pdks.py +550 -0
- rocket_engine/interfaces/ports.py +72 -0
- rocket_engine/interfaces/references.py +115 -0
- rocket_engine/interfaces/refs.py +85 -0
- rocket_engine/interfaces/runparams.py +304 -0
- rocket_engine/interfaces/setup.py +552 -0
- rocket_engine/interfaces/setup_catalogue.yaml +243 -0
- rocket_engine/interfaces/setup_probes.py +66 -0
- rocket_engine/interfaces/vocabulary.py +58 -0
- rocket_engine/interfaces/yaml_dump.py +31 -0
- rocket_engine/library/README.md +22 -0
- rocket_engine/library/__init__.py +13 -0
- rocket_engine/library/apig_catalog.py +371 -0
- rocket_engine/library/catalog.py +185 -0
- rocket_engine/library/errors.py +16 -0
- rocket_engine/mutate/__init__.py +776 -0
- rocket_engine/mutate/operators.py +700 -0
- rocket_engine/ops/__init__.py +1 -0
- rocket_engine/ops/deferred.py +279 -0
- rocket_engine/ops/editors.py +404 -0
- rocket_engine/ops/evidence.py +194 -0
- rocket_engine/ops/gates.py +262 -0
- rocket_engine/ops/ports.py +76 -0
- rocket_engine/ops/queries.py +417 -0
- rocket_engine/ops/runs.py +553 -0
- rocket_engine/ops/submit.py +614 -0
- rocket_engine/project/README.md +27 -0
- rocket_engine/project/__init__.py +6 -0
- rocket_engine/project/canvas/__init__.py +55 -0
- rocket_engine/project/canvas/compile.py +109 -0
- rocket_engine/project/canvas/integrate.py +48 -0
- rocket_engine/project/canvas/schema.py +241 -0
- rocket_engine/project/canvas/templates.py +46 -0
- rocket_engine/project/canvas/validate.py +603 -0
- rocket_engine/project/edit/__init__.py +5 -0
- rocket_engine/project/edit/cas.py +87 -0
- rocket_engine/project/edit/transactions.py +282 -0
- rocket_engine/project/errors.py +16 -0
- rocket_engine/project/frontend13.py +685 -0
- rocket_engine/project/geometry/__init__.py +23 -0
- rocket_engine/project/geometry/ops.py +451 -0
- rocket_engine/project/geometry/snap.py +103 -0
- rocket_engine/project/ip/__init__.py +1 -0
- rocket_engine/project/ip/blocks.py +195 -0
- rocket_engine/project/ip/entry.schema.json +78 -0
- rocket_engine/project/ip/lifecycle.py +402 -0
- rocket_engine/project/ip/verbs.py +123 -0
- rocket_engine/project/layers/__init__.py +6 -0
- rocket_engine/project/layers/bindings.py +115 -0
- rocket_engine/project/layers/catalog.py +228 -0
- rocket_engine/project/layers/presets.py +43 -0
- rocket_engine/project/ledger/__init__.py +1 -0
- rocket_engine/project/ledger/docs.py +167 -0
- rocket_engine/project/ledger/entities.py +176 -0
- rocket_engine/project/ledger/events.py +29 -0
- rocket_engine/project/ledger/runs.py +257 -0
- rocket_engine/project/ledger/shared.py +174 -0
- rocket_engine/project/ledger/snapshots.py +385 -0
- rocket_engine/project/ledger/wires.py +552 -0
- rocket_engine/project/process/__init__.py +14 -0
- rocket_engine/project/process/model.py +193 -0
- rocket_engine/project/process/recipes.py +121 -0
- rocket_engine/project/schematic/__init__.py +1 -0
- rocket_engine/project/schematic/hierarchy.py +312 -0
- rocket_engine/project/schematic/instances.py +393 -0
- rocket_engine/project/schematic/sheets.py +198 -0
- rocket_engine/project/service.py +2941 -0
- rocket_engine/project/symbols/__init__.py +1 -0
- rocket_engine/project/symbols/cells.py +324 -0
- rocket_engine/project/symbols/linkage.py +356 -0
- rocket_engine/project/symbols/symbols.py +352 -0
- rocket_engine/project/templates/__init__.py +303 -0
- rocket_engine/project/templates/errors.py +25 -0
- rocket_engine/project/testbench/__init__.py +49 -0
- rocket_engine/project/testbench/blocks.py +619 -0
- rocket_engine/project/testbench/templates.py +134 -0
- rocket_engine/stores/README.md +12 -0
- rocket_engine/stores/__init__.py +6 -0
- rocket_engine/stores/ecs.py +1508 -0
- rocket_engine/stores/layers.py +1023 -0
- rocket_engine/stores/settings.py +1188 -0
- rocket_engine/stores/wireplace.py +1324 -0
- rocket_engine/workflows/README.md +18 -0
- rocket_engine/workflows/__init__.py +53 -0
- rocket_engine/workflows/capability_plan.py +102 -0
- rocket_engine/workflows/completion.py +228 -0
- rocket_engine/workflows/connectgraph.py +734 -0
- rocket_engine/workflows/connectgraph_emit.py +336 -0
- rocket_engine/workflows/gates.py +144 -0
- rocket_engine/workflows/photonic_wire.py +76 -0
- rocket_engine/workflows/stages.py +324 -0
- rocket_engine/workflows/viewsync.py +399 -0
- rocket_engine-0.0.2b1.dist-info/METADATA +200 -0
- rocket_engine-0.0.2b1.dist-info/RECORD +241 -0
- rocket_engine-0.0.2b1.dist-info/WHEEL +4 -0
- rocket_engine-0.0.2b1.dist-info/entry_points.txt +2 -0
- rocket_engine-0.0.2b1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# Provision catalogue (ENGINE-SETUP): the data the Vivado-style setup
|
|
2
|
+
# menu renders. One entry per provisionable unit: what it provides,
|
|
3
|
+
# how to detect it, and where the install recipe lives. Recipes cite
|
|
4
|
+
# docs/provision-plan.md (PROV seed), scripts/install.sh modes
|
|
5
|
+
# (B10/DEMO-PATH), or the owning ticket — never a bare "install X".
|
|
6
|
+
# Load with rocket_engine.interfaces.setup.load_catalogue.
|
|
7
|
+
# GTKWave is EXCLUDED from engine provisioning by the headless rule
|
|
8
|
+
# (display-side, RocketIDE concern) — recorded, never installed.
|
|
9
|
+
catalogue_version: 1
|
|
10
|
+
entries:
|
|
11
|
+
- id: digital-bundle
|
|
12
|
+
kind: tool
|
|
13
|
+
label: Digital bundle (oss-cad-suite)
|
|
14
|
+
binaries: [iverilog, vvp, verilator, slang, yosys, ghdl, sby]
|
|
15
|
+
remedy: >-
|
|
16
|
+
Install the pinned oss-cad-suite bundle 20261025 (iverilog, vvp,
|
|
17
|
+
verilator, slang, yosys, ghdl, sby; run
|
|
18
|
+
scripts/provision_toolchain.sh --install); the scenario gate needs
|
|
19
|
+
dev-PATH with oss-cad-suite (see scenarios/README.md).
|
|
20
|
+
recipe: "scripts/provision_toolchain.sh: pinned tarball 20261025 + asserts (PROV phase 1)."
|
|
21
|
+
- id: librelane
|
|
22
|
+
kind: tool
|
|
23
|
+
label: LibreLane (RTL-to-GDS flow)
|
|
24
|
+
binaries: [librelane]
|
|
25
|
+
remedy: >-
|
|
26
|
+
Install the LibreLane 3.0.17 supported distribution (run
|
|
27
|
+
scripts/provision_toolchain.sh --install for the pinned AppImage
|
|
28
|
+
per the upstream install docs); inside a nix-shell env, `librelane
|
|
29
|
+
--version` must report 3.0.17.
|
|
30
|
+
recipe: "scripts/provision_toolchain.sh (PROV phase 1; upstream AppImage/Nix install docs)."
|
|
31
|
+
- id: opensta
|
|
32
|
+
kind: tool
|
|
33
|
+
label: OpenSTA (static timing)
|
|
34
|
+
binaries: [sta]
|
|
35
|
+
remedy: >-
|
|
36
|
+
Install the pinned OpenSTA build 857316f (run
|
|
37
|
+
scripts/provision_toolchain.sh --install for the CMake source
|
|
38
|
+
build per the upstream README); `sta` lands in
|
|
39
|
+
~/tools/opensta-857316f/bin.
|
|
40
|
+
recipe: "scripts/provision_toolchain.sh (PROV phase 1; upstream OpenSTA README source build)."
|
|
41
|
+
- id: ngspice
|
|
42
|
+
kind: tool
|
|
43
|
+
label: ngspice (SPICE)
|
|
44
|
+
binaries: [ngspice]
|
|
45
|
+
remedy: >-
|
|
46
|
+
Provision ngspice (see docs/tickets/NGSPICE-LIVE.md).
|
|
47
|
+
recipe: "docs/provision-plan.md: apt pin or source build (B10)."
|
|
48
|
+
- id: netgen
|
|
49
|
+
kind: tool
|
|
50
|
+
label: Netgen (LVS)
|
|
51
|
+
binaries: [netgen]
|
|
52
|
+
banner: lvs
|
|
53
|
+
remedy: >-
|
|
54
|
+
Install opencircuitdesign netgen from source (see
|
|
55
|
+
docs/tickets/NGSPICE-LIVE.md); the `netgen` apt package is
|
|
56
|
+
the Schoeberl mesh-generator impostor, not the LVS tool.
|
|
57
|
+
recipe: "docs/tickets/NGSPICE-LIVE.md: opencircuitdesign source build (B10)."
|
|
58
|
+
- id: magic
|
|
59
|
+
kind: tool
|
|
60
|
+
label: Magic (DRC + extraction)
|
|
61
|
+
binaries: [magic]
|
|
62
|
+
remedy: >-
|
|
63
|
+
Install Magic from source per the rtimothyedwards docs (see
|
|
64
|
+
docs/provision-plan.md); ambient installs are kept and
|
|
65
|
+
version-asserted, never reinstalled.
|
|
66
|
+
recipe: "docs/provision-plan.md: source build with --prefix into the app-owned tools dir (B10)."
|
|
67
|
+
- id: klayout
|
|
68
|
+
kind: tool
|
|
69
|
+
label: KLayout (batch DRC)
|
|
70
|
+
binaries: [klayout]
|
|
71
|
+
remedy: >-
|
|
72
|
+
Install KLayout for batch DRC (see
|
|
73
|
+
docs/provision-plan.md); the engine uses `klayout -b`
|
|
74
|
+
batch only — GUI breakage never gates engine work.
|
|
75
|
+
recipe: "docs/provision-plan.md: ambient install kept and version-asserted (B10)."
|
|
76
|
+
- id: xyce
|
|
77
|
+
kind: tool
|
|
78
|
+
label: Xyce (parallel SPICE)
|
|
79
|
+
binaries: [Xyce]
|
|
80
|
+
remedy: >-
|
|
81
|
+
Install the pinned Xyce Release-7.10.0 build (Trilinos
|
|
82
|
+
trilinos-release-17-2-1 first; run
|
|
83
|
+
scripts/provision_toolchain.sh --install).
|
|
84
|
+
recipe: "scripts/provision_toolchain.sh (PROV phase 2; Xyce building guide recipe)."
|
|
85
|
+
- id: xschem
|
|
86
|
+
kind: tool
|
|
87
|
+
label: Xschem (schematic)
|
|
88
|
+
binaries: [xschem]
|
|
89
|
+
remedy: >-
|
|
90
|
+
Install Xschem from source at 7811010 (run
|
|
91
|
+
scripts/provision_toolchain.sh --install).
|
|
92
|
+
recipe: "scripts/provision_toolchain.sh (PROV phase 2; upstream xschem source build)."
|
|
93
|
+
- id: cace
|
|
94
|
+
kind: python
|
|
95
|
+
label: CACE (characterization)
|
|
96
|
+
python: [cace]
|
|
97
|
+
remedy: >-
|
|
98
|
+
Install cace==2.13.0 into the engine venv (run
|
|
99
|
+
scripts/provision_toolchain.sh --install; needs
|
|
100
|
+
xschem/magic/netgen/ngspice first).
|
|
101
|
+
recipe: "scripts/provision_toolchain.sh (PROV phase 2; pip into the engine venv)."
|
|
102
|
+
- id: bwrap
|
|
103
|
+
kind: tool
|
|
104
|
+
label: Bubblewrap (isolation)
|
|
105
|
+
binaries: [bwrap]
|
|
106
|
+
remedy: >-
|
|
107
|
+
B10 owns bwrap provenance (system vs bundled) and PATH
|
|
108
|
+
placement (see docs/probe-bwrap-isolation.md).
|
|
109
|
+
recipe: "docs/probe-bwrap-isolation.md (B10)."
|
|
110
|
+
- id: sax
|
|
111
|
+
kind: python
|
|
112
|
+
label: SAX (photonic sim)
|
|
113
|
+
python: [sax]
|
|
114
|
+
remedy: "sax not installed, uv sync (B10-owned tooling)"
|
|
115
|
+
recipe: "pyproject.toml [project] dependencies: plain `uv sync` installs everything (core library)."
|
|
116
|
+
- id: circulax
|
|
117
|
+
kind: python
|
|
118
|
+
label: Circulax (time-domain circuit sim)
|
|
119
|
+
python: [circulax]
|
|
120
|
+
remedy: "circulax not installed, uv sync (B10-owned tooling)"
|
|
121
|
+
recipe: "pyproject.toml [project] dependencies: plain `uv sync` installs everything (core library)."
|
|
122
|
+
- id: meow
|
|
123
|
+
kind: python
|
|
124
|
+
label: Meow (EME mode/field solver)
|
|
125
|
+
python: [meow]
|
|
126
|
+
remedy: "meow not installed, uv sync (B10-owned tooling)"
|
|
127
|
+
recipe: "pyproject.toml [project] dependencies: plain `uv sync` installs everything (core library)."
|
|
128
|
+
- id: gdsfactory
|
|
129
|
+
kind: python
|
|
130
|
+
label: gdsfactory (layout views)
|
|
131
|
+
python: [gdsfactory]
|
|
132
|
+
remedy: "gdsfactory not installed, uv sync (B10-owned tooling)"
|
|
133
|
+
recipe: "pyproject.toml [project] dependencies: plain `uv sync` installs everything (core library)."
|
|
134
|
+
- id: cvc
|
|
135
|
+
kind: tool
|
|
136
|
+
label: cvc (SMT solvers)
|
|
137
|
+
binaries: [cvc4, cvc5]
|
|
138
|
+
remedy: >-
|
|
139
|
+
Install the pinned oss-cad-suite bundle 20261025 (ships
|
|
140
|
+
the cvc4/cvc5 SMT solvers; run
|
|
141
|
+
scripts/provision_toolchain.sh --install).
|
|
142
|
+
recipe: "scripts/provision_toolchain.sh: pinned tarball 20261025 ships cvc4/cvc5 (PROV phase 1)."
|
|
143
|
+
- id: openroad
|
|
144
|
+
kind: tool
|
|
145
|
+
label: OpenROAD
|
|
146
|
+
binaries: [openroad]
|
|
147
|
+
remedy: >-
|
|
148
|
+
Install the LibreLane 3.0.17 supported distribution (run
|
|
149
|
+
scripts/provision_toolchain.sh --install); openroad ships
|
|
150
|
+
in its tool closure (see docs/provision-sources.md §3-§4).
|
|
151
|
+
recipe: "scripts/provision_toolchain.sh (PROV phase 1; LibreLane closure ships openroad)."
|
|
152
|
+
- id: pymeep
|
|
153
|
+
kind: python
|
|
154
|
+
label: pymeep (FDTD)
|
|
155
|
+
python: [meep]
|
|
156
|
+
remedy: >-
|
|
157
|
+
Provision pymeep==1.35.0 via the miniforge conda env (run
|
|
158
|
+
scripts/provision_toolchain.sh --install); it lives in
|
|
159
|
+
the conda env, not the engine venv, so verify with the
|
|
160
|
+
env python (see docs/provision-sources.md §10).
|
|
161
|
+
recipe: "scripts/provision_toolchain.sh (PROV-DEFERRED; conda-forge pymeep env)."
|
|
162
|
+
- id: openems
|
|
163
|
+
kind: tool
|
|
164
|
+
label: openEMS (EC-FDTD)
|
|
165
|
+
binaries: [openEMS]
|
|
166
|
+
remedy: >-
|
|
167
|
+
Install openEMS v0.37.0 + CSXCAD v0.7.0 from source (run
|
|
168
|
+
scripts/provision_toolchain.sh --install).
|
|
169
|
+
recipe: "scripts/provision_toolchain.sh (PROV-DEFERRED; docs.openEMS.de recipe)."
|
|
170
|
+
- id: elmer
|
|
171
|
+
kind: tool
|
|
172
|
+
label: Elmer (thermal/FEM)
|
|
173
|
+
binaries: [ElmerSolver]
|
|
174
|
+
remedy: >-
|
|
175
|
+
Install elmerfem-csc via the CSC PPA (needs sudo; run
|
|
176
|
+
scripts/provision_toolchain.sh --install).
|
|
177
|
+
recipe: "scripts/provision_toolchain.sh (PROV-DEFERRED; CSC PPA apt route)."
|
|
178
|
+
- id: devsim
|
|
179
|
+
kind: python
|
|
180
|
+
label: DEVSIM (TCAD)
|
|
181
|
+
python: [devsim]
|
|
182
|
+
remedy: >-
|
|
183
|
+
Install devsim==2.11.2 into the engine venv (run
|
|
184
|
+
scripts/provision_toolchain.sh --install).
|
|
185
|
+
recipe: "scripts/provision_toolchain.sh (PROV-DEFERRED; pip into the engine venv)."
|
|
186
|
+
- id: palace
|
|
187
|
+
kind: tool
|
|
188
|
+
label: Palace (full-wave FEM)
|
|
189
|
+
binaries: [palace]
|
|
190
|
+
provisionable: false
|
|
191
|
+
remedy: >-
|
|
192
|
+
Palace is unsourced: its install docs are not read yet
|
|
193
|
+
(docs/provision-sources.md §12). No row action.
|
|
194
|
+
recipe: "docs/provision-sources.md §12 (unsourced — no recipe yet)."
|
|
195
|
+
- id: pdk-sky130A
|
|
196
|
+
kind: pdk
|
|
197
|
+
label: PDK sky130A
|
|
198
|
+
pdk_id: sky130A
|
|
199
|
+
source_default: ~/.local/share/pdk/sky130A
|
|
200
|
+
decks:
|
|
201
|
+
- libs.tech/klayout/drc/sky130A.lydrc
|
|
202
|
+
- libs.tech/magic/sky130A.tech
|
|
203
|
+
- libs.tech/combined/sky130.lib.spice
|
|
204
|
+
- libs.tech/netgen/sky130A_setup.tcl
|
|
205
|
+
remedy: >-
|
|
206
|
+
Register the PDK into ROCKETEDA_HOME (run
|
|
207
|
+
scripts/install.sh --pdk-only with PDK_SOURCE set to the
|
|
208
|
+
sky130A tree).
|
|
209
|
+
recipe: "scripts/install.sh --pdk-only (PDK_SOURCE/PDK_ID/PDK_REVISION; see docs/demo-runbook.md)."
|
|
210
|
+
- id: pdk-ihp
|
|
211
|
+
kind: pdk
|
|
212
|
+
label: PDK ihp (IHP SG13G2 BiCMOS + RF)
|
|
213
|
+
pdk_id: ihp
|
|
214
|
+
source_default: ~/.local/share/pdk/ihp
|
|
215
|
+
decks:
|
|
216
|
+
- ihp/klayout/tech/drc/ihp-sg13g2.drc
|
|
217
|
+
remedy: >-
|
|
218
|
+
Provision ihp-gdsfactory 2.0.1 per docs/pdk/ihp/recipe.md
|
|
219
|
+
(pip pin + KLayout tech link + verify probe), then register
|
|
220
|
+
the tree via scripts/install.sh --pdk-only with PDK_ID=ihp.
|
|
221
|
+
The PDK deck needs KLayout newer than 0.30.7 (euclidean
|
|
222
|
+
metric; recipe §4).
|
|
223
|
+
recipe: "docs/pdk/ihp/recipe.md (PDK-IHP lane)."
|
|
224
|
+
- id: cloud-tidy3d
|
|
225
|
+
kind: cloud
|
|
226
|
+
label: Tidy3D web (cloud)
|
|
227
|
+
service: tidy3d web
|
|
228
|
+
remedy: >-
|
|
229
|
+
BYOC opt-in only (F12/I32): tidy3d web needs a
|
|
230
|
+
user-supplied key from the CLOUD-AUTH secure store (see
|
|
231
|
+
docs/tickets/CLOUD-AUTH.md); cloud never activates
|
|
232
|
+
without an explicit opt-in.
|
|
233
|
+
recipe: "CLOUD-AUTH (Backlog): OS keyring preferred, encrypted file fallback."
|
|
234
|
+
- id: cloud-gdsfactory-plus
|
|
235
|
+
kind: cloud
|
|
236
|
+
label: GDSFactory+ (cloud)
|
|
237
|
+
service: gdsfactory+
|
|
238
|
+
remedy: >-
|
|
239
|
+
BYOC opt-in only (F12/I32): gdsfactory+ needs a
|
|
240
|
+
user-supplied key from the CLOUD-AUTH secure store (see
|
|
241
|
+
docs/tickets/CLOUD-AUTH.md); cloud never activates
|
|
242
|
+
without an explicit opt-in.
|
|
243
|
+
recipe: "CLOUD-AUTH (Backlog): OS keyring preferred, encrypted file fallback."
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"""Shadow-proof Python-tool probes for the setup surface.
|
|
2
|
+
|
|
3
|
+
`detect_python` answers "is this tool module genuinely installed"
|
|
4
|
+
without false-readying on import shadows: a bare `find_spec` hit is
|
|
5
|
+
not enough, because an empty namespace directory on `sys.path` (a
|
|
6
|
+
stray dir, a partial uninstall, a foreign residue like the observed
|
|
7
|
+
`/tmp/gdsfactory/`) yields a loader-less namespace spec that the old
|
|
8
|
+
probe counted as installed and then stamped `found: True` when the
|
|
9
|
+
version lookup missed. This probe requires both a real loader and
|
|
10
|
+
installed distribution metadata before reporting found.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import importlib.metadata
|
|
14
|
+
import importlib.util
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def detect_python(names):
|
|
18
|
+
"""Split module names into found versions and missing names.
|
|
19
|
+
|
|
20
|
+
A module counts as found only when it resolves to a spec with a
|
|
21
|
+
real loader (namespace shadows carry `loader=None`) and its
|
|
22
|
+
distribution metadata answers a version. Anything else — no
|
|
23
|
+
spec, a loader-less spec, an unresolvable spec, or no installed
|
|
24
|
+
distribution — reports missing, never a bare `True`.
|
|
25
|
+
|
|
26
|
+
The distribution is resolved through the top-level mapping,
|
|
27
|
+
not by assuming the names match: the `meow` module ships as
|
|
28
|
+
the `meow-sim` distribution, and only the mapping knows that.
|
|
29
|
+
Dotted names look up their top-level parent; when the mapping
|
|
30
|
+
is silent (a dist-info without top_level records), a direct
|
|
31
|
+
version lookup under the module name is the fallback, so the
|
|
32
|
+
rule stays loader-plus-version either way.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
names: Importable module names to probe, in order.
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
(found, missing) pair: found maps each installed module to
|
|
39
|
+
its distribution version, missing lists the rest in
|
|
40
|
+
probe order.
|
|
41
|
+
"""
|
|
42
|
+
try:
|
|
43
|
+
provided = importlib.metadata.packages_distributions()
|
|
44
|
+
except Exception:
|
|
45
|
+
provided = {}
|
|
46
|
+
found, missing = {}, []
|
|
47
|
+
for name in names:
|
|
48
|
+
try:
|
|
49
|
+
spec = importlib.util.find_spec(name)
|
|
50
|
+
except (ImportError, ValueError):
|
|
51
|
+
spec = None
|
|
52
|
+
if spec is None or spec.loader is None:
|
|
53
|
+
missing.append(name)
|
|
54
|
+
continue
|
|
55
|
+
candidates = list(provided.get(name.partition(".")[0]) or [])
|
|
56
|
+
if name not in candidates:
|
|
57
|
+
candidates.append(name)
|
|
58
|
+
for candidate in candidates:
|
|
59
|
+
try:
|
|
60
|
+
found[name] = importlib.metadata.version(candidate)
|
|
61
|
+
break
|
|
62
|
+
except importlib.metadata.PackageNotFoundError:
|
|
63
|
+
continue
|
|
64
|
+
else:
|
|
65
|
+
missing.append(name)
|
|
66
|
+
return found, missing
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""Operation vocabulary: the single source of truth for callable names.
|
|
2
|
+
|
|
3
|
+
Transports gate inbound names against these sets; the composition root
|
|
4
|
+
gates outbound routing against them. Neither side keeps its own copy.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
OPERATIONS = frozenset(
|
|
8
|
+
{
|
|
9
|
+
"generate_views", "run_hdl_test", "run_formal", "run_syntax",
|
|
10
|
+
"run_synth",
|
|
11
|
+
"run_connectivity", "run_drc", "run_lvs", "run_erc", "run_spice",
|
|
12
|
+
"run_optical", "run_digital_flow", "run_timing", "run_extraction",
|
|
13
|
+
"run_post_layout", "run_em", "run_thermal", "python_execute",
|
|
14
|
+
"run_view_sync", "run_cosim", "run_xschem", "run_antenna",
|
|
15
|
+
"python_open", "python_reset",
|
|
16
|
+
"run_job",
|
|
17
|
+
"resume_run", "discard_run", "resume_all_retryable", "cancel_job",
|
|
18
|
+
"create_project", "write_doc", "delete_doc", "apply_mutations",
|
|
19
|
+
"rewind", "place_cell", "write_settings",
|
|
20
|
+
"create_entity", "set_component", "attach_component",
|
|
21
|
+
"detach_component", "delete_entity",
|
|
22
|
+
"place_wire", "place_junction", "connect_endpoint", "move_wire",
|
|
23
|
+
"split_wire", "delete_wire", "delete_junction", "materialize_nets",
|
|
24
|
+
"apply_transaction",
|
|
25
|
+
"create_shape",
|
|
26
|
+
"create_sheet", "place_instance", "bind_block",
|
|
27
|
+
"create_symbol", "create_cell", "map_pins",
|
|
28
|
+
"ip_register", "ip_instantiate", "ip_promote",
|
|
29
|
+
"bind_layers", "annotate",
|
|
30
|
+
"create_testbench", "regenerate_testbench",
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
QUERIES = frozenset(
|
|
34
|
+
{
|
|
35
|
+
"api_search", "api_info", "api_help", "get_python_console",
|
|
36
|
+
"get_capabilities", "get_project_snapshot", "list_job_kinds",
|
|
37
|
+
"plan_checks", "get_design_completion",
|
|
38
|
+
"get_job_status", "get_check_results",
|
|
39
|
+
"get_events_since", "list_artifacts", "get_logs",
|
|
40
|
+
"get_findings",
|
|
41
|
+
"list_projects", "list_docs", "read_doc",
|
|
42
|
+
"get_component", "components_of", "entities_with",
|
|
43
|
+
"get_world_snapshot",
|
|
44
|
+
"list_cells", "serve_asset", "list_assets",
|
|
45
|
+
"read_settings", "get_resolved_config",
|
|
46
|
+
"get_layer_stackup", "get_layer_rows", "list_layer_presets",
|
|
47
|
+
"save_layer_preset", "delete_layer_preset", "apply_layer_preset",
|
|
48
|
+
"list_survivors",
|
|
49
|
+
"read_entity_revision",
|
|
50
|
+
"list_sheets", "get_sheet", "get_instance", "instances_on_sheet",
|
|
51
|
+
"list_symbols", "get_symbol", "get_cell",
|
|
52
|
+
"list_layers", "check_capability",
|
|
53
|
+
"ip_search", "ip_get",
|
|
54
|
+
"connection_graph", "net_occurrences", "xprobe", "resolve_pin",
|
|
55
|
+
"plot_export", "erc_check", "write_netlist", "update_netlist",
|
|
56
|
+
"list_testbenches", "describe_testbench",
|
|
57
|
+
}
|
|
58
|
+
)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Fresh ruamel dumpers for YAML writes (RUAMEL-DUMPER).
|
|
2
|
+
|
|
3
|
+
A failed ruamel ``YAML(typ="safe").dump`` poisons that dumper
|
|
4
|
+
instance: every later dump through it emits empty text instead
|
|
5
|
+
of raising. A long-lived dumper therefore collapses distinct
|
|
6
|
+
writes onto one hollow identity after a single failure. Every
|
|
7
|
+
YAML write on the Engine/ProjectService path dumps through a
|
|
8
|
+
fresh instance per call, so a failure raises loudly and later
|
|
9
|
+
writes are unaffected.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import io
|
|
13
|
+
|
|
14
|
+
from ruamel.yaml import YAML
|
|
15
|
+
|
|
16
|
+
__all__ = ["dump_yaml_text"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def dump_yaml_text(data):
|
|
20
|
+
"""Render one YAML text through a fresh dumper.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
data: Mapping or list to serialize.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
YAML text for the payload, byte-identical to a direct
|
|
27
|
+
fresh ``YAML(typ="safe")`` dump and never empty.
|
|
28
|
+
"""
|
|
29
|
+
buf = io.StringIO()
|
|
30
|
+
YAML(typ="safe").dump(data, buf)
|
|
31
|
+
return buf.getvalue()
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# library — PDK and reusable-cell catalogs
|
|
2
|
+
|
|
3
|
+
library/ supplies catalog lookups used by operations and capability checks. It currently contains PDK context/catalog logic and the APIG cell catalog; solver execution remains in adapters/ and project revisions remain in project/.
|
|
4
|
+
|
|
5
|
+
## PDK catalog
|
|
6
|
+
|
|
7
|
+
catalog.py resolves versioned PDK references, reports per-operation readiness, registers and verifies catalog entries, and provides cell instantiate/promote helpers. The file-backed PDK registry and asset resolver live in [interfaces/pdks.py](../interfaces/pdks.py); registration records a revision and content identity, and upstream files are treated as read-only inputs.
|
|
8
|
+
|
|
9
|
+
## Cell catalog
|
|
10
|
+
|
|
11
|
+
apig_catalog.py combines static providers with a GDSFactory provider, normalizes cell metadata, and supports list/get/placement methods. The engine currently exposes the list_cells query; the generated API marks place_cell unwired, and get_cell is not a public engine query yet. Check the [generated API](../../docs/engine-api.md) before depending on a caller-facing operation.
|
|
12
|
+
|
|
13
|
+
## Readiness
|
|
14
|
+
|
|
15
|
+
Catalog metadata is distinct from verification. get_capabilities reports whether a tool, PDK, or deck is ready on the current machine and includes a remedy for blocked items. Registering a PDK or cell does not imply a design has passed its checks.
|
|
16
|
+
|
|
17
|
+
## Routing
|
|
18
|
+
|
|
19
|
+
- PDK bytes, profiles, and setup probes → [interfaces](../interfaces/README.md) and [provision plan](../../docs/provision-plan.md).
|
|
20
|
+
- Project component state and revisions → [project](../project/README.md).
|
|
21
|
+
- Adapter execution → [adapters](../adapters/README.md).
|
|
22
|
+
- Product PDK model → [PRD PDK abstraction](../../../PRD/tools-research/pdk-abstraction.md).
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""PDK registry, prepared-profile catalog, IP search/register/instantiate."""
|
|
2
|
+
|
|
3
|
+
from .apig_catalog import ApigCatalog, gdsfactory_provider, static_provider
|
|
4
|
+
from .catalog import Catalog
|
|
5
|
+
from .errors import LibraryError
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"ApigCatalog",
|
|
9
|
+
"Catalog",
|
|
10
|
+
"LibraryError",
|
|
11
|
+
"gdsfactory_provider",
|
|
12
|
+
"static_provider",
|
|
13
|
+
]
|