siliconcompiler 0.32.2__py3-none-any.whl → 0.33.0__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.
- siliconcompiler/__init__.py +19 -2
- siliconcompiler/_metadata.py +3 -2
- siliconcompiler/apps/sc.py +2 -2
- siliconcompiler/apps/sc_install.py +3 -3
- siliconcompiler/apps/sc_issue.py +1 -1
- siliconcompiler/apps/sc_remote.py +4 -4
- siliconcompiler/apps/sc_show.py +2 -2
- siliconcompiler/apps/utils/replay.py +5 -3
- siliconcompiler/asic.py +120 -0
- siliconcompiler/checklist.py +150 -0
- siliconcompiler/core.py +319 -345
- siliconcompiler/{templates → data/templates}/replay/replay.sh.j2 +2 -2
- siliconcompiler/flowgraph.py +803 -515
- siliconcompiler/fpga.py +84 -0
- siliconcompiler/metric.py +420 -0
- siliconcompiler/optimizer/vizier.py +2 -3
- siliconcompiler/package/__init__.py +29 -6
- siliconcompiler/pdk.py +415 -0
- siliconcompiler/record.py +449 -0
- siliconcompiler/remote/client.py +61 -19
- siliconcompiler/remote/schema.py +116 -112
- siliconcompiler/remote/server.py +3 -5
- siliconcompiler/report/__init__.py +3 -2
- siliconcompiler/report/dashboard/__init__.py +61 -170
- siliconcompiler/report/dashboard/cli/__init__.py +79 -0
- siliconcompiler/report/dashboard/cli/board.py +895 -0
- siliconcompiler/report/dashboard/web/__init__.py +196 -0
- siliconcompiler/report/dashboard/{components → web/components}/__init__.py +9 -8
- siliconcompiler/report/dashboard/{components → web/components}/flowgraph.py +3 -3
- siliconcompiler/report/dashboard/{components → web/components}/graph.py +7 -4
- siliconcompiler/report/dashboard/{layouts → web/layouts}/__init__.py +3 -3
- siliconcompiler/report/dashboard/{layouts → web/layouts}/_common.py +1 -1
- siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph.py +5 -5
- siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph_node_tab.py +6 -6
- siliconcompiler/report/dashboard/{layouts → web/layouts}/vertical_flowgraph_sac_tabs.py +6 -6
- siliconcompiler/report/dashboard/{state.py → web/state.py} +1 -1
- siliconcompiler/report/dashboard/{utils → web/utils}/__init__.py +4 -3
- siliconcompiler/report/dashboard/{viewer.py → web/viewer.py} +4 -4
- siliconcompiler/report/html_report.py +2 -3
- siliconcompiler/report/report.py +13 -7
- siliconcompiler/report/summary_image.py +1 -1
- siliconcompiler/report/summary_table.py +3 -3
- siliconcompiler/report/utils.py +11 -10
- siliconcompiler/scheduler/__init__.py +153 -286
- siliconcompiler/scheduler/run_node.py +2 -1
- siliconcompiler/scheduler/send_messages.py +4 -4
- siliconcompiler/scheduler/slurm.py +2 -2
- siliconcompiler/schema/__init__.py +19 -2
- siliconcompiler/schema/baseschema.py +493 -0
- siliconcompiler/schema/cmdlineschema.py +250 -0
- siliconcompiler/{sphinx_ext → schema/docs}/__init__.py +3 -1
- siliconcompiler/{sphinx_ext → schema/docs}/dynamicgen.py +63 -81
- siliconcompiler/{sphinx_ext → schema/docs}/schemagen.py +73 -85
- siliconcompiler/{sphinx_ext → schema/docs}/utils.py +12 -13
- siliconcompiler/schema/editableschema.py +136 -0
- siliconcompiler/schema/journalingschema.py +238 -0
- siliconcompiler/schema/namedschema.py +41 -0
- siliconcompiler/schema/packageschema.py +101 -0
- siliconcompiler/schema/parameter.py +791 -0
- siliconcompiler/schema/parametertype.py +323 -0
- siliconcompiler/schema/parametervalue.py +736 -0
- siliconcompiler/schema/safeschema.py +37 -0
- siliconcompiler/schema/schema_cfg.py +109 -1789
- siliconcompiler/schema/utils.py +5 -68
- siliconcompiler/schema_obj.py +119 -0
- siliconcompiler/tool.py +1308 -0
- siliconcompiler/tools/_common/__init__.py +8 -10
- siliconcompiler/tools/_common/sdc/sc_constraints.sdc +1 -1
- siliconcompiler/tools/bluespec/convert.py +7 -7
- siliconcompiler/tools/builtin/_common.py +1 -1
- siliconcompiler/tools/builtin/concatenate.py +2 -2
- siliconcompiler/tools/builtin/minimum.py +1 -1
- siliconcompiler/tools/builtin/mux.py +2 -1
- siliconcompiler/tools/builtin/nop.py +1 -1
- siliconcompiler/tools/builtin/verify.py +6 -4
- siliconcompiler/tools/chisel/convert.py +4 -4
- siliconcompiler/tools/genfasm/bitstream.py +3 -3
- siliconcompiler/tools/ghdl/convert.py +1 -1
- siliconcompiler/tools/icarus/compile.py +4 -4
- siliconcompiler/tools/icepack/bitstream.py +6 -1
- siliconcompiler/tools/klayout/convert_drc_db.py +5 -0
- siliconcompiler/tools/klayout/klayout_export.py +0 -1
- siliconcompiler/tools/klayout/klayout_utils.py +3 -10
- siliconcompiler/tools/nextpnr/apr.py +6 -1
- siliconcompiler/tools/nextpnr/nextpnr.py +4 -4
- siliconcompiler/tools/openroad/_apr.py +17 -0
- siliconcompiler/tools/openroad/fillmetal_insertion.py +14 -14
- siliconcompiler/tools/openroad/rdlroute.py +3 -3
- siliconcompiler/tools/openroad/scripts/apr/postamble.tcl +1 -1
- siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +5 -5
- siliconcompiler/tools/openroad/scripts/apr/sc_antenna_repair.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_clock_tree_synthesis.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_placement.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_endcap_tapcell_insertion.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_fillercell_insertion.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_fillmetal_insertion.tcl +4 -4
- siliconcompiler/tools/openroad/scripts/apr/sc_global_placement.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_macro_placement.tcl +4 -4
- siliconcompiler/tools/openroad/scripts/apr/sc_metrics.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_pin_placement.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_power_grid.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_design.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/apr/sc_repair_timing.tcl +4 -4
- siliconcompiler/tools/openroad/scripts/apr/sc_write_data.tcl +3 -3
- siliconcompiler/tools/openroad/scripts/common/procs.tcl +58 -2
- siliconcompiler/tools/openroad/scripts/common/reports.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/screenshot.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/common/write_images.tcl +28 -3
- siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +2 -2
- siliconcompiler/tools/openroad/scripts/sc_rdlroute.tcl +4 -4
- siliconcompiler/tools/openroad/scripts/sc_show.tcl +7 -7
- siliconcompiler/tools/opensta/__init__.py +1 -1
- siliconcompiler/tools/opensta/scripts/sc_check_library.tcl +1 -1
- siliconcompiler/tools/opensta/scripts/sc_procs.tcl +16 -0
- siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +1 -1
- siliconcompiler/tools/opensta/scripts/sc_timing.tcl +35 -7
- siliconcompiler/tools/opensta/timing.py +6 -2
- siliconcompiler/tools/slang/__init__.py +10 -10
- siliconcompiler/tools/surelog/parse.py +4 -4
- siliconcompiler/tools/sv2v/convert.py +20 -3
- siliconcompiler/tools/verilator/compile.py +2 -2
- siliconcompiler/tools/verilator/verilator.py +3 -3
- siliconcompiler/tools/vpr/place.py +1 -1
- siliconcompiler/tools/vpr/route.py +4 -4
- siliconcompiler/tools/vpr/screenshot.py +1 -1
- siliconcompiler/tools/vpr/show.py +5 -5
- siliconcompiler/tools/vpr/vpr.py +24 -24
- siliconcompiler/tools/xdm/convert.py +2 -2
- siliconcompiler/tools/xyce/simulate.py +1 -1
- siliconcompiler/tools/yosys/sc_synth_asic.tcl +104 -90
- siliconcompiler/tools/yosys/syn_asic.py +13 -4
- siliconcompiler/toolscripts/_tools.json +12 -7
- siliconcompiler/toolscripts/rhel8/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/rhel8/install-icarus.sh +1 -0
- siliconcompiler/toolscripts/rhel8/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/rhel8/install-magic.sh +1 -2
- siliconcompiler/toolscripts/rhel8/install-netgen.sh +1 -1
- siliconcompiler/toolscripts/rhel8/install-slang.sh +2 -0
- siliconcompiler/toolscripts/rhel8/install-surelog.sh +3 -1
- siliconcompiler/toolscripts/rhel8/install-sv2v.sh +1 -0
- siliconcompiler/toolscripts/rhel8/install-verible.sh +2 -0
- siliconcompiler/toolscripts/rhel8/install-verilator.sh +1 -0
- siliconcompiler/toolscripts/rhel8/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-ghdl.sh +1 -0
- siliconcompiler/toolscripts/rhel9/install-gtkwave.sh +1 -0
- siliconcompiler/toolscripts/rhel9/install-icarus.sh +1 -0
- siliconcompiler/toolscripts/rhel9/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-magic.sh +1 -2
- siliconcompiler/toolscripts/rhel9/install-netgen.sh +1 -1
- siliconcompiler/toolscripts/rhel9/install-openroad.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-opensta.sh +76 -0
- siliconcompiler/toolscripts/rhel9/install-slang.sh +3 -1
- siliconcompiler/toolscripts/rhel9/install-surelog.sh +2 -1
- siliconcompiler/toolscripts/rhel9/install-sv2v.sh +1 -0
- siliconcompiler/toolscripts/rhel9/install-verible.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-verilator.sh +1 -0
- siliconcompiler/toolscripts/rhel9/install-vpr.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-xdm.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-yosys-moosic.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-yosys-parmys.sh +2 -0
- siliconcompiler/toolscripts/rhel9/install-yosys-slang.sh +3 -1
- siliconcompiler/toolscripts/rhel9/install-yosys.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-bambu.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-bluespec.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-ghdl.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-gtkwave.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-icarus.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-icepack.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-magic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-netgen.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-nextpnr.sh +1 -3
- siliconcompiler/toolscripts/ubuntu20/install-openroad.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-opensta.sh +72 -0
- siliconcompiler/toolscripts/ubuntu20/install-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu20/install-slurm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-surelog.sh +3 -1
- siliconcompiler/toolscripts/ubuntu20/install-sv2v.sh +1 -1
- siliconcompiler/toolscripts/ubuntu20/install-verible.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-verilator.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-xdm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-yosys-moosic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu20/install-yosys.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-bambu.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-bluespec.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-ghdl.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-gtkwave.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-icarus.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-icepack.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-magic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-netgen.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-nextpnr.sh +1 -2
- siliconcompiler/toolscripts/ubuntu22/install-openroad.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-opensta.sh +72 -0
- siliconcompiler/toolscripts/ubuntu22/install-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu22/install-slurm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-surelog.sh +3 -1
- siliconcompiler/toolscripts/ubuntu22/install-sv2v.sh +1 -1
- siliconcompiler/toolscripts/ubuntu22/install-verible.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-verilator.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-vpr.sh +2 -2
- siliconcompiler/toolscripts/ubuntu22/install-xdm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-yosys-moosic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-yosys-parmys.sh +2 -0
- siliconcompiler/toolscripts/ubuntu22/install-yosys-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu22/install-yosys.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-bambu.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-bluespec.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-chisel.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-ghdl.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-gtkwave.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-icarus.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-icepack.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-klayout.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-magic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-netgen.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-nextpnr.sh +1 -3
- siliconcompiler/toolscripts/ubuntu24/install-openroad.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-opensta.sh +72 -0
- siliconcompiler/toolscripts/ubuntu24/install-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu24/install-slurm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-surelog.sh +3 -1
- siliconcompiler/toolscripts/ubuntu24/install-sv2v.sh +1 -1
- siliconcompiler/toolscripts/ubuntu24/install-verible.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-verilator.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-vpr.sh +2 -2
- siliconcompiler/toolscripts/ubuntu24/install-xdm.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-xyce.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-yosys-moosic.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-yosys-parmys.sh +2 -0
- siliconcompiler/toolscripts/ubuntu24/install-yosys-slang.sh +3 -1
- siliconcompiler/toolscripts/ubuntu24/install-yosys.sh +2 -0
- siliconcompiler/utils/__init__.py +8 -112
- siliconcompiler/utils/flowgraph.py +339 -0
- siliconcompiler/{issue.py → utils/issue.py} +7 -4
- siliconcompiler/utils/logging.py +86 -33
- {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/METADATA +10 -8
- siliconcompiler-0.33.0.dist-info/RECORD +487 -0
- {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/WHEEL +1 -1
- {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/entry_points.txt +8 -8
- siliconcompiler/schema/schema_obj.py +0 -1936
- siliconcompiler/toolscripts/ubuntu20/install-vpr.sh +0 -27
- siliconcompiler/toolscripts/ubuntu20/install-yosys-parmys.sh +0 -59
- siliconcompiler-0.32.2.dist-info/RECORD +0 -464
- /siliconcompiler/{templates → data/templates}/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/email/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/email/general.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/email/summary.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/issue/README.txt +0 -0
- /siliconcompiler/{templates → data/templates}/issue/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/issue/run.sh +0 -0
- /siliconcompiler/{templates → data/templates}/replay/replay.py.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/replay/requirements.txt +0 -0
- /siliconcompiler/{templates → data/templates}/replay/setup.sh +0 -0
- /siliconcompiler/{templates → data/templates}/report/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap.min.css +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap.min.js +0 -0
- /siliconcompiler/{templates → data/templates}/report/bootstrap_LICENSE.md +0 -0
- /siliconcompiler/{templates → data/templates}/report/sc_report.j2 +0 -0
- /siliconcompiler/{templates → data/templates}/slurm/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/slurm/run.sh +0 -0
- /siliconcompiler/{templates → data/templates}/tcl/__init__.py +0 -0
- /siliconcompiler/{templates → data/templates}/tcl/manifest.tcl.j2 +0 -0
- /siliconcompiler/report/dashboard/{utils → web/utils}/file_utils.py +0 -0
- /siliconcompiler/{units.py → utils/units.py} +0 -0
- {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/licenses/LICENSE +0 -0
- {siliconcompiler-0.32.2.dist-info → siliconcompiler-0.33.0.dist-info}/top_level.txt +0 -0
siliconcompiler/remote/schema.py
CHANGED
|
@@ -1,117 +1,121 @@
|
|
|
1
|
-
from siliconcompiler.schema
|
|
2
|
-
from siliconcompiler.schema import
|
|
3
|
-
from siliconcompiler.schema
|
|
1
|
+
from siliconcompiler.schema import BaseSchema
|
|
2
|
+
from siliconcompiler.schema import CommandLineSchema
|
|
3
|
+
from siliconcompiler.schema import EditableSchema
|
|
4
|
+
from siliconcompiler.schema import Parameter, Scope
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
SCHEMA_VERSION = '0.0.2'
|
|
7
8
|
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
10
|
+
class ServerSchema(BaseSchema, CommandLineSchema):
|
|
11
|
+
def __init__(self):
|
|
12
|
+
super().__init__()
|
|
13
|
+
|
|
14
|
+
schema = EditableSchema(self)
|
|
15
|
+
|
|
16
|
+
schema.insert(
|
|
17
|
+
'schemaversion',
|
|
18
|
+
Parameter(
|
|
19
|
+
'str',
|
|
20
|
+
scope=Scope.GLOBAL,
|
|
21
|
+
defvalue=SCHEMA_VERSION,
|
|
22
|
+
require='all',
|
|
23
|
+
shorthelp="Schema version number",
|
|
24
|
+
lock=True,
|
|
25
|
+
switch="-schemaversion <str>",
|
|
26
|
+
example=["api: server.get('schemaversion')"],
|
|
27
|
+
help="""SiliconCompiler server schema version number."""))
|
|
28
|
+
|
|
29
|
+
schema.insert(
|
|
30
|
+
'option', 'port',
|
|
31
|
+
Parameter(
|
|
32
|
+
'int',
|
|
33
|
+
scope=Scope.GLOBAL,
|
|
34
|
+
defvalue=8080,
|
|
35
|
+
require='all',
|
|
36
|
+
shorthelp="Port number to run the server on.",
|
|
37
|
+
switch="-port <int>",
|
|
38
|
+
example=["cli: -port 8000",
|
|
39
|
+
"api: server.set('option', 'port', 8080)"],
|
|
40
|
+
help="""Port number to run the server on."""))
|
|
41
|
+
|
|
42
|
+
schema.insert(
|
|
43
|
+
'option', 'cluster',
|
|
44
|
+
Parameter(
|
|
45
|
+
'<local,slurm>',
|
|
46
|
+
scope=Scope.GLOBAL,
|
|
47
|
+
defvalue='local',
|
|
48
|
+
require='all',
|
|
49
|
+
shorthelp="Type of compute cluster to use.",
|
|
50
|
+
switch="-cluster <str>",
|
|
51
|
+
example=["cli: -cluster slurm",
|
|
52
|
+
"api: server.set('option', 'clister', 'slurm')"],
|
|
53
|
+
help="""Type of compute cluster to use."""))
|
|
54
|
+
|
|
55
|
+
schema.insert(
|
|
56
|
+
'option', 'nfsmount',
|
|
57
|
+
Parameter(
|
|
58
|
+
'dir',
|
|
59
|
+
scope=Scope.GLOBAL,
|
|
60
|
+
defvalue='/nfs/sc_compute',
|
|
61
|
+
require='all',
|
|
62
|
+
shorthelp="Directory of mounted shared NFS storage.",
|
|
63
|
+
switch="-nfsmount <dir>",
|
|
64
|
+
example=["cli: -nfsmount ~/sc_server",
|
|
65
|
+
"api: server.set('option', 'server', '~/sc_server')"],
|
|
66
|
+
help="""Directory of mounted shared NFS storage."""))
|
|
67
|
+
|
|
68
|
+
schema.insert(
|
|
69
|
+
'option', 'auth',
|
|
70
|
+
Parameter(
|
|
71
|
+
'bool',
|
|
72
|
+
scope=Scope.GLOBAL,
|
|
73
|
+
defvalue=False,
|
|
74
|
+
require='all',
|
|
75
|
+
shorthelp="Flag determining whether to enable authenticated and encrypted jobs.",
|
|
76
|
+
switch="-auth <bool>",
|
|
77
|
+
example=["cli: -auth true",
|
|
78
|
+
"api: server.set('option', 'auth', True)"],
|
|
79
|
+
help="""Flag determining whether to enable authenticated and encrypted jobs."""))
|
|
80
|
+
|
|
81
|
+
schema.insert(
|
|
82
|
+
'option', 'cfg',
|
|
83
|
+
Parameter(
|
|
84
|
+
'[file]',
|
|
85
|
+
scope=Scope.JOB,
|
|
86
|
+
shorthelp="Configuration manifest",
|
|
87
|
+
switch="-cfg <file>",
|
|
88
|
+
example=["cli: -cfg mypdk.json",
|
|
89
|
+
"api: chip.set('option', 'cfg', 'mypdk.json')"],
|
|
90
|
+
help="""
|
|
91
|
+
List of filepaths to JSON formatted schema configuration
|
|
92
|
+
manifests. The files are read in automatically when using the
|
|
93
|
+
command line application. In Python programs, JSON manifests
|
|
94
|
+
can be merged into the current working manifest using the
|
|
95
|
+
read_manifest() method."""))
|
|
96
|
+
|
|
97
|
+
schema.insert(
|
|
98
|
+
'option', 'loglevel',
|
|
99
|
+
Parameter(
|
|
100
|
+
'<info,warning,error,critical,debug>',
|
|
101
|
+
scope=Scope.JOB,
|
|
102
|
+
defvalue='info',
|
|
103
|
+
shorthelp="Logging level",
|
|
104
|
+
switch="-loglevel <str>",
|
|
105
|
+
example=[
|
|
106
|
+
"cli: -loglevel info",
|
|
107
|
+
"api: server.set('option', 'loglevel', 'info')"],
|
|
108
|
+
help="""
|
|
109
|
+
Provides explicit control over the level of debug logging printed."""))
|
|
110
|
+
|
|
111
|
+
schema.insert(
|
|
112
|
+
'option', 'checkinterval',
|
|
113
|
+
Parameter(
|
|
114
|
+
'int',
|
|
115
|
+
defvalue=30,
|
|
116
|
+
shorthelp="Interval for client",
|
|
117
|
+
switch="-checkinterval <int>",
|
|
118
|
+
example=["cli: -checkinterval 10",
|
|
119
|
+
"api: chip.set('option', 'checkinterval', 10)"],
|
|
120
|
+
help="""
|
|
121
|
+
Interval between checks to announce to clients"""))
|
siliconcompiler/remote/server.py
CHANGED
|
@@ -21,7 +21,7 @@ from siliconcompiler.schema import SCHEMA_VERSION as sc_schema_version
|
|
|
21
21
|
from siliconcompiler.remote.schema import ServerSchema
|
|
22
22
|
from siliconcompiler.remote import banner, JobStatus
|
|
23
23
|
from siliconcompiler.scheduler.slurm import get_configuration_directory
|
|
24
|
-
from siliconcompiler.flowgraph import nodes_to_execute
|
|
24
|
+
from siliconcompiler.utils.flowgraph import nodes_to_execute
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# Compile validation code for API request bodies.
|
|
@@ -78,7 +78,7 @@ class Server:
|
|
|
78
78
|
self.logger.addHandler(handler)
|
|
79
79
|
self.logger.setLevel(schema_utils.translate_loglevel(loglevel))
|
|
80
80
|
|
|
81
|
-
self.schema = ServerSchema(
|
|
81
|
+
self.schema = ServerSchema()
|
|
82
82
|
|
|
83
83
|
# Set up a dictionary to track running jobs.
|
|
84
84
|
self.sc_jobs = {}
|
|
@@ -146,7 +146,6 @@ class Server:
|
|
|
146
146
|
progname=progname,
|
|
147
147
|
description=description,
|
|
148
148
|
switchlist=switchlist,
|
|
149
|
-
input_map=None,
|
|
150
149
|
additional_args=additional_args,
|
|
151
150
|
version=Server.__version__,
|
|
152
151
|
print_banner=print_banner,
|
|
@@ -508,5 +507,4 @@ class Server:
|
|
|
508
507
|
self.schema.set(*keypath, value, field=field, clobber=clobber)
|
|
509
508
|
|
|
510
509
|
def write_configuration(self, filepath):
|
|
511
|
-
|
|
512
|
-
self.schema.write_json(f)
|
|
510
|
+
self.schema.write_manifest(filepath)
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from .summary_image import _generate_summary_image, _open_summary_image
|
|
2
2
|
from .html_report import _generate_html_report, _open_html_report
|
|
3
3
|
from .summary_table import _show_summary_table
|
|
4
|
-
from .dashboard import
|
|
4
|
+
from .dashboard.web import WebDashboard
|
|
5
|
+
# from .dashboard import Dashboard
|
|
5
6
|
|
|
6
7
|
__all__ = [
|
|
7
8
|
"_generate_summary_image",
|
|
@@ -9,5 +10,5 @@ __all__ = [
|
|
|
9
10
|
"_generate_html_report",
|
|
10
11
|
"_open_html_report",
|
|
11
12
|
"_show_summary_table",
|
|
12
|
-
"
|
|
13
|
+
"WebDashboard"
|
|
13
14
|
]
|
|
@@ -1,190 +1,81 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import tempfile
|
|
4
|
-
import json
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from enum import Enum
|
|
5
3
|
|
|
6
|
-
import multiprocessing
|
|
7
|
-
import subprocess
|
|
8
|
-
import atexit
|
|
9
|
-
import shutil
|
|
10
|
-
import fasteners
|
|
11
|
-
import signal
|
|
12
|
-
import socketserver
|
|
13
4
|
|
|
14
|
-
|
|
5
|
+
class DashboardType(Enum):
|
|
6
|
+
WEB = 'web'
|
|
7
|
+
CLI = 'cli'
|
|
15
8
|
|
|
16
|
-
try:
|
|
17
|
-
from streamlit.web import bootstrap
|
|
18
|
-
from streamlit import config as _config
|
|
19
|
-
except ModuleNotFoundError:
|
|
20
|
-
bootstrap = None
|
|
21
|
-
_config = None
|
|
22
9
|
|
|
10
|
+
class AbstractDashboard(ABC):
|
|
11
|
+
"""
|
|
12
|
+
Abstract base class defining the interface for dashboard implementations.
|
|
13
|
+
Any concrete dashboard implementation should inherit from this class and
|
|
14
|
+
implement all abstract methods.
|
|
15
|
+
"""
|
|
23
16
|
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
@abstractmethod
|
|
18
|
+
def __init__(self, chip):
|
|
19
|
+
"""
|
|
20
|
+
Initialize the dashboard.
|
|
26
21
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def __init__(self, chip, port=None, graph_chips=None):
|
|
33
|
-
if not bootstrap:
|
|
34
|
-
raise NotImplementedError('streamlit is not available')
|
|
35
|
-
|
|
36
|
-
if not port:
|
|
37
|
-
port = Dashboard.get_next_port()
|
|
38
|
-
if not port:
|
|
39
|
-
port = Dashboard.__port
|
|
40
|
-
|
|
41
|
-
self.__dashboard = None
|
|
42
|
-
self.__chip = chip
|
|
43
|
-
self.__directory = tempfile.mkdtemp(prefix='sc_dashboard_',
|
|
44
|
-
suffix=f'_{self.__chip.design}')
|
|
45
|
-
self.__manifest = os.path.join(self.__directory, 'manifest.json')
|
|
46
|
-
self.__manifest_lock = os.path.join(self.__directory, 'manifest.lock')
|
|
47
|
-
self.__port = port
|
|
48
|
-
dirname = os.path.dirname(__file__)
|
|
49
|
-
self.__streamlit_file = os.path.join(dirname, 'viewer.py')
|
|
50
|
-
|
|
51
|
-
self.__streamlit_args = [
|
|
52
|
-
("browser.gatherUsageStats", False),
|
|
53
|
-
("browser.serverPort", self.__port),
|
|
54
|
-
("logger.level", 'error'),
|
|
55
|
-
("runner.fastReruns", True),
|
|
56
|
-
("server.port", self.__port),
|
|
57
|
-
("client.toolbarMode", "viewer")
|
|
58
|
-
]
|
|
59
|
-
|
|
60
|
-
# pass in a json object called __graph_chips
|
|
61
|
-
# the key is the chip_name and value is the filepath
|
|
62
|
-
# if another argument is passed
|
|
63
|
-
|
|
64
|
-
# use of list is to preserve order
|
|
65
|
-
self.__graph_chips = []
|
|
66
|
-
graph_chips_config = []
|
|
67
|
-
if graph_chips:
|
|
68
|
-
for chip_object_and_name in graph_chips:
|
|
69
|
-
chip_file_path = \
|
|
70
|
-
os.path.join(self.__directory,
|
|
71
|
-
f"{chip_object_and_name['name']}.json")
|
|
72
|
-
self.__graph_chips.append({
|
|
73
|
-
'chip': chip_object_and_name['chip'],
|
|
74
|
-
'name': chip_file_path
|
|
75
|
-
})
|
|
76
|
-
graph_chips_config.append({
|
|
77
|
-
"path": chip_file_path,
|
|
78
|
-
"cwd": utils.get_chip_cwd(
|
|
79
|
-
chip_object_and_name['chip'],
|
|
80
|
-
chip_object_and_name['cfg_path'])
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
self.__config = {
|
|
84
|
-
"manifest": self.__manifest,
|
|
85
|
-
"lock": self.__manifest_lock,
|
|
86
|
-
"graph_chips": graph_chips_config
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
self.__sleep_time = 0.5
|
|
90
|
-
self.__signal_handler = None
|
|
91
|
-
|
|
92
|
-
self.__lock = fasteners.InterProcessLock(self.__manifest_lock)
|
|
93
|
-
|
|
94
|
-
atexit.register(self.__cleanup)
|
|
22
|
+
Args:
|
|
23
|
+
chip: The chip object to display in the dashboard
|
|
24
|
+
"""
|
|
25
|
+
self._chip = chip
|
|
95
26
|
|
|
27
|
+
@abstractmethod
|
|
96
28
|
def open_dashboard(self):
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
self.update_graph_manifests()
|
|
103
|
-
|
|
104
|
-
self.__dashboard = multiprocessing.Process(
|
|
105
|
-
target=self._run_streamlit_bootstrap)
|
|
106
|
-
|
|
107
|
-
self.__signal_handler = signal.signal(signal.SIGINT, Dashboard.__signal_handler)
|
|
108
|
-
|
|
109
|
-
self.__dashboard.start()
|
|
110
|
-
|
|
111
|
-
def update_manifest(self):
|
|
112
|
-
if not self.__manifest:
|
|
113
|
-
return
|
|
29
|
+
"""
|
|
30
|
+
Open and start the dashboard service.
|
|
31
|
+
"""
|
|
32
|
+
pass
|
|
114
33
|
|
|
115
|
-
|
|
116
|
-
|
|
34
|
+
@abstractmethod
|
|
35
|
+
def update_manifest(self, payload=None):
|
|
36
|
+
"""
|
|
37
|
+
Update the manifest file with the latest chip information.
|
|
117
38
|
|
|
118
|
-
|
|
119
|
-
|
|
39
|
+
Args:
|
|
40
|
+
payload (dict): Dictionary of metadata to pass along to dashboard.
|
|
41
|
+
{"starttimes" {<node>: time, ...}}
|
|
42
|
+
"""
|
|
43
|
+
pass
|
|
120
44
|
|
|
45
|
+
@abstractmethod
|
|
121
46
|
def update_graph_manifests(self):
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def __get_config_file(self):
|
|
128
|
-
return os.path.join(self.__directory, 'config.json')
|
|
47
|
+
"""
|
|
48
|
+
Update the manifest files for all graph chips.
|
|
49
|
+
"""
|
|
50
|
+
pass
|
|
129
51
|
|
|
52
|
+
@abstractmethod
|
|
130
53
|
def is_running(self):
|
|
131
|
-
|
|
132
|
-
|
|
54
|
+
"""
|
|
55
|
+
Check if the dashboard is currently running.
|
|
133
56
|
|
|
134
|
-
|
|
135
|
-
|
|
57
|
+
Returns:
|
|
58
|
+
bool: True if the dashboard is running, False otherwise
|
|
59
|
+
"""
|
|
60
|
+
pass
|
|
136
61
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
62
|
+
@abstractmethod
|
|
63
|
+
def end_of_run(self):
|
|
64
|
+
"""
|
|
65
|
+
Announce that a run has completed
|
|
66
|
+
"""
|
|
67
|
+
pass
|
|
140
68
|
|
|
69
|
+
@abstractmethod
|
|
141
70
|
def stop(self):
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
self.__dashboard.terminate()
|
|
147
|
-
self._sleep()
|
|
148
|
-
|
|
149
|
-
if self.__signal_handler:
|
|
150
|
-
signal.signal(signal.SIGINT, self.__signal_handler)
|
|
151
|
-
|
|
152
|
-
self.__dashboard = None
|
|
153
|
-
self.__manifest = None
|
|
154
|
-
self.__signal_handler = None
|
|
71
|
+
"""
|
|
72
|
+
Stop the dashboard service if it's running.
|
|
73
|
+
"""
|
|
74
|
+
pass
|
|
155
75
|
|
|
76
|
+
@abstractmethod
|
|
156
77
|
def wait(self):
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
def _run_streamlit_bootstrap(self):
|
|
163
|
-
for config, val in self.__streamlit_args:
|
|
164
|
-
_config.set_option(config, val)
|
|
165
|
-
|
|
166
|
-
bootstrap.run(self.__streamlit_file,
|
|
167
|
-
False,
|
|
168
|
-
[self.__get_config_file()],
|
|
169
|
-
flag_options={})
|
|
170
|
-
|
|
171
|
-
def __run_streamlit_subproc(self):
|
|
172
|
-
cmd = ['streamlit', 'run',
|
|
173
|
-
self.__streamlit_file, self.__get_config_file()]
|
|
174
|
-
for config, val in self.__streamlit_args:
|
|
175
|
-
cmd.append(f'--{config}')
|
|
176
|
-
cmd.append(val)
|
|
177
|
-
|
|
178
|
-
subprocess.Popen(cmd)
|
|
179
|
-
|
|
180
|
-
def __cleanup(self):
|
|
181
|
-
self.stop()
|
|
182
|
-
|
|
183
|
-
if os.path.exists(self.__directory):
|
|
184
|
-
shutil.rmtree(self.__directory)
|
|
185
|
-
|
|
186
|
-
@staticmethod
|
|
187
|
-
def get_next_port():
|
|
188
|
-
with socketserver.TCPServer(("localhost", 0), None) as s:
|
|
189
|
-
return s.server_address[1]
|
|
190
|
-
return None
|
|
78
|
+
"""
|
|
79
|
+
Wait for the dashboard service to terminate.
|
|
80
|
+
"""
|
|
81
|
+
pass
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
from siliconcompiler.report.dashboard import AbstractDashboard
|
|
2
|
+
from siliconcompiler.report.dashboard.cli.board import Board
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class CliDashboard(AbstractDashboard):
|
|
6
|
+
|
|
7
|
+
def __init__(self, chip):
|
|
8
|
+
super().__init__(chip)
|
|
9
|
+
|
|
10
|
+
self._dashboard = Board()
|
|
11
|
+
|
|
12
|
+
self.__logger_console = None
|
|
13
|
+
|
|
14
|
+
self._logger = chip.logger
|
|
15
|
+
|
|
16
|
+
def set_logger(self, logger):
|
|
17
|
+
"""
|
|
18
|
+
Sets the logger for the dashboard.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
logger (logging.Logger): The logger to set.
|
|
22
|
+
"""
|
|
23
|
+
self._logger = logger
|
|
24
|
+
if self._logger and self._dashboard._active:
|
|
25
|
+
# Hijack the console
|
|
26
|
+
self._logger.removeHandler(self._chip.logger._console)
|
|
27
|
+
self.__logger_console = self._chip.logger._console
|
|
28
|
+
self._chip.logger._console = self._dashboard._log_handler
|
|
29
|
+
self._logger.addHandler(self._dashboard._log_handler)
|
|
30
|
+
self._chip._init_logger_formats()
|
|
31
|
+
|
|
32
|
+
def open_dashboard(self):
|
|
33
|
+
"""Starts the dashboard rendering thread if it is not already running."""
|
|
34
|
+
|
|
35
|
+
self.set_logger(self._logger)
|
|
36
|
+
|
|
37
|
+
self._dashboard.open_dashboard()
|
|
38
|
+
|
|
39
|
+
def update_manifest(self, payload=None):
|
|
40
|
+
"""
|
|
41
|
+
Updates the manifest file with the latest data from the chip object.
|
|
42
|
+
This ensures that the dashboard reflects the current state of the chip.
|
|
43
|
+
"""
|
|
44
|
+
starttimes = None
|
|
45
|
+
if payload and "starttimes" in payload:
|
|
46
|
+
starttimes = payload["starttimes"]
|
|
47
|
+
self._dashboard.update_manifest(self._chip, starttimes=starttimes)
|
|
48
|
+
|
|
49
|
+
def update_graph_manifests(self):
|
|
50
|
+
"""Placeholder method for updating graph manifests. Currently not implemented."""
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
def is_running(self):
|
|
54
|
+
"""Returns True to indicate that the dashboard is running."""
|
|
55
|
+
return self._dashboard.is_running()
|
|
56
|
+
|
|
57
|
+
def end_of_run(self):
|
|
58
|
+
"""
|
|
59
|
+
Stops the dashboard rendering thread and ensures all rendering operations are completed.
|
|
60
|
+
"""
|
|
61
|
+
self._dashboard.end_of_run(self._chip)
|
|
62
|
+
|
|
63
|
+
def stop(self):
|
|
64
|
+
"""
|
|
65
|
+
Stops the dashboard rendering thread and ensures all rendering operations are completed.
|
|
66
|
+
"""
|
|
67
|
+
self._dashboard.end_of_run(self._chip)
|
|
68
|
+
|
|
69
|
+
# Restore logger
|
|
70
|
+
if self.__logger_console:
|
|
71
|
+
self._logger.removeHandler(self._dashboard._log_handler)
|
|
72
|
+
self._chip.logger._console = self.__logger_console
|
|
73
|
+
self._logger.addHandler(self.__logger_console)
|
|
74
|
+
self._chip._init_logger_formats()
|
|
75
|
+
self.__logger_console = None
|
|
76
|
+
|
|
77
|
+
def wait(self):
|
|
78
|
+
"""Waits for the dashboard rendering thread to finish."""
|
|
79
|
+
self._dashboard.wait()
|