siliconcompiler 0.34.2__py3-none-any.whl → 0.34.3__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.
Files changed (121) hide show
  1. siliconcompiler/__init__.py +12 -5
  2. siliconcompiler/__main__.py +1 -7
  3. siliconcompiler/_metadata.py +1 -1
  4. siliconcompiler/apps/_common.py +104 -23
  5. siliconcompiler/apps/sc.py +4 -8
  6. siliconcompiler/apps/sc_dashboard.py +6 -4
  7. siliconcompiler/apps/sc_install.py +10 -6
  8. siliconcompiler/apps/sc_issue.py +7 -5
  9. siliconcompiler/apps/sc_remote.py +1 -1
  10. siliconcompiler/apps/sc_server.py +9 -14
  11. siliconcompiler/apps/sc_show.py +6 -5
  12. siliconcompiler/apps/smake.py +130 -94
  13. siliconcompiler/apps/utils/replay.py +4 -7
  14. siliconcompiler/apps/utils/summarize.py +3 -5
  15. siliconcompiler/asic.py +420 -0
  16. siliconcompiler/checklist.py +25 -2
  17. siliconcompiler/cmdlineschema.py +534 -0
  18. siliconcompiler/constraints/asic_component.py +2 -2
  19. siliconcompiler/constraints/asic_pins.py +2 -2
  20. siliconcompiler/constraints/asic_timing.py +3 -3
  21. siliconcompiler/core.py +7 -32
  22. siliconcompiler/data/templates/tcl/manifest.tcl.j2 +8 -0
  23. siliconcompiler/dependencyschema.py +89 -31
  24. siliconcompiler/design.py +176 -207
  25. siliconcompiler/filesetschema.py +250 -0
  26. siliconcompiler/flowgraph.py +274 -95
  27. siliconcompiler/fpga.py +124 -1
  28. siliconcompiler/library.py +218 -20
  29. siliconcompiler/metric.py +233 -20
  30. siliconcompiler/package/__init__.py +271 -50
  31. siliconcompiler/package/git.py +92 -16
  32. siliconcompiler/package/github.py +108 -12
  33. siliconcompiler/package/https.py +79 -16
  34. siliconcompiler/packageschema.py +88 -7
  35. siliconcompiler/pathschema.py +31 -2
  36. siliconcompiler/pdk.py +566 -1
  37. siliconcompiler/project.py +1095 -94
  38. siliconcompiler/record.py +38 -1
  39. siliconcompiler/remote/__init__.py +5 -2
  40. siliconcompiler/remote/client.py +11 -6
  41. siliconcompiler/remote/schema.py +5 -23
  42. siliconcompiler/remote/server.py +41 -54
  43. siliconcompiler/report/__init__.py +3 -3
  44. siliconcompiler/report/dashboard/__init__.py +48 -14
  45. siliconcompiler/report/dashboard/cli/__init__.py +99 -21
  46. siliconcompiler/report/dashboard/cli/board.py +364 -179
  47. siliconcompiler/report/dashboard/web/__init__.py +90 -12
  48. siliconcompiler/report/dashboard/web/components/__init__.py +219 -240
  49. siliconcompiler/report/dashboard/web/components/flowgraph.py +49 -26
  50. siliconcompiler/report/dashboard/web/components/graph.py +139 -100
  51. siliconcompiler/report/dashboard/web/layouts/__init__.py +29 -1
  52. siliconcompiler/report/dashboard/web/layouts/_common.py +38 -2
  53. siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph.py +39 -26
  54. siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph_node_tab.py +50 -50
  55. siliconcompiler/report/dashboard/web/layouts/vertical_flowgraph_sac_tabs.py +49 -46
  56. siliconcompiler/report/dashboard/web/state.py +141 -14
  57. siliconcompiler/report/dashboard/web/utils/__init__.py +79 -16
  58. siliconcompiler/report/dashboard/web/utils/file_utils.py +74 -11
  59. siliconcompiler/report/dashboard/web/viewer.py +25 -1
  60. siliconcompiler/report/report.py +5 -2
  61. siliconcompiler/report/summary_image.py +29 -11
  62. siliconcompiler/scheduler/__init__.py +9 -1
  63. siliconcompiler/scheduler/docker.py +79 -1
  64. siliconcompiler/scheduler/run_node.py +35 -19
  65. siliconcompiler/scheduler/scheduler.py +208 -24
  66. siliconcompiler/scheduler/schedulernode.py +372 -46
  67. siliconcompiler/scheduler/send_messages.py +77 -29
  68. siliconcompiler/scheduler/slurm.py +76 -12
  69. siliconcompiler/scheduler/taskscheduler.py +140 -20
  70. siliconcompiler/schema/__init__.py +0 -2
  71. siliconcompiler/schema/baseschema.py +194 -38
  72. siliconcompiler/schema/journal.py +7 -4
  73. siliconcompiler/schema/namedschema.py +16 -10
  74. siliconcompiler/schema/parameter.py +55 -9
  75. siliconcompiler/schema/parametervalue.py +60 -0
  76. siliconcompiler/schema/safeschema.py +25 -2
  77. siliconcompiler/schema/schema_cfg.py +5 -5
  78. siliconcompiler/schema/utils.py +2 -2
  79. siliconcompiler/schema_obj.py +20 -3
  80. siliconcompiler/tool.py +979 -302
  81. siliconcompiler/tools/bambu/__init__.py +41 -0
  82. siliconcompiler/tools/builtin/concatenate.py +2 -2
  83. siliconcompiler/tools/builtin/minimum.py +2 -1
  84. siliconcompiler/tools/builtin/mux.py +2 -1
  85. siliconcompiler/tools/builtin/nop.py +2 -1
  86. siliconcompiler/tools/builtin/verify.py +2 -1
  87. siliconcompiler/tools/klayout/__init__.py +95 -0
  88. siliconcompiler/tools/openroad/__init__.py +289 -0
  89. siliconcompiler/tools/openroad/scripts/apr/preamble.tcl +3 -0
  90. siliconcompiler/tools/openroad/scripts/apr/sc_detailed_route.tcl +7 -2
  91. siliconcompiler/tools/openroad/scripts/apr/sc_global_route.tcl +8 -4
  92. siliconcompiler/tools/openroad/scripts/apr/sc_init_floorplan.tcl +9 -5
  93. siliconcompiler/tools/openroad/scripts/common/write_images.tcl +5 -1
  94. siliconcompiler/tools/slang/__init__.py +1 -1
  95. siliconcompiler/tools/slang/elaborate.py +2 -1
  96. siliconcompiler/tools/vivado/scripts/sc_run.tcl +1 -1
  97. siliconcompiler/tools/vivado/scripts/sc_syn_fpga.tcl +8 -1
  98. siliconcompiler/tools/vivado/syn_fpga.py +6 -0
  99. siliconcompiler/tools/vivado/vivado.py +35 -2
  100. siliconcompiler/tools/vpr/__init__.py +150 -0
  101. siliconcompiler/tools/yosys/__init__.py +369 -1
  102. siliconcompiler/tools/yosys/scripts/procs.tcl +0 -1
  103. siliconcompiler/toolscripts/_tools.json +5 -10
  104. siliconcompiler/utils/__init__.py +66 -0
  105. siliconcompiler/utils/flowgraph.py +2 -2
  106. siliconcompiler/utils/issue.py +2 -1
  107. siliconcompiler/utils/logging.py +14 -0
  108. siliconcompiler/utils/multiprocessing.py +256 -0
  109. siliconcompiler/utils/showtools.py +10 -0
  110. {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/METADATA +5 -5
  111. {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/RECORD +115 -118
  112. {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/entry_points.txt +3 -0
  113. siliconcompiler/schema/cmdlineschema.py +0 -250
  114. siliconcompiler/toolscripts/rhel8/install-slang.sh +0 -40
  115. siliconcompiler/toolscripts/rhel9/install-slang.sh +0 -40
  116. siliconcompiler/toolscripts/ubuntu20/install-slang.sh +0 -47
  117. siliconcompiler/toolscripts/ubuntu22/install-slang.sh +0 -37
  118. siliconcompiler/toolscripts/ubuntu24/install-slang.sh +0 -37
  119. {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/WHEEL +0 -0
  120. {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/licenses/LICENSE +0 -0
  121. {siliconcompiler-0.34.2.dist-info → siliconcompiler-0.34.3.dist-info}/top_level.txt +0 -0
@@ -11,7 +11,13 @@ from siliconcompiler.package import Resolver
11
11
 
12
12
 
13
13
  class PackageSchema(PathSchema):
14
+ """
15
+ A class for managing package-related schema data.
16
+ """
14
17
  def __init__(self):
18
+ """
19
+ Initializes a PackageSchema object.
20
+ """
15
21
  super().__init__()
16
22
 
17
23
  schema_package(self)
@@ -26,11 +32,13 @@ class PackageSchema(PathSchema):
26
32
  return self.set("package", "description", trim(desc))
27
33
 
28
34
  def get_description(self) -> str:
29
- """Get the description of the package.
35
+ """
36
+ Get the description of the package.
30
37
 
31
38
  Returns:
32
39
  str: The description string.
33
40
  """
41
+
34
42
  return self.get("package", "description")
35
43
 
36
44
  def set_version(self, version: str):
@@ -51,6 +59,24 @@ class PackageSchema(PathSchema):
51
59
  """
52
60
  return self.get("package", "version")
53
61
 
62
+ def set_vendor(self, vendor: str):
63
+ """
64
+ Set the vendor of the package.
65
+
66
+ Args:
67
+ vendor (str): The vendor name.
68
+ """
69
+ return self.set("package", "vendor", vendor)
70
+
71
+ def get_vendor(self) -> str:
72
+ """
73
+ Get the vendor of the package.
74
+
75
+ Returns:
76
+ str: The vendor name.
77
+ """
78
+ return self.get("package", "vendor")
79
+
54
80
  def add_license(self, name: str):
55
81
  """
56
82
  Add a license name to the package.
@@ -77,12 +103,18 @@ class PackageSchema(PathSchema):
77
103
  def get_license(self) -> List[str]:
78
104
  """
79
105
  Get a list of license names associated with the package.
106
+
107
+ Returns:
108
+ List[str]: A list of license names.
80
109
  """
81
110
  return self.get("package", "license")
82
111
 
83
112
  def get_licensefile(self) -> List[str]:
84
113
  """
85
114
  Get a list of license file paths associated with the package.
115
+
116
+ Returns:
117
+ List[str]: A list of file paths.
86
118
  """
87
119
  return self.find_files("package", "licensefile")
88
120
 
@@ -163,11 +195,25 @@ class PackageSchema(PathSchema):
163
195
  docs[type] = doc_files
164
196
  return docs
165
197
 
198
+ @classmethod
199
+ def _getdict_type(cls) -> str:
200
+ """
201
+ Returns the meta data for getdict
202
+ """
203
+
204
+ return PackageSchema.__name__
205
+
166
206
 
167
207
  ############################################
168
208
  # Package information
169
209
  ############################################
170
210
  def schema_package(schema):
211
+ """
212
+ Adds package schema parameters to the given schema.
213
+
214
+ Args:
215
+ schema (EditableSchema): The schema to modify.
216
+ """
171
217
  schema = EditableSchema(schema)
172
218
 
173
219
  schema.insert(
@@ -183,6 +229,18 @@ def schema_package(schema):
183
229
  help=trim("""Package version. Can be a branch, tag, commit hash,
184
230
  or a semver compatible version.""")))
185
231
 
232
+ schema.insert(
233
+ 'package', 'vendor',
234
+ Parameter(
235
+ 'str',
236
+ scope=Scope.GLOBAL,
237
+ shorthelp="Package: vendor",
238
+ switch="-package_vendor <str>",
239
+ example=[
240
+ "cli: -package_vendor acme",
241
+ "api: chip.set('package', 'vendor', 'acme')"],
242
+ help=trim("""Package vendor.""")))
243
+
186
244
  schema.insert(
187
245
  'package', 'description',
188
246
  Parameter(
@@ -262,14 +320,20 @@ def schema_package(schema):
262
320
 
263
321
 
264
322
  class PackageSchemaTmp(BaseSchema):
323
+ """
324
+ A temporary package schema used for development and testing.
325
+ """
265
326
  def __init__(self):
327
+ """
328
+ Initializes a temporary PackageSchemaTmp object.
329
+ """
266
330
  super().__init__()
267
331
 
268
332
  schema_package_tmp(self)
269
333
 
270
334
  def register(self, name, path, ref=None, clobber=True):
271
335
  """
272
- Registers a package by its name with the source path and reference
336
+ Registers a package by its name with the source path and reference.
273
337
 
274
338
  Registered package sources are stored in the package section of the schema.
275
339
 
@@ -301,12 +365,12 @@ class PackageSchemaTmp(BaseSchema):
301
365
  return success
302
366
 
303
367
  def get_resolver(self, package):
304
- '''
305
- Returns a specific resolver
368
+ """
369
+ Returns a specific resolver for a package.
306
370
 
307
371
  Args:
308
372
  package (str): name of package
309
- '''
373
+ """
310
374
  resolver_cls = Resolver.find_resolver(self.get("source", package, "path"))
311
375
  resolver = resolver_cls(package, self._parent(root=True),
312
376
  self.get("source", package, "path"),
@@ -314,20 +378,37 @@ class PackageSchemaTmp(BaseSchema):
314
378
  return resolver
315
379
 
316
380
  def get_resolvers(self):
317
- '''
381
+ """
318
382
  Returns a dictionary of packages with their resolver method.
319
- '''
383
+
384
+ Returns:
385
+ Dict[str, callable]: A dictionary of package names mapped to their resolver methods.
386
+ """
320
387
  resolvers = {}
321
388
  for package in self.getkeys("source"):
322
389
  resolvers[package] = self.get_resolver(package).get_path
323
390
 
324
391
  return resolvers
325
392
 
393
+ @classmethod
394
+ def _getdict_type(cls) -> str:
395
+ """
396
+ Returns the meta data for getdict
397
+ """
398
+
399
+ return PackageSchemaTmp.__name__
400
+
326
401
 
327
402
  ############################################
328
403
  # Package information
329
404
  ############################################
330
405
  def schema_package_tmp(schema):
406
+ """
407
+ Adds temporary package schema parameters to the given schema.
408
+
409
+ Args:
410
+ schema (EditableSchema): The schema to modify.
411
+ """
331
412
  schema = EditableSchema(schema)
332
413
 
333
414
  schema.insert(
@@ -48,7 +48,8 @@ class PathSchemaBase(BaseSchema):
48
48
  """
49
49
  schema_root = self._parent(root=True)
50
50
  cwd = getattr(schema_root, "cwd", os.getcwd())
51
- collection_dir = getattr(schema_root, "collection_dir", None)
51
+ collection_dir = getattr(schema_root, "collection_dir",
52
+ getattr(schema_root, "getcollectiondir", None))
52
53
  if collection_dir:
53
54
  collection_dir = collection_dir()
54
55
 
@@ -73,7 +74,9 @@ class PathSchemaBase(BaseSchema):
73
74
  logger = getattr(schema_root,
74
75
  "logger",
75
76
  logging.getLogger("siliconcompiler.check_filepaths"))
76
- collection_dir = getattr(schema_root, "collection_dir", None)
77
+ collection_dir = getattr(schema_root, "collection_dir",
78
+ getattr(schema_root, "getcollectiondir",
79
+ None))
77
80
  if collection_dir:
78
81
  collection_dir = collection_dir()
79
82
 
@@ -84,6 +87,32 @@ class PathSchemaBase(BaseSchema):
84
87
  cwd=cwd)
85
88
 
86
89
 
90
+ class PathSchemaSimpleBase(PathSchemaBase):
91
+ def find_files(self, *keypath, missing_ok=False):
92
+ """
93
+ Returns absolute paths to files or directories based on the keypath
94
+ provided.
95
+ The keypath provided must point to a schema parameter of type file, dir,
96
+ or lists of either. Otherwise, it will trigger an error.
97
+ Args:
98
+ keypath (list of str): Variable length schema key list.
99
+ missing_ok (bool): If True, silently return None when files aren't
100
+ found. If False, print an error and set the error flag.
101
+ Returns:
102
+ If keys points to a scalar entry, returns an absolute path to that
103
+ file/directory, or None if not found. It keys points to a list
104
+ entry, returns a list of either the absolute paths or None for each
105
+ entry, depending on whether it is found.
106
+ Examples:
107
+ >>> schema.find_files('input', 'verilog')
108
+ Returns a list of absolute paths to source files, as specified in
109
+ the schema.
110
+ """
111
+ return super().find_files(*keypath,
112
+ missing_ok=missing_ok,
113
+ step=None, index=None)
114
+
115
+
87
116
  class PathSchema(PathSchemaBase):
88
117
  '''
89
118
  Schema extension to add support for path handling with dataroots