siliconcompiler 0.26.5__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 +24 -0
- siliconcompiler/__main__.py +12 -0
- siliconcompiler/_common.py +49 -0
- siliconcompiler/_metadata.py +36 -0
- siliconcompiler/apps/__init__.py +0 -0
- siliconcompiler/apps/_common.py +76 -0
- siliconcompiler/apps/sc.py +92 -0
- siliconcompiler/apps/sc_dashboard.py +94 -0
- siliconcompiler/apps/sc_issue.py +178 -0
- siliconcompiler/apps/sc_remote.py +199 -0
- siliconcompiler/apps/sc_server.py +39 -0
- siliconcompiler/apps/sc_show.py +142 -0
- siliconcompiler/apps/smake.py +232 -0
- siliconcompiler/checklists/__init__.py +0 -0
- siliconcompiler/checklists/oh_tapeout.py +41 -0
- siliconcompiler/core.py +3221 -0
- siliconcompiler/data/RobotoMono/LICENSE.txt +202 -0
- siliconcompiler/data/RobotoMono/RobotoMono-Regular.ttf +0 -0
- siliconcompiler/data/heartbeat.v +18 -0
- siliconcompiler/data/logo.png +0 -0
- siliconcompiler/flowgraph.py +570 -0
- siliconcompiler/flows/__init__.py +0 -0
- siliconcompiler/flows/_common.py +67 -0
- siliconcompiler/flows/asicflow.py +180 -0
- siliconcompiler/flows/asictopflow.py +38 -0
- siliconcompiler/flows/dvflow.py +86 -0
- siliconcompiler/flows/fpgaflow.py +202 -0
- siliconcompiler/flows/generate_openroad_rcx.py +66 -0
- siliconcompiler/flows/lintflow.py +35 -0
- siliconcompiler/flows/screenshotflow.py +51 -0
- siliconcompiler/flows/showflow.py +59 -0
- siliconcompiler/flows/signoffflow.py +53 -0
- siliconcompiler/flows/synflow.py +128 -0
- siliconcompiler/fpgas/__init__.py +0 -0
- siliconcompiler/fpgas/lattice_ice40.py +42 -0
- siliconcompiler/fpgas/vpr_example.py +109 -0
- siliconcompiler/issue.py +300 -0
- siliconcompiler/libs/__init__.py +0 -0
- siliconcompiler/libs/asap7sc7p5t.py +8 -0
- siliconcompiler/libs/gf180mcu.py +8 -0
- siliconcompiler/libs/nangate45.py +8 -0
- siliconcompiler/libs/sky130hd.py +8 -0
- siliconcompiler/libs/sky130io.py +8 -0
- siliconcompiler/package.py +412 -0
- siliconcompiler/pdks/__init__.py +0 -0
- siliconcompiler/pdks/asap7.py +8 -0
- siliconcompiler/pdks/freepdk45.py +8 -0
- siliconcompiler/pdks/gf180.py +8 -0
- siliconcompiler/pdks/skywater130.py +8 -0
- siliconcompiler/remote/__init__.py +36 -0
- siliconcompiler/remote/client.py +891 -0
- siliconcompiler/remote/schema.py +106 -0
- siliconcompiler/remote/server.py +507 -0
- siliconcompiler/remote/server_schema/requests/cancel_job.json +51 -0
- siliconcompiler/remote/server_schema/requests/check_progress.json +61 -0
- siliconcompiler/remote/server_schema/requests/check_server.json +38 -0
- siliconcompiler/remote/server_schema/requests/delete_job.json +51 -0
- siliconcompiler/remote/server_schema/requests/get_results.json +48 -0
- siliconcompiler/remote/server_schema/requests/remote_run.json +40 -0
- siliconcompiler/remote/server_schema/responses/cancel_job.json +18 -0
- siliconcompiler/remote/server_schema/responses/check_progress.json +30 -0
- siliconcompiler/remote/server_schema/responses/check_server.json +32 -0
- siliconcompiler/remote/server_schema/responses/delete_job.json +18 -0
- siliconcompiler/remote/server_schema/responses/get_results.json +21 -0
- siliconcompiler/remote/server_schema/responses/remote_run.json +25 -0
- siliconcompiler/report/__init__.py +13 -0
- siliconcompiler/report/html_report.py +74 -0
- siliconcompiler/report/report.py +355 -0
- siliconcompiler/report/streamlit_report.py +137 -0
- siliconcompiler/report/streamlit_viewer.py +944 -0
- siliconcompiler/report/summary_image.py +117 -0
- siliconcompiler/report/summary_table.py +105 -0
- siliconcompiler/report/utils.py +163 -0
- siliconcompiler/scheduler/__init__.py +2092 -0
- siliconcompiler/scheduler/docker_runner.py +253 -0
- siliconcompiler/scheduler/run_node.py +138 -0
- siliconcompiler/scheduler/send_messages.py +178 -0
- siliconcompiler/scheduler/slurm.py +208 -0
- siliconcompiler/scheduler/validation/email_credentials.json +54 -0
- siliconcompiler/schema/__init__.py +7 -0
- siliconcompiler/schema/schema_cfg.py +4014 -0
- siliconcompiler/schema/schema_obj.py +1841 -0
- siliconcompiler/schema/utils.py +93 -0
- siliconcompiler/sphinx_ext/__init__.py +0 -0
- siliconcompiler/sphinx_ext/dynamicgen.py +1006 -0
- siliconcompiler/sphinx_ext/schemagen.py +221 -0
- siliconcompiler/sphinx_ext/utils.py +166 -0
- siliconcompiler/targets/__init__.py +0 -0
- siliconcompiler/targets/asap7_demo.py +68 -0
- siliconcompiler/targets/asic_demo.py +38 -0
- siliconcompiler/targets/fpgaflow_demo.py +47 -0
- siliconcompiler/targets/freepdk45_demo.py +59 -0
- siliconcompiler/targets/gf180_demo.py +77 -0
- siliconcompiler/targets/skywater130_demo.py +70 -0
- siliconcompiler/templates/email/general.j2 +66 -0
- siliconcompiler/templates/email/summary.j2 +43 -0
- siliconcompiler/templates/issue/README.txt +26 -0
- siliconcompiler/templates/issue/run.sh +6 -0
- siliconcompiler/templates/report/bootstrap.min.css +7 -0
- siliconcompiler/templates/report/bootstrap.min.js +7 -0
- siliconcompiler/templates/report/bootstrap_LICENSE.md +24 -0
- siliconcompiler/templates/report/sc_report.j2 +427 -0
- siliconcompiler/templates/slurm/run.sh +9 -0
- siliconcompiler/templates/tcl/manifest.tcl.j2 +137 -0
- siliconcompiler/tools/__init__.py +0 -0
- siliconcompiler/tools/_common/__init__.py +432 -0
- siliconcompiler/tools/_common/asic.py +115 -0
- siliconcompiler/tools/_common/sdc/sc_constraints.sdc +76 -0
- siliconcompiler/tools/_common/tcl/sc_pin_constraints.tcl +63 -0
- siliconcompiler/tools/bambu/bambu.py +32 -0
- siliconcompiler/tools/bambu/convert.py +77 -0
- siliconcompiler/tools/bluespec/bluespec.py +40 -0
- siliconcompiler/tools/bluespec/convert.py +103 -0
- siliconcompiler/tools/builtin/_common.py +155 -0
- siliconcompiler/tools/builtin/builtin.py +26 -0
- siliconcompiler/tools/builtin/concatenate.py +85 -0
- siliconcompiler/tools/builtin/join.py +27 -0
- siliconcompiler/tools/builtin/maximum.py +46 -0
- siliconcompiler/tools/builtin/minimum.py +57 -0
- siliconcompiler/tools/builtin/mux.py +70 -0
- siliconcompiler/tools/builtin/nop.py +38 -0
- siliconcompiler/tools/builtin/verify.py +83 -0
- siliconcompiler/tools/chisel/SCDriver.scala +10 -0
- siliconcompiler/tools/chisel/build.sbt +27 -0
- siliconcompiler/tools/chisel/chisel.py +37 -0
- siliconcompiler/tools/chisel/convert.py +140 -0
- siliconcompiler/tools/execute/exec_input.py +41 -0
- siliconcompiler/tools/execute/execute.py +17 -0
- siliconcompiler/tools/genfasm/bitstream.py +61 -0
- siliconcompiler/tools/genfasm/genfasm.py +40 -0
- siliconcompiler/tools/ghdl/convert.py +87 -0
- siliconcompiler/tools/ghdl/ghdl.py +41 -0
- siliconcompiler/tools/icarus/compile.py +87 -0
- siliconcompiler/tools/icarus/icarus.py +36 -0
- siliconcompiler/tools/icepack/bitstream.py +20 -0
- siliconcompiler/tools/icepack/icepack.py +43 -0
- siliconcompiler/tools/klayout/export.py +117 -0
- siliconcompiler/tools/klayout/klayout.py +119 -0
- siliconcompiler/tools/klayout/klayout_export.py +205 -0
- siliconcompiler/tools/klayout/klayout_operations.py +363 -0
- siliconcompiler/tools/klayout/klayout_show.py +242 -0
- siliconcompiler/tools/klayout/klayout_utils.py +176 -0
- siliconcompiler/tools/klayout/operations.py +194 -0
- siliconcompiler/tools/klayout/screenshot.py +98 -0
- siliconcompiler/tools/klayout/show.py +101 -0
- siliconcompiler/tools/magic/drc.py +49 -0
- siliconcompiler/tools/magic/extspice.py +19 -0
- siliconcompiler/tools/magic/magic.py +85 -0
- siliconcompiler/tools/magic/sc_drc.tcl +96 -0
- siliconcompiler/tools/magic/sc_extspice.tcl +54 -0
- siliconcompiler/tools/magic/sc_magic.tcl +47 -0
- siliconcompiler/tools/montage/montage.py +30 -0
- siliconcompiler/tools/montage/tile.py +66 -0
- siliconcompiler/tools/netgen/count_lvs.py +132 -0
- siliconcompiler/tools/netgen/lvs.py +90 -0
- siliconcompiler/tools/netgen/netgen.py +36 -0
- siliconcompiler/tools/netgen/sc_lvs.tcl +46 -0
- siliconcompiler/tools/nextpnr/apr.py +24 -0
- siliconcompiler/tools/nextpnr/nextpnr.py +59 -0
- siliconcompiler/tools/openfpgaloader/openfpgaloader.py +39 -0
- siliconcompiler/tools/openroad/__init__.py +0 -0
- siliconcompiler/tools/openroad/cts.py +45 -0
- siliconcompiler/tools/openroad/dfm.py +66 -0
- siliconcompiler/tools/openroad/export.py +131 -0
- siliconcompiler/tools/openroad/floorplan.py +70 -0
- siliconcompiler/tools/openroad/openroad.py +977 -0
- siliconcompiler/tools/openroad/physyn.py +27 -0
- siliconcompiler/tools/openroad/place.py +41 -0
- siliconcompiler/tools/openroad/rcx_bench.py +95 -0
- siliconcompiler/tools/openroad/rcx_extract.py +34 -0
- siliconcompiler/tools/openroad/route.py +45 -0
- siliconcompiler/tools/openroad/screenshot.py +60 -0
- siliconcompiler/tools/openroad/scripts/sc_apr.tcl +499 -0
- siliconcompiler/tools/openroad/scripts/sc_cts.tcl +64 -0
- siliconcompiler/tools/openroad/scripts/sc_dfm.tcl +20 -0
- siliconcompiler/tools/openroad/scripts/sc_export.tcl +98 -0
- siliconcompiler/tools/openroad/scripts/sc_floorplan.tcl +413 -0
- siliconcompiler/tools/openroad/scripts/sc_metrics.tcl +158 -0
- siliconcompiler/tools/openroad/scripts/sc_physyn.tcl +7 -0
- siliconcompiler/tools/openroad/scripts/sc_place.tcl +84 -0
- siliconcompiler/tools/openroad/scripts/sc_procs.tcl +423 -0
- siliconcompiler/tools/openroad/scripts/sc_rcx.tcl +63 -0
- siliconcompiler/tools/openroad/scripts/sc_rcx_bench.tcl +20 -0
- siliconcompiler/tools/openroad/scripts/sc_rcx_extract.tcl +12 -0
- siliconcompiler/tools/openroad/scripts/sc_route.tcl +133 -0
- siliconcompiler/tools/openroad/scripts/sc_screenshot.tcl +21 -0
- siliconcompiler/tools/openroad/scripts/sc_write.tcl +5 -0
- siliconcompiler/tools/openroad/scripts/sc_write_images.tcl +361 -0
- siliconcompiler/tools/openroad/show.py +94 -0
- siliconcompiler/tools/openroad/templates/pex.tcl +8 -0
- siliconcompiler/tools/opensta/__init__.py +101 -0
- siliconcompiler/tools/opensta/report_libraries.py +28 -0
- siliconcompiler/tools/opensta/scripts/sc_procs.tcl +47 -0
- siliconcompiler/tools/opensta/scripts/sc_report_libraries.tcl +74 -0
- siliconcompiler/tools/opensta/scripts/sc_timing.tcl +268 -0
- siliconcompiler/tools/opensta/timing.py +214 -0
- siliconcompiler/tools/slang/__init__.py +49 -0
- siliconcompiler/tools/slang/lint.py +101 -0
- siliconcompiler/tools/surelog/__init__.py +123 -0
- siliconcompiler/tools/surelog/parse.py +183 -0
- siliconcompiler/tools/surelog/templates/output.v +7 -0
- siliconcompiler/tools/sv2v/convert.py +46 -0
- siliconcompiler/tools/sv2v/sv2v.py +37 -0
- siliconcompiler/tools/template/template.py +125 -0
- siliconcompiler/tools/verilator/compile.py +139 -0
- siliconcompiler/tools/verilator/lint.py +19 -0
- siliconcompiler/tools/verilator/parse.py +27 -0
- siliconcompiler/tools/verilator/verilator.py +172 -0
- siliconcompiler/tools/vivado/__init__.py +7 -0
- siliconcompiler/tools/vivado/bitstream.py +21 -0
- siliconcompiler/tools/vivado/place.py +21 -0
- siliconcompiler/tools/vivado/route.py +21 -0
- siliconcompiler/tools/vivado/scripts/sc_bitstream.tcl +6 -0
- siliconcompiler/tools/vivado/scripts/sc_place.tcl +2 -0
- siliconcompiler/tools/vivado/scripts/sc_route.tcl +4 -0
- siliconcompiler/tools/vivado/scripts/sc_run.tcl +45 -0
- siliconcompiler/tools/vivado/scripts/sc_syn_fpga.tcl +25 -0
- siliconcompiler/tools/vivado/syn_fpga.py +20 -0
- siliconcompiler/tools/vivado/vivado.py +147 -0
- siliconcompiler/tools/vpr/_json_constraint.py +63 -0
- siliconcompiler/tools/vpr/_xml_constraint.py +109 -0
- siliconcompiler/tools/vpr/place.py +137 -0
- siliconcompiler/tools/vpr/route.py +124 -0
- siliconcompiler/tools/vpr/screenshot.py +54 -0
- siliconcompiler/tools/vpr/show.py +88 -0
- siliconcompiler/tools/vpr/vpr.py +357 -0
- siliconcompiler/tools/xyce/xyce.py +36 -0
- siliconcompiler/tools/yosys/lec.py +56 -0
- siliconcompiler/tools/yosys/prepareLib.py +59 -0
- siliconcompiler/tools/yosys/sc_lec.tcl +84 -0
- siliconcompiler/tools/yosys/sc_syn.tcl +79 -0
- siliconcompiler/tools/yosys/syn_asic.py +565 -0
- siliconcompiler/tools/yosys/syn_asic.tcl +377 -0
- siliconcompiler/tools/yosys/syn_asic_fpga_shared.tcl +31 -0
- siliconcompiler/tools/yosys/syn_fpga.py +146 -0
- siliconcompiler/tools/yosys/syn_fpga.tcl +233 -0
- siliconcompiler/tools/yosys/syn_strategies.tcl +81 -0
- siliconcompiler/tools/yosys/techmaps/lcu_kogge_stone.v +39 -0
- siliconcompiler/tools/yosys/templates/abc.const +2 -0
- siliconcompiler/tools/yosys/yosys.py +147 -0
- siliconcompiler/units.py +259 -0
- siliconcompiler/use.py +177 -0
- siliconcompiler/utils/__init__.py +423 -0
- siliconcompiler/utils/asic.py +158 -0
- siliconcompiler/utils/showtools.py +25 -0
- siliconcompiler-0.26.5.dist-info/LICENSE +190 -0
- siliconcompiler-0.26.5.dist-info/METADATA +195 -0
- siliconcompiler-0.26.5.dist-info/RECORD +251 -0
- siliconcompiler-0.26.5.dist-info/WHEEL +5 -0
- siliconcompiler-0.26.5.dist-info/entry_points.txt +12 -0
- siliconcompiler-0.26.5.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "check_progress/",
|
|
3
|
+
"description": "Schema describing parameters for checking the progress of an ongoing job.",
|
|
4
|
+
"examples": [
|
|
5
|
+
{
|
|
6
|
+
"job_hash": "0123456789abcdeffedcba9876543210",
|
|
7
|
+
"job_id": "1"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"username": "valid_user",
|
|
11
|
+
"key": "valid_base64_encoded_key",
|
|
12
|
+
"job_hash": "0123456789abcdeffedcba9876543210",
|
|
13
|
+
"job_id": "2"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
|
|
17
|
+
"type": "object",
|
|
18
|
+
"additionalProperties": false,
|
|
19
|
+
"properties": {
|
|
20
|
+
"username": {
|
|
21
|
+
"title": "Username",
|
|
22
|
+
"description": "User account ID. Required for authentication if the job was originally created by a valid user.",
|
|
23
|
+
"examples": ["my_user", "account1234"],
|
|
24
|
+
|
|
25
|
+
"type": "string",
|
|
26
|
+
"pattern": "^[^\\s;]*$"
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
"key": {
|
|
30
|
+
"title": "Authentication Key",
|
|
31
|
+
"description": "Base64-encoded decryption key for the user account's public key. Required if 'username' is provided.",
|
|
32
|
+
"examples": ["PHlvdXJfa2V5X2hlcmU+"],
|
|
33
|
+
|
|
34
|
+
"type": "string"
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
"job_hash": {
|
|
38
|
+
"title": "Job Hash",
|
|
39
|
+
"description": "UUID associated with the data that the job is operating on.",
|
|
40
|
+
"examples": ["01234567890abcdeffedcba0987654321"],
|
|
41
|
+
|
|
42
|
+
"type": "string",
|
|
43
|
+
"pattern": "^[0-9a-f]{32}$"
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
"job_id": {
|
|
47
|
+
"title": "Job ID",
|
|
48
|
+
"description": "ID associated with the 'job_hash' and the individual job that is being checked on.",
|
|
49
|
+
"examples": ["1", "2"],
|
|
50
|
+
|
|
51
|
+
"type": "string"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
"required": ["job_hash", "job_id"],
|
|
56
|
+
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"username": ["key"],
|
|
59
|
+
"key": ["username"]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "check_server/",
|
|
3
|
+
"description": "Schema describing parameters for checking on server-side software versions, and optionally a given user account's information.",
|
|
4
|
+
"examples": [
|
|
5
|
+
{
|
|
6
|
+
"username": "valid_user",
|
|
7
|
+
"key": "valid_base64_encoded_key"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
|
|
13
|
+
"type": "object",
|
|
14
|
+
"additionalProperties": false,
|
|
15
|
+
"properties": {
|
|
16
|
+
"username": {
|
|
17
|
+
"title": "Username",
|
|
18
|
+
"description": "User account identifier.",
|
|
19
|
+
"examples": ["my_user", "account1234"],
|
|
20
|
+
|
|
21
|
+
"type": "string",
|
|
22
|
+
"pattern": "^[^\\s;]*$"
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
"key": {
|
|
26
|
+
"title": "Authentication Key",
|
|
27
|
+
"description": "Key/password for the user's account.",
|
|
28
|
+
"examples": ["PHlvdXJfa2V5X2hlcmU+"],
|
|
29
|
+
|
|
30
|
+
"type": "string"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"username": ["key"],
|
|
36
|
+
"key": ["username"]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "delete_job/",
|
|
3
|
+
"description": "Schema describing parameters for deleting project data from remote storage.",
|
|
4
|
+
"examples": [
|
|
5
|
+
{
|
|
6
|
+
"job_hash": "0123456789abcdeffedcba9876543210"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"username": "valid_user",
|
|
10
|
+
"key": "valid_base64_encoded_key",
|
|
11
|
+
"job_hash": "0123456789abcdeffedcba9876543210"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"properties": {
|
|
18
|
+
"username": {
|
|
19
|
+
"title": "Username",
|
|
20
|
+
"description": "User account ID. Required for authentication if the data was originally imported by a valid user.",
|
|
21
|
+
"examples": ["my_user", "account1234"],
|
|
22
|
+
|
|
23
|
+
"type": "string",
|
|
24
|
+
"pattern": "^[^\\s;]*$"
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
"key": {
|
|
28
|
+
"title": "Authentication Key",
|
|
29
|
+
"description": "Password or Base64-encoded decryption key for the user account, depending on the server's authentication scheme.",
|
|
30
|
+
"examples": ["PHlvdXJfa2V5X2hlcmU+"],
|
|
31
|
+
|
|
32
|
+
"type": "string"
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
"job_hash": {
|
|
36
|
+
"title": "Job Hash",
|
|
37
|
+
"description": "UUID associated with the data that should be deleted.",
|
|
38
|
+
"examples": ["01234567890abcdeffedcba0987654321"],
|
|
39
|
+
|
|
40
|
+
"type": "string",
|
|
41
|
+
"pattern": "^[0-9a-f]{32}$"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
"required": ["job_hash"],
|
|
46
|
+
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"username": ["key"],
|
|
49
|
+
"key": ["username"]
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "get_results/{job_hash}.tar.gz",
|
|
3
|
+
"description": "Schema describing parameters for checking the progress of an ongoing job.",
|
|
4
|
+
"examples": [
|
|
5
|
+
{
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"node": "floorplan0"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"username": "valid_user",
|
|
12
|
+
"key": "valid_base64_encoded_key"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
|
|
16
|
+
"type": "object",
|
|
17
|
+
"additionalProperties": false,
|
|
18
|
+
"properties": {
|
|
19
|
+
"username": {
|
|
20
|
+
"title": "Username",
|
|
21
|
+
"description": "User account ID. Required for authentication if the job was originally created by a valid user.",
|
|
22
|
+
"examples": ["my_user", "account1234"],
|
|
23
|
+
|
|
24
|
+
"type": "string",
|
|
25
|
+
"pattern": "^[^\\s;]*$"
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
"key": {
|
|
29
|
+
"title": "Authentication Key",
|
|
30
|
+
"description": "Base64-encoded decryption key for the user account's public key. Required if 'username' is provided.",
|
|
31
|
+
"examples": ["PHlvdXJfa2V5X2hlcmU+"],
|
|
32
|
+
|
|
33
|
+
"type": "string"
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
"node": {
|
|
37
|
+
"title": "Flowgraph node",
|
|
38
|
+
"description": "Retrieve results only for a specific node in the flowgraph. Used to retrieve logs/etc for in-progress jobs.",
|
|
39
|
+
"examples": ["syn0", "export1"],
|
|
40
|
+
"type": "string"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"username": ["key"],
|
|
46
|
+
"key": ["username"]
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "remote_run/",
|
|
3
|
+
"description": "Schema for metadata required to remotely run a siliconcompiler job stage.",
|
|
4
|
+
"examples": [
|
|
5
|
+
{
|
|
6
|
+
"job_hash": "0123456789abcdeffedcba9876543210"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"username": "valid_user",
|
|
10
|
+
"key": "valid_base64_encoded_key",
|
|
11
|
+
"job_hash": "0123456789abcdeffedcba9876543210"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
|
|
15
|
+
"type": "object",
|
|
16
|
+
"additionalProperties": false,
|
|
17
|
+
"properties": {
|
|
18
|
+
"username": {
|
|
19
|
+
"title": "Username",
|
|
20
|
+
"description": "User account ID. Required if data is encrypted.",
|
|
21
|
+
"examples": ["my_user", "account1234"],
|
|
22
|
+
|
|
23
|
+
"type": "string",
|
|
24
|
+
"pattern": "^[^\\s;]*$"
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
"key": {
|
|
28
|
+
"title": "Authentication Key",
|
|
29
|
+
"description": "Password or Base64-encoded decryption key for the user account, depending on the server's authentication scheme.",
|
|
30
|
+
"examples": ["PHlvdXJfa2V5X2hlcmU+"],
|
|
31
|
+
|
|
32
|
+
"type": "string"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"username": ["key"],
|
|
38
|
+
"key": ["username"]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"reason": "Job does not exist",
|
|
4
|
+
"status_code": 404,
|
|
5
|
+
"response_format": {
|
|
6
|
+
"message": "String",
|
|
7
|
+
"success": "Boolean"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"reason": "Job was canceled",
|
|
12
|
+
"status_code": 200,
|
|
13
|
+
"response_format": {
|
|
14
|
+
"message": "String",
|
|
15
|
+
"success": "Boolean"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"reason": "Job is not running",
|
|
4
|
+
"status_code": 200,
|
|
5
|
+
"response_format": {
|
|
6
|
+
"message": "String",
|
|
7
|
+
"status": "String"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"reason": "Job cannot be found",
|
|
12
|
+
"status_code": 404,
|
|
13
|
+
"response_format": {
|
|
14
|
+
"message": "String",
|
|
15
|
+
"status": "String"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"reason": "Job is running",
|
|
20
|
+
"status_code": 200,
|
|
21
|
+
"response_format": {
|
|
22
|
+
"message": "String",
|
|
23
|
+
"status": "String",
|
|
24
|
+
"[nodename]": {
|
|
25
|
+
"status": "String",
|
|
26
|
+
"elapsed_time": "String (Optional)"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"reason": "Unauthenticated call",
|
|
4
|
+
"status_code": 200,
|
|
5
|
+
"response_format": {
|
|
6
|
+
"status": "String",
|
|
7
|
+
"terms": "String",
|
|
8
|
+
"versions": {
|
|
9
|
+
"sc": "String",
|
|
10
|
+
"sc_schema": "String",
|
|
11
|
+
"sc_server":" String"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"reason": "Authenticated call",
|
|
17
|
+
"status_code": 200,
|
|
18
|
+
"response_format": {
|
|
19
|
+
"status": "String",
|
|
20
|
+
"terms": "String",
|
|
21
|
+
"versions": {
|
|
22
|
+
"sc": "String",
|
|
23
|
+
"sc_schema": "String",
|
|
24
|
+
"sc_server":" String"
|
|
25
|
+
},
|
|
26
|
+
"user_info": {
|
|
27
|
+
"compute_time": "Integer",
|
|
28
|
+
"bandwidth_kb": "Integer"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"reason": "Job does not exist",
|
|
4
|
+
"status_code": 404,
|
|
5
|
+
"response_format": {
|
|
6
|
+
"message": "String",
|
|
7
|
+
"success": "Boolean"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"reason": "Job was deleted",
|
|
12
|
+
"status_code": 200,
|
|
13
|
+
"response_format": {
|
|
14
|
+
"message": "String",
|
|
15
|
+
"success": "Boolean"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"reason": "Job does not exist",
|
|
4
|
+
"status_code": 404,
|
|
5
|
+
"response_format": {
|
|
6
|
+
"message": "String"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"reason": "Result size is over the download limit",
|
|
11
|
+
"status_code": 503,
|
|
12
|
+
"response_format": {
|
|
13
|
+
"message": "String"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"reason": "Results are available",
|
|
18
|
+
"status_code": 200,
|
|
19
|
+
"response_format": ["File Response"]
|
|
20
|
+
}
|
|
21
|
+
]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"reason": "Too many nodes in flowgraph",
|
|
4
|
+
"status_code": 403,
|
|
5
|
+
"response_format": {
|
|
6
|
+
"message": "String"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"reason": "User account is out of bandwidth or time",
|
|
11
|
+
"status_code": 400,
|
|
12
|
+
"response_format": {
|
|
13
|
+
"message": "String"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"reason": "Job started successfully",
|
|
18
|
+
"status_code": 200,
|
|
19
|
+
"response_format": {
|
|
20
|
+
"message": "String",
|
|
21
|
+
"interval": "Integer",
|
|
22
|
+
"job_hash": "String"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from .summary_image import _generate_summary_image, _open_summary_image
|
|
2
|
+
from .html_report import _generate_html_report, _open_html_report
|
|
3
|
+
from .summary_table import _show_summary_table
|
|
4
|
+
from .streamlit_report import Dashboard
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"_generate_summary_image",
|
|
8
|
+
"_open_summary_image",
|
|
9
|
+
"_generate_html_report",
|
|
10
|
+
"_open_html_report",
|
|
11
|
+
"_show_summary_table",
|
|
12
|
+
"Dashboard"
|
|
13
|
+
]
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import base64
|
|
3
|
+
import webbrowser
|
|
4
|
+
import subprocess
|
|
5
|
+
from siliconcompiler import utils
|
|
6
|
+
|
|
7
|
+
from siliconcompiler.report.utils import _collect_data, _find_summary_image
|
|
8
|
+
from siliconcompiler.tools._common import get_tool_task
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _generate_html_report(chip, flow, flowgraph_nodes, results_html):
|
|
12
|
+
'''
|
|
13
|
+
Generates an HTML based on the run
|
|
14
|
+
'''
|
|
15
|
+
|
|
16
|
+
# only report tool based steps functions
|
|
17
|
+
for (step, index) in list(flowgraph_nodes):
|
|
18
|
+
tool, task = get_tool_task(chip, step, '0', flow=flow)
|
|
19
|
+
if tool == 'builtin':
|
|
20
|
+
index = flowgraph_nodes.index((step, index))
|
|
21
|
+
del flowgraph_nodes[index]
|
|
22
|
+
|
|
23
|
+
schema = chip.schema.copy()
|
|
24
|
+
schema.prune()
|
|
25
|
+
pruned_cfg = schema.cfg
|
|
26
|
+
if 'history' in pruned_cfg:
|
|
27
|
+
del pruned_cfg['history']
|
|
28
|
+
if 'library' in pruned_cfg:
|
|
29
|
+
del pruned_cfg['library']
|
|
30
|
+
|
|
31
|
+
layout_img = _find_summary_image(chip)
|
|
32
|
+
|
|
33
|
+
img_data = None
|
|
34
|
+
# Base64-encode layout for inclusion in HTML report
|
|
35
|
+
if layout_img and os.path.isfile(layout_img):
|
|
36
|
+
with open(layout_img, 'rb') as img_file:
|
|
37
|
+
img_data = base64.b64encode(img_file.read()).decode('utf-8')
|
|
38
|
+
|
|
39
|
+
nodes, errors, metrics, metrics_unit, metrics_to_show, reports = \
|
|
40
|
+
_collect_data(chip, flow, flowgraph_nodes)
|
|
41
|
+
|
|
42
|
+
# Hardcode the encoding, since there's a Unicode character in a
|
|
43
|
+
# Bootstrap CSS file inlined in this template. Without this setting,
|
|
44
|
+
# this write may raise an encoding error on machines where the
|
|
45
|
+
# default encoding is not UTF-8.
|
|
46
|
+
with open(results_html, 'w', encoding='utf-8') as wf:
|
|
47
|
+
wf.write(utils.get_file_template('report/sc_report.j2').render(
|
|
48
|
+
design=chip.design,
|
|
49
|
+
nodes=nodes,
|
|
50
|
+
errors=errors,
|
|
51
|
+
metrics=metrics,
|
|
52
|
+
metrics_unit=metrics_unit,
|
|
53
|
+
reports=reports,
|
|
54
|
+
manifest=chip.schema.cfg,
|
|
55
|
+
pruned_cfg=pruned_cfg,
|
|
56
|
+
metric_keys=metrics_to_show,
|
|
57
|
+
img_data=img_data,
|
|
58
|
+
))
|
|
59
|
+
|
|
60
|
+
chip.logger.info(f'Generated HTML report at {results_html}')
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _open_html_report(chip, results_html):
|
|
64
|
+
try:
|
|
65
|
+
webbrowser.get(results_html)
|
|
66
|
+
except webbrowser.Error:
|
|
67
|
+
# Python 'webbrowser' module includes a limited number of popular defaults.
|
|
68
|
+
# Depending on the platform, the user may have defined their own with
|
|
69
|
+
# $BROWSER.
|
|
70
|
+
env_browser = os.getenv('BROWSER')
|
|
71
|
+
if env_browser:
|
|
72
|
+
subprocess.Popen([env_browser, os.path.relpath(results_html)])
|
|
73
|
+
else:
|
|
74
|
+
chip.logger.warning(f'Unable to open results page in web browser: {results_html}')
|