siliconcompiler 0.36.2__py3-none-any.whl → 0.36.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.
@@ -1,5 +1,5 @@
1
1
  # Version number following semver standard.
2
- version = '0.36.2'
2
+ version = '0.36.3'
3
3
 
4
4
  # Default server address for remote runs, if unspecified.
5
5
  default_server = 'https://server.siliconcompiler.com'
@@ -4,7 +4,7 @@ import uuid
4
4
 
5
5
  import os.path
6
6
 
7
- from typing import Union, List, Tuple, TextIO, Optional, Dict, Set
7
+ from typing import Type, Union, List, Tuple, TextIO, Optional, Dict, Set, TypeVar
8
8
 
9
9
  from siliconcompiler.schema import BaseSchema, NamedSchema, EditableSchema, Parameter, Scope, \
10
10
  __version__ as schema_version, \
@@ -33,6 +33,8 @@ from siliconcompiler.utils.multiprocessing import MPManager
33
33
  from siliconcompiler.utils.paths import jobdir, workdir
34
34
  from siliconcompiler.flows.showflow import ShowFlow
35
35
 
36
+ TProject = TypeVar("TProject", bound="Project")
37
+
36
38
 
37
39
  class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
38
40
  """
@@ -236,7 +238,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
236
238
  return self.get("option", field="schema")
237
239
 
238
240
  @classmethod
239
- def convert(cls, obj: "Project") -> "Project":
241
+ def convert(cls: Type[TProject], obj: "Project") -> TProject:
240
242
  """
241
243
  Converts a project from one type to another (e.g., Project to Sim).
242
244
 
@@ -526,7 +528,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
526
528
  f"{', '.join([f'{step}/{index}' for step, index in breakpoints])}")
527
529
  self.__dashboard.stop()
528
530
 
529
- def run(self) -> "Project":
531
+ def run(self) -> TProject:
530
532
  '''
531
533
  Executes the compilation flow defined in the project's flowgraph.
532
534
 
@@ -1238,7 +1240,7 @@ class Project(PathSchemaBase, CommandLineSchema, BaseSchema):
1238
1240
  return None
1239
1241
 
1240
1242
  # Create copy of project to avoid changing user project
1241
- proj: Project = self.copy()
1243
+ proj = self.copy()
1242
1244
  proj.set_flow(ShowFlow(task))
1243
1245
 
1244
1246
  # Setup options:
@@ -26,12 +26,15 @@ import os.path
26
26
 
27
27
  from enum import Enum, auto
28
28
  from functools import cache
29
- from typing import Dict, Type, Tuple, Union, Set, Callable, List, Optional, TextIO, Iterable, Any
29
+ from typing import Dict, Type, Tuple, TypeVar, Union, Set, Callable, List, Optional, \
30
+ TextIO, Iterable, Any
30
31
 
31
32
  from .parameter import Parameter, NodeValue
32
33
  from .journal import Journal
33
34
  from ._metadata import version
34
35
 
36
+ TSchema = TypeVar('TSchema', bound='BaseSchema')
37
+
35
38
 
36
39
  class LazyLoad(Enum):
37
40
  """
@@ -286,10 +289,10 @@ class BaseSchema:
286
289
 
287
290
  # Manifest methods
288
291
  @classmethod
289
- def from_manifest(cls,
292
+ def from_manifest(cls: Type[TSchema],
290
293
  filepath: Union[None, str] = None,
291
294
  cfg: Union[None, Dict] = None,
292
- lazyload: bool = True) -> "BaseSchema":
295
+ lazyload: bool = True) -> TSchema:
293
296
  '''
294
297
  Create a new schema based on the provided source files.
295
298
 
@@ -849,7 +852,7 @@ class BaseSchema:
849
852
  return manifest
850
853
 
851
854
  # Utility functions
852
- def copy(self, key: Optional[Tuple[str, ...]] = None) -> "BaseSchema":
855
+ def copy(self: TSchema, key: Optional[Tuple[str, ...]] = None) -> TSchema:
853
856
  """
854
857
  Returns a copy of this schema.
855
858
 
@@ -1,6 +1,6 @@
1
- from typing import Union, List
1
+ from typing import Type, Union, List
2
2
 
3
- from .baseschema import BaseSchema
3
+ from .baseschema import BaseSchema, TSchema
4
4
 
5
5
 
6
6
  class DocsSchema(BaseSchema):
@@ -11,7 +11,7 @@ class DocsSchema(BaseSchema):
11
11
  """
12
12
 
13
13
  @classmethod
14
- def make_docs(cls) -> Union[BaseSchema, List[BaseSchema]]:
14
+ def make_docs(cls: Type[TSchema]) -> Union[TSchema, List[TSchema]]:
15
15
  """Generate the documentation representation for this schema.
16
16
 
17
17
  By default, this method returns a standard instance of the class itself.
@@ -163,7 +163,7 @@ class EditableSchema:
163
163
  new_schema._BaseSchema__parent = None
164
164
  return new_schema
165
165
 
166
- def rename(self, name: str):
166
+ def rename(self, name: str) -> None:
167
167
  '''
168
168
  Renames a named schema
169
169
  '''
@@ -4,9 +4,9 @@
4
4
  # SC dependencies outside of its directory, since it may be used by tool drivers
5
5
  # that have isolated Python environments.
6
6
 
7
- from typing import Dict, Tuple, Optional, Set, Union, List
7
+ from typing import Dict, Tuple, Optional, Set, Type, Union, List
8
8
 
9
- from .baseschema import BaseSchema, LazyLoad
9
+ from .baseschema import BaseSchema, LazyLoad, TSchema
10
10
 
11
11
 
12
12
  class NamedSchema(BaseSchema):
@@ -76,11 +76,11 @@ class NamedSchema(BaseSchema):
76
76
  return cfg.get("__meta__", {}).get("name", None)
77
77
 
78
78
  @classmethod
79
- def from_manifest(cls,
79
+ def from_manifest(cls: Type[TSchema],
80
80
  filepath: Union[None, str] = None,
81
81
  cfg: Union[None, Dict] = None,
82
82
  lazyload: bool = True,
83
- name: Optional[str] = None):
83
+ name: Optional[str] = None) -> TSchema:
84
84
  '''
85
85
  Create a new schema based on the provided source files.
86
86
 
@@ -115,8 +115,8 @@ class NamedSchema(BaseSchema):
115
115
 
116
116
  return super()._from_dict(manifest, keypath, version=version, lazyload=lazyload)
117
117
 
118
- def copy(self, key: Optional[Tuple[str, ...]] = None) -> "NamedSchema":
119
- copy: NamedSchema = super().copy(key=key)
118
+ def copy(self: TSchema, key: Optional[Tuple[str, ...]] = None) -> TSchema:
119
+ copy = super().copy(key=key)
120
120
 
121
121
  if key and key[-1] != "default":
122
122
  copy.__name = key[-1]
@@ -4,12 +4,14 @@ import sys
4
4
 
5
5
  import os.path
6
6
 
7
- from typing import Set, List, Optional, Union
7
+ from typing import Set, List, Optional, Type, Union, TypeVar
8
8
 
9
9
  from siliconcompiler.schema import BaseSchema, EditableSchema, Parameter, Scope, PerNode
10
10
  from siliconcompiler.schema.utils import trim
11
11
  from siliconcompiler import _metadata
12
12
 
13
+ TCmdSchema = TypeVar("TCmdSchema", bound="CommandLineSchema")
14
+
13
15
 
14
16
  class CommandLineSchema(BaseSchema):
15
17
  '''
@@ -68,14 +70,14 @@ class CommandLineSchema(BaseSchema):
68
70
  EditableSchema(self).insert("cmdarg", name, Parameter(type, **kwargs))
69
71
 
70
72
  @classmethod
71
- def create_cmdline(cls,
73
+ def create_cmdline(cls: Type[TCmdSchema],
72
74
  progname: Optional[str] = None,
73
75
  description: Optional[str] = None,
74
76
  switchlist: Optional[Union[List[str], Set[str]]] = None,
75
77
  version: Optional[str] = None,
76
78
  print_banner: bool = True,
77
79
  use_cfg: bool = False,
78
- use_sources: bool = True) -> BaseSchema:
80
+ use_sources: bool = True) -> TCmdSchema:
79
81
  """
80
82
  Creates an SC command line interface.
81
83
 
siliconcompiler/tool.py CHANGED
@@ -53,7 +53,8 @@ if TYPE_CHECKING:
53
53
  from siliconcompiler.scheduler import SchedulerNode
54
54
  from siliconcompiler import Project
55
55
 
56
- TTask = TypeVar('TTask')
56
+ TTask = TypeVar('TTask', bound='Task')
57
+ TShowTask = TypeVar('TShowTask', bound='ShowTask')
57
58
 
58
59
 
59
60
  class TaskError(Exception):
@@ -2177,7 +2178,8 @@ class ShowTask(Task):
2177
2178
  cls.register_task(c)
2178
2179
 
2179
2180
  @classmethod
2180
- def get_task(cls, ext: Optional[str]) -> Union[Optional["ShowTask"], Set[Type["ShowTask"]]]:
2181
+ def get_task(cls: Type[TShowTask], ext: Optional[str]) -> \
2182
+ Union[Optional[TShowTask], Set[Type[TShowTask]]]:
2181
2183
  """
2182
2184
  Retrieves a suitable show task instance for a given file extension.
2183
2185
 
@@ -0,0 +1,16 @@
1
+ from siliconcompiler.tools.builtin import BuiltinTask
2
+
3
+
4
+ class Wait(BuiltinTask):
5
+ '''
6
+ A wait task that stalls the flow until all inputs are available.
7
+ '''
8
+ def __init__(self):
9
+ super().__init__()
10
+
11
+ def _set_io_files(self):
12
+ # No file IO needed for wait task
13
+ return
14
+
15
+ def task(self):
16
+ return "wait"
@@ -79,8 +79,6 @@ class ExportTask(KLayoutTask, ScreenshotParams):
79
79
  self.add_output_file(ext="lyt")
80
80
  self.add_output_file(ext="lyp")
81
81
 
82
- self.add_required_key("var", "stream")
83
-
84
82
  sc_stream_order = [default_stream, *[s for s in ("gds", "oas") if s != default_stream]]
85
83
  req_set = False
86
84
  for s in sc_stream_order:
@@ -0,0 +1,95 @@
1
+ from typing import Optional, Union
2
+
3
+ from siliconcompiler.tools.klayout import KLayoutTask
4
+
5
+
6
+ class Merge(KLayoutTask):
7
+ """
8
+ Klayout task to merge multiple GDS files and provide prefixing for cell names.
9
+ """
10
+ def __init__(self):
11
+ super().__init__()
12
+
13
+ self.add_parameter("reference", "(<fs,input>,str,str)",
14
+ "Reference fileset or input node for merge operation, structured as "
15
+ "(fs, library name, fileset) or (input, step, index)")
16
+ self.add_parameter("merge", "[(<fs,input>,str,str,str)]",
17
+ "Fileset or input node to be merge with prefix, structured as "
18
+ "(fs, library name, fileset) or (input, step, index) along with prefix "
19
+ "string")
20
+
21
+ def __fix_type(self, type: str) -> str:
22
+ if type == "fileset":
23
+ return "fs"
24
+ return type
25
+
26
+ def set_klayout_reference(self, type: str, source0: str, source1: str,
27
+ step: Optional[str] = None,
28
+ index: Optional[Union[str, int]] = None):
29
+ """
30
+ Sets the reference file for the merge operation.
31
+ Args:
32
+ type (str): The reference fileset or input node.
33
+ source0 (str): The first part of the source (library name or step).
34
+ source1 (str): The second part of the source (fileset name or index).
35
+ step (Optional[str]): The specific step to apply this configuration to.
36
+ index (Optional[Union[str, int]]): The specific index to apply this configuration to.
37
+ """
38
+ self.set("var", "reference", (self.__fix_type(type), source0, source1),
39
+ step=step, index=index)
40
+
41
+ def add_klayout_merge(self, type: str, source0: str, source1: str, prefix: str,
42
+ step: Optional[str] = None,
43
+ index: Optional[Union[str, int]] = None, clobber: bool = False):
44
+ """
45
+ Adds a file to be merged with the reference file.
46
+ Args:
47
+ type (str): The fileset or input node to be merged.
48
+ prefix (str): The prefix to apply during the merge.
49
+ source0 (str): The first part of the source (library name or step).
50
+ source1 (str): The second part of the source (fileset name or index).
51
+ step (Optional[str]): The specific step to apply this configuration to.
52
+ index (Optional[Union[str, int]]): The specific index to apply this configuration to.
53
+ clobber (bool, optional): If True, overwrites the existing list of merge files.
54
+ If False, appends to the list. Defaults to False.
55
+ """
56
+ if clobber:
57
+ self.set("var", "merge", (self.__fix_type(type), source0, source1, prefix),
58
+ step=step, index=index)
59
+ else:
60
+ self.add("var", "merge", (self.__fix_type(type), source0, source1, prefix),
61
+ step=step, index=index)
62
+
63
+ def task(self) -> str:
64
+ return 'merge'
65
+
66
+ def setup(self) -> None:
67
+ super().setup()
68
+
69
+ self.set_script("klayout_merge.py")
70
+
71
+ self.add_required_key("var", "reference")
72
+ self.add_required_key("var", "merge")
73
+
74
+ if self.get("var", "reference"):
75
+ ref_type, ref_source0, ref_source1 = self.get("var", "reference")
76
+ if ref_type == 'input':
77
+ step, index = ref_source0, ref_source1
78
+ self.add_input_file(
79
+ self.compute_input_file_node_name(f"{self.design_topmodule}.gds",
80
+ step, index))
81
+ else:
82
+ lib_name, fileset = ref_source0, ref_source1
83
+ self.add_required_key("library", lib_name, "fileset", fileset, "file", "gds")
84
+ for merge_entry in self.get("var", "merge"):
85
+ merge_type, merge_source0, merge_source1, _ = merge_entry
86
+ if merge_type == 'input':
87
+ step, index = merge_source0, merge_source1
88
+ self.add_input_file(
89
+ self.compute_input_file_node_name(f"{self.design_topmodule}.gds",
90
+ step, index))
91
+ else:
92
+ lib_name, fileset = merge_source0, merge_source1
93
+ self.add_required_key("library", lib_name, "fileset", fileset, "file", "gds")
94
+
95
+ self.add_output_file(ext="gds")
@@ -0,0 +1,79 @@
1
+ import pya
2
+ import sys
3
+
4
+ import os.path
5
+
6
+
7
+ if __name__ == "__main__":
8
+ # SC_ROOT provided by CLI
9
+ sys.path.append(SC_KLAYOUT_ROOT) # noqa: F821
10
+ sys.path.append(SC_TOOLS_ROOT) # noqa: F821
11
+ sys.path.append(SC_ROOT) # noqa: F821
12
+
13
+ from klayout_utils import (
14
+ technology,
15
+ get_schema,
16
+ generate_metrics
17
+ )
18
+
19
+ from klayout_operations import (
20
+ read_layout,
21
+ write_stream
22
+ )
23
+
24
+ schema = get_schema(manifest='sc_manifest.json')
25
+
26
+ # Extract info from manifest
27
+ sc_step = schema.get('arg', 'step')
28
+ sc_index = schema.get('arg', 'index')
29
+ sc_tool = 'klayout'
30
+ sc_task = 'merge'
31
+
32
+ design_name = schema.get('option', 'design')
33
+ fileset = schema.get("option", "fileset")[0]
34
+ design = schema.get("library", design_name, "fileset", fileset, "topmodule")
35
+
36
+ ref_type, ref_source0, ref_source1 = schema.get("tool", sc_tool, "task", sc_task,
37
+ "var", "reference",
38
+ step=sc_step, index=sc_index)
39
+ if ref_type == 'input':
40
+ step, index = ref_source0, ref_source1
41
+ input_file = os.path.join('inputs', f"{design}.{ref_source0}{ref_source1}.gds")
42
+ else:
43
+ input_file = schema.get("library", ref_source0, "fileset", ref_source1, "file", "gds")[0]
44
+
45
+ merge_files = []
46
+ for merge_type, merge_source0, merge_source1, prefix in \
47
+ schema.get("tool", sc_tool, "task", sc_task, "var", "merge",
48
+ step=sc_step, index=sc_index):
49
+ if merge_type == 'input':
50
+ merge_file = os.path.join('inputs', f"{design}.{merge_source0}{merge_source1}.gds")
51
+ else:
52
+ merge_file = schema.get("library", merge_source0, "fileset", merge_source1,
53
+ "file", "gds")[0]
54
+ merge_files.append((prefix, merge_file))
55
+
56
+ tech = technology(design, schema)
57
+ base_layout = read_layout(input_file)
58
+ top_cell = base_layout.top_cell()
59
+ base_layout.technology_name = tech.name
60
+
61
+ for prefix, merge_file in merge_files:
62
+ print(f"[INFO] Merging file '{merge_file}' with prefix '{prefix}'")
63
+ merge_layout = read_layout(merge_file)
64
+
65
+ merge_top = merge_layout.top_cell()
66
+
67
+ new_cell_name = f"{prefix}{merge_top.name}"
68
+ if base_layout.cell(new_cell_name):
69
+ print(f"[WARN] Cell '{new_cell_name}' already exists in base layout. Skipping.")
70
+ continue
71
+ print(f"[INFO] Adding cell '{merge_top.name}' as '{new_cell_name}'")
72
+ new_cell = base_layout.create_cell(new_cell_name)
73
+ new_cell.copy_tree(merge_top)
74
+ cell_inst = pya.CellInstArray(new_cell.cell_index(), pya.Trans())
75
+ top_cell.insert(cell_inst)
76
+
77
+ write_stream(base_layout, f"outputs/{design}.gds", True)
78
+
79
+ generate_metrics()
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "openroad": {
3
3
  "git-url": "https://github.com/The-OpenROAD-Project/OpenROAD.git",
4
- "git-commit": "e7da048335b841ec917d0c421200f2b0eda54f2c",
4
+ "git-commit": "11bd3ead9d12211b72706ac7c8653234cc136b8b",
5
5
  "docker-cmds": [
6
6
  "# Remove OR-Tools files",
7
7
  "RUN rm -f $SC_PREFIX/Makefile $SC_PREFIX/README.md",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "opensta": {
19
19
  "git-url": "https://github.com/parallaxsw/OpenSTA.git",
20
- "git-commit": "0429ac324b2cd4a12783e053b9c85f5d40f4cde8",
20
+ "git-commit": "dda887bc6e5160fd7c15489cc5845eaff72b5252",
21
21
  "auto-update": true
22
22
  },
23
23
  "netgen": {
@@ -168,7 +168,7 @@
168
168
  },
169
169
  "keplerformal": {
170
170
  "git-url": "https://github.com/keplertech/kepler-formal.git",
171
- "git-commit": "c1edd4a196536385255f4c882e4001d534d4638b",
171
+ "git-commit": "d647673f3b3960256069a79e8d92d36a3b89d9a4",
172
172
  "auto-update": false
173
173
  }
174
- }
174
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: siliconcompiler
3
- Version: 0.36.2
3
+ Version: 0.36.3
4
4
  Summary: A compiler framework that automates translation from source code to silicon.
5
5
  Author: Zero ASIC
6
6
  License: Apache License 2.0
@@ -43,7 +43,7 @@ Requires-Dist: fasteners>=0.20
43
43
  Requires-Dist: pandas>=1.1.5
44
44
  Requires-Dist: psutil>=5.8.0
45
45
  Requires-Dist: Jinja2>=2.11.3
46
- Requires-Dist: pyslang==9.1.0
46
+ Requires-Dist: pyslang==10.0.0
47
47
  Requires-Dist: importlib_metadata; python_version < "3.10"
48
48
  Requires-Dist: streamlit==1.46.1; python_full_version != "3.9.7"
49
49
  Requires-Dist: streamlit_agraph==0.0.45; python_full_version != "3.9.7"
@@ -1,6 +1,6 @@
1
1
  siliconcompiler/__init__.py,sha256=I1RN8BMRpuAx9tdx5CLNlpIqT-xg2EwvOB8TcqHQSN0,1114
2
2
  siliconcompiler/_common.py,sha256=1bY1qdFxnstAyhJrkJCBhSlZ614dlmcwL0Bf7NOneyY,1047
3
- siliconcompiler/_metadata.py,sha256=Wbvn4WiI5YksrKzN6imES3t0IdAE2duTyS4WDyLixpg,1286
3
+ siliconcompiler/_metadata.py,sha256=Mw0XQppBx_7N8sQxilBZVpf15z6xqTjfKwipi4VAjs4,1286
4
4
  siliconcompiler/asic.py,sha256=IFKPCZrhXHtyp9qieRqVA1jhKPPmVmYBnC1DvCXpPTo,28836
5
5
  siliconcompiler/checklist.py,sha256=MD0cVYm5RrxSDCBVO1nakGC6LH5hWnzisaF4e0V6eV8,24909
6
6
  siliconcompiler/design.py,sha256=dUQolB1fzQX20WWGxxl8LMaDma0DITv_OY6_qIgPk5M,34766
@@ -8,9 +8,9 @@ siliconcompiler/flowgraph.py,sha256=oGWC84amHIcx2gUO7QMkJ7vphfaOzrkp0LXHPsIZVpU,
8
8
  siliconcompiler/fpga.py,sha256=8uvmIyvWOWx5X1JP3xaSpkA9hVyox4l-hK63aYzN8-w,9075
9
9
  siliconcompiler/library.py,sha256=pPzUaVZXizS6eRLsnSrILwCgBtHfOzWk9CwC5COoHOk,16065
10
10
  siliconcompiler/pdk.py,sha256=rENDQve5edt7EkdgnNfW-mfgJVklShLbvYddaEA1-_k,31581
11
- siliconcompiler/project.py,sha256=tOQsb0WuWyCmGlIWICD0IOYxx7se-CMc94d_0hyj9yY,52191
11
+ siliconcompiler/project.py,sha256=tOeyuf6IcovZBSyXcyaRXw3BQLj9frmWPm1q1k01cQ4,52260
12
12
  siliconcompiler/schematic.py,sha256=0PVFqZvJZW_e2NRGvv6DJPHGjwOlao1qHgZLhgCaEcQ,18385
13
- siliconcompiler/tool.py,sha256=BpwmHLpvepyPoKxEfSspbXtBR0PUf4rjHQ0uzqaRGG8,111783
13
+ siliconcompiler/tool.py,sha256=zdr3Sl019PC0BnCuc_q6XOCvNs-vaZCmMTSMjd1bHdw,111877
14
14
  siliconcompiler/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  siliconcompiler/apps/_common.py,sha256=uldDgTeAEfo1Y0X_hxpr0yjSW0W0c5UaiuSpgk7aUuk,8605
16
16
  siliconcompiler/apps/sc_dashboard.py,sha256=BU3hPC7OzfUpkKEVsBD_46zd4OzHO86eJMB5CaWpVf0,3496
@@ -140,11 +140,11 @@ siliconcompiler/scheduler/validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
140
140
  siliconcompiler/scheduler/validation/email_credentials.json,sha256=hkJs0U2h2Bgm1zxeXvanIJ-prPhpn_aU6e3qwIs7qA0,1997
141
141
  siliconcompiler/schema/__init__.py,sha256=z5zc_4MG53d-Io5ZOFQT0suHkW8oN5CrdpJx28mwGUk,547
142
142
  siliconcompiler/schema/_metadata.py,sha256=5k36T56kA9lriGp2gWKsM_Hc9rfD-Ya_yLd_gXYI4Pw,63
143
- siliconcompiler/schema/baseschema.py,sha256=ZSXwGaF7HiiSSxUFZwYczCOruxnnW1FnPz4_2MRKum8,51690
144
- siliconcompiler/schema/docschema.py,sha256=Hzmq_YDxXDol2iWAwP1grhqYga43NvqVtysCCVMBn3E,924
145
- siliconcompiler/schema/editableschema.py,sha256=3U_pIi_BFrFIdeXgJP-xj8GfUe0ZVvDtPmYGHDgxlSE,6067
143
+ siliconcompiler/schema/baseschema.py,sha256=73b8IW8tDM-0hBbxXnIdkOsLcI0Z1CVY6Y1B2ZUfinE,51769
144
+ siliconcompiler/schema/docschema.py,sha256=sm9O2Y9_fQ0Ksg30EdgUG5-lJw8cVgIOBewReknnLAc,948
145
+ siliconcompiler/schema/editableschema.py,sha256=TaHMMeVnqzLDh33agRyy9fgzzQiA_yzQHtiV7GbIfy4,6075
146
146
  siliconcompiler/schema/journal.py,sha256=i3TYcuqdwq-FCCit8M02W8YbIUsY61mlPHSS-7Y0axc,6538
147
- siliconcompiler/schema/namedschema.py,sha256=ClKVd1hTDN_i9hrH3yNtF4FI4K_YYsPsuDnpE2hdI6M,3731
147
+ siliconcompiler/schema/namedschema.py,sha256=SJRZavuEHGtmdh5r_ZwaTVILlylPlcRG75Y_2RSV0Kc,3762
148
148
  siliconcompiler/schema/parameter.py,sha256=Y-TfK__m6NsudJXG3iTZHr5XlUg8JbIUZsg-VG6jnPo,34721
149
149
  siliconcompiler/schema/parametertype.py,sha256=oEkZN81sftAgnEEv84M9Vz8UPxwIRioxE6sJszV1A8o,11549
150
150
  siliconcompiler/schema/parametervalue.py,sha256=uqzWZ9lEmvqZsc0izkCd-anQVjdlLLitj4utEQQQzCY,30163
@@ -154,7 +154,7 @@ siliconcompiler/schema/docs/__init__.py,sha256=alRd_dr35ryJDKRaMx1dPpQ-NMBI-ldwH
154
154
  siliconcompiler/schema/docs/schemagen.py,sha256=rLHnCabkvy0cTzkuzxXSCuI4qRaefdpTI_ijjZBrdfs,20859
155
155
  siliconcompiler/schema/docs/utils.py,sha256=SCR9hYlQHUWbC6fT7LttKIfktzhMfrCL0BVxynYWtLc,10142
156
156
  siliconcompiler/schema_support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
- siliconcompiler/schema_support/cmdlineschema.py,sha256=r-v1lOMOx0wehG3-hgy6JuJVuzivhxt5t83KwxS8pfs,10691
157
+ siliconcompiler/schema_support/cmdlineschema.py,sha256=-JGL-6Kzi2BbqlnufYmNUbKu7Xw4JLo8ndQ2Jjk-JhI,10787
158
158
  siliconcompiler/schema_support/dependencyschema.py,sha256=LY6RhtxLOxjOBj7FBw88i0TlLd7WZlNh5omHBtU5VO8,9895
159
159
  siliconcompiler/schema_support/filesetschema.py,sha256=ouKKUSNCry7ggzya8wGFvbEf2u3GwyERMhyYxUf3fmM,11675
160
160
  siliconcompiler/schema_support/metric.py,sha256=mLzdtpM76l2cPINGWONrAjBMU28ZnQR_yLOGMYBLBV4,16158
@@ -189,6 +189,7 @@ siliconcompiler/tools/builtin/minimum.py,sha256=B5l6VD55S1a5GqIxBrXYspBBVwHevpmb
189
189
  siliconcompiler/tools/builtin/mux.py,sha256=N4lkAHo4jemBqkRkWCb07b3TAV7s6B1FURUvt6w0L9g,2895
190
190
  siliconcompiler/tools/builtin/nop.py,sha256=t93mTLPO0t0oXlYEn8DtHol2SLJIJSM73QVTlCl6RWQ,243
191
191
  siliconcompiler/tools/builtin/verify.py,sha256=zR_OgvJkLytOdR0cAPNJ1vgaWzR7EVLTgxtEKFZhZYc,2389
192
+ siliconcompiler/tools/builtin/wait.py,sha256=sUThkSbEioJhGuH7Ds41c7FEpGY1NclTLRcmmNTofTY,347
192
193
  siliconcompiler/tools/chisel/__init__.py,sha256=3wiW0b3cPj_ULHM63pBIxcW-aLmNeSafSlyYHhHw7Lk,632
193
194
  siliconcompiler/tools/chisel/convert.py,sha256=2P7rth3gxKLa1VP0S2ItGQvMEvCcsvKBF6VBEVQvP4Y,7282
194
195
  siliconcompiler/tools/chisel/template/SCDriver.scala,sha256=lTQ6EQURgCtVJferGIKyeOntPVAr2P1itLP24njVT7w,193
@@ -214,12 +215,14 @@ siliconcompiler/tools/keplerformal/lec.py,sha256=SePSOeQm-VbpnblcZXU7KyfK8MWzk4M
214
215
  siliconcompiler/tools/klayout/__init__.py,sha256=t2WHhiUAltGLFkw0N7wzs0m9Hx1xZo2tGx4d3uKSusY,8670
215
216
  siliconcompiler/tools/klayout/convert_drc_db.py,sha256=ekzfQJ5Gef0Xo9KzrbXgCC4P5KpGKS4ZSfWHrM9Gmic,812
216
217
  siliconcompiler/tools/klayout/drc.py,sha256=DgdUMVmNEQ56Imd2Z5LYkuBr7yUAK-wy6_cBGAUGc9E,3530
217
- siliconcompiler/tools/klayout/export.py,sha256=42fviCWLIyMsXvSygGUErq1oypKqZNh2X1qlOFRFuqc,5007
218
+ siliconcompiler/tools/klayout/export.py,sha256=oxBFGrfFk2svpwzHoqhWGlupfCfygnWIMYEgRMyE-RY,4959
219
+ siliconcompiler/tools/klayout/merge.py,sha256=c3ic52b26vom9VT08lSW-Of7AzABs04w9_jIWF34os0,4481
218
220
  siliconcompiler/tools/klayout/operations.py,sha256=sUSHDPsgDm6PnehgANQIlDP6K2rnNLgMpQEXVakBQ3c,8681
219
221
  siliconcompiler/tools/klayout/screenshot.py,sha256=hpUfZJ6dcgYypyLtcgfWByJOCPh4r16UvmoX_DgbOgg,4979
220
222
  siliconcompiler/tools/klayout/show.py,sha256=Lkmf90qOomLvrYELRhSSzH9F2i7cgsAfETHU2lVRxDs,1494
221
223
  siliconcompiler/tools/klayout/scripts/klayout_convert_drc_db.py,sha256=QHsaiKybpj6Uisq7wLapx5xjABA1OMvxXYBHoaopPV4,5791
222
224
  siliconcompiler/tools/klayout/scripts/klayout_export.py,sha256=CpoVfoK1sjC5P0tSIEWHZrQP1D4aQdGWovbUFutAL_Y,6457
225
+ siliconcompiler/tools/klayout/scripts/klayout_merge.py,sha256=eLBjV17EzONquNtDdl6qoznhxLEcw1Y8WkW8SMAEMfc,2838
223
226
  siliconcompiler/tools/klayout/scripts/klayout_operations.py,sha256=whe-S6APZ9kreybanTvGGotd043NgatbFg6NEd6eka0,13264
224
227
  siliconcompiler/tools/klayout/scripts/klayout_show.py,sha256=o3aFDSWcotaE3Qb27gh-5uzl0OsMsH_7dkSC2stztzE,10306
225
228
  siliconcompiler/tools/klayout/scripts/klayout_utils.py,sha256=9TiI-39WOGqXKsdjZDRhjtpsextORuZnuAMYbcRfaKM,7877
@@ -360,7 +363,7 @@ siliconcompiler/tools/yosys/techmaps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
360
363
  siliconcompiler/tools/yosys/techmaps/lcu_kogge_stone.v,sha256=M4T-ygiKmlsprl5eGGLaV5w6HVqlEepn0wlUDmOkapg,773
361
364
  siliconcompiler/tools/yosys/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
362
365
  siliconcompiler/tools/yosys/templates/abc.const,sha256=TAq9ThdLMYCJGrtToEU0gWcLuEtjE4Gk8huBbTm1v-I,116
363
- siliconcompiler/toolscripts/_tools.json,sha256=I4DJo2XABBfkduAkOF4nMBO68X2WpACH8KhU6hWO0Jc,5271
366
+ siliconcompiler/toolscripts/_tools.json,sha256=PACi-gc0JzK4NBl2nm4BbiVPpKC7mvvX_knoSLR0Plo,5272
364
367
  siliconcompiler/toolscripts/_tools.py,sha256=P30KY_xbbjl8eHGsPAxDcAzWvJJpiL07ZfGZZDQbdR8,7174
365
368
  siliconcompiler/toolscripts/rhel8/install-chisel.sh,sha256=RJ7BiZhsXBLTgQhHUcRZmHqhKB6syVaC2nvVoGrIXOI,709
366
369
  siliconcompiler/toolscripts/rhel8/install-icarus.sh,sha256=EW7308IUGYOx7A22s7s0tNq90nHhrpHHUMrx3cd9lMM,962
@@ -481,9 +484,9 @@ siliconcompiler/utils/paths.py,sha256=322TbbEaU5wM-06Xo-E8IlzMNV3DRi4GKDwg2EgTry
481
484
  siliconcompiler/utils/settings.py,sha256=8Zj5LDP32RAg8xisMJFgTxaoY7NWT90nAxaggk7K0sA,5819
482
485
  siliconcompiler/utils/showtools.py,sha256=ZWD2frgt0t2Eh8S9Hl3CwGEa1cnNiQx-06pWtyDTiic,1375
483
486
  siliconcompiler/utils/units.py,sha256=mppo7T5xI2P2S7SweE_qsOuoTc7RezVX61G2whCzpV4,6261
484
- siliconcompiler-0.36.2.dist-info/licenses/LICENSE,sha256=lbLR6sRo_CYJOf7SVgHi-U6CZdD8esESEZE5TZazOQE,10766
485
- siliconcompiler-0.36.2.dist-info/METADATA,sha256=uhE-GmBSSTs8tLWD93WzQJdPJJftu_YLi6ntMJEZ2Lw,11302
486
- siliconcompiler-0.36.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
487
- siliconcompiler-0.36.2.dist-info/entry_points.txt,sha256=5I-z7cmFNPRpD_x1dMQnm-oLwTPOMURxD5frvUM0GE8,832
488
- siliconcompiler-0.36.2.dist-info/top_level.txt,sha256=H8TOYhnEUZAV1RJTa8JRtjLIebwHzkQUhA2wkNU2O6M,16
489
- siliconcompiler-0.36.2.dist-info/RECORD,,
487
+ siliconcompiler-0.36.3.dist-info/licenses/LICENSE,sha256=lbLR6sRo_CYJOf7SVgHi-U6CZdD8esESEZE5TZazOQE,10766
488
+ siliconcompiler-0.36.3.dist-info/METADATA,sha256=XoPtXhszKPVyjamqz-arGRyPZIz2kOzQO0mGwo85L4I,11303
489
+ siliconcompiler-0.36.3.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
490
+ siliconcompiler-0.36.3.dist-info/entry_points.txt,sha256=5I-z7cmFNPRpD_x1dMQnm-oLwTPOMURxD5frvUM0GE8,832
491
+ siliconcompiler-0.36.3.dist-info/top_level.txt,sha256=H8TOYhnEUZAV1RJTa8JRtjLIebwHzkQUhA2wkNU2O6M,16
492
+ siliconcompiler-0.36.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5