librelane 2.4.0.dev2__py3-none-any.whl → 2.4.7__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 (55) hide show
  1. librelane/__init__.py +1 -1
  2. librelane/__main__.py +34 -27
  3. librelane/common/__init__.py +2 -0
  4. librelane/common/cli.py +1 -1
  5. librelane/common/drc.py +1 -0
  6. librelane/common/generic_dict.py +1 -1
  7. librelane/common/metrics/__main__.py +1 -1
  8. librelane/common/misc.py +58 -2
  9. librelane/common/tcl.py +2 -1
  10. librelane/common/types.py +2 -3
  11. librelane/config/__main__.py +1 -4
  12. librelane/config/flow.py +2 -2
  13. librelane/config/preprocessor.py +1 -1
  14. librelane/config/variable.py +136 -7
  15. librelane/container.py +55 -31
  16. librelane/env_info.py +129 -115
  17. librelane/examples/hold_eco_demo/config.yaml +18 -0
  18. librelane/examples/hold_eco_demo/demo.v +27 -0
  19. librelane/flows/cli.py +39 -23
  20. librelane/flows/flow.py +100 -36
  21. librelane/help/__main__.py +39 -0
  22. librelane/scripts/magic/def/mag_gds.tcl +0 -2
  23. librelane/scripts/magic/drc.tcl +0 -1
  24. librelane/scripts/magic/gds/extras_mag.tcl +0 -2
  25. librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -1
  26. librelane/scripts/magic/lef/extras_maglef.tcl +0 -2
  27. librelane/scripts/magic/lef/maglef.tcl +0 -1
  28. librelane/scripts/magic/wrapper.tcl +2 -0
  29. librelane/scripts/odbpy/defutil.py +15 -10
  30. librelane/scripts/odbpy/eco_buffer.py +182 -0
  31. librelane/scripts/odbpy/eco_diode.py +140 -0
  32. librelane/scripts/odbpy/ioplace_parser/__init__.py +1 -1
  33. librelane/scripts/odbpy/ioplace_parser/parse.py +1 -1
  34. librelane/scripts/odbpy/power_utils.py +8 -6
  35. librelane/scripts/odbpy/reader.py +17 -13
  36. librelane/scripts/openroad/common/io.tcl +66 -2
  37. librelane/scripts/openroad/gui.tcl +23 -1
  38. librelane/state/design_format.py +16 -1
  39. librelane/state/state.py +11 -3
  40. librelane/steps/__init__.py +1 -1
  41. librelane/steps/__main__.py +4 -4
  42. librelane/steps/checker.py +7 -8
  43. librelane/steps/klayout.py +11 -1
  44. librelane/steps/magic.py +24 -14
  45. librelane/steps/misc.py +5 -0
  46. librelane/steps/odb.py +193 -28
  47. librelane/steps/openroad.py +64 -47
  48. librelane/steps/pyosys.py +18 -1
  49. librelane/steps/step.py +36 -17
  50. librelane/steps/yosys.py +9 -1
  51. {librelane-2.4.0.dev2.dist-info → librelane-2.4.7.dist-info}/METADATA +10 -11
  52. {librelane-2.4.0.dev2.dist-info → librelane-2.4.7.dist-info}/RECORD +54 -50
  53. {librelane-2.4.0.dev2.dist-info → librelane-2.4.7.dist-info}/entry_points.txt +1 -0
  54. librelane/scripts/odbpy/exception_codes.py +0 -17
  55. {librelane-2.4.0.dev2.dist-info → librelane-2.4.7.dist-info}/WHEEL +0 -0
librelane/steps/step.py CHANGED
@@ -53,7 +53,13 @@ from ..config import (
53
53
  Variable,
54
54
  universal_flow_config_variables,
55
55
  )
56
- from ..state import DesignFormat, DesignFormatObject, State, InvalidState, StateElement
56
+ from ..state import (
57
+ DesignFormat,
58
+ DesignFormatObject,
59
+ State,
60
+ InvalidState,
61
+ StateElement,
62
+ )
57
63
  from ..common import (
58
64
  GenericDict,
59
65
  GenericImmutableDict,
@@ -619,6 +625,7 @@ class Step(ABC):
619
625
  *,
620
626
  docstring_override: str = "",
621
627
  use_dropdown: bool = False,
628
+ myst_anchors: bool = False,
622
629
  ): # pragma: no cover
623
630
  """
624
631
  Renders Markdown help for this step to a string.
@@ -661,7 +668,10 @@ class Step(ABC):
661
668
  for input, output in zip_longest(Self.inputs, Self.outputs):
662
669
  input_str = ""
663
670
  if input is not None:
664
- input_str = f"{input.value.name} (.{input.value.extension})"
671
+ optional = "?" if input.value.optional else ""
672
+ input_str = (
673
+ f"{input.value.name}{optional} (.{input.value.extension})"
674
+ )
665
675
 
666
676
  output_str = ""
667
677
  if output is not None:
@@ -673,25 +683,22 @@ class Step(ABC):
673
683
  result += f"| {input_str} | {output_str} |\n"
674
684
 
675
685
  if len(Self.config_vars):
686
+ config_var_anchors = f"({Self.id.lower()}-configuration-variables)="
676
687
  result += textwrap.dedent(
677
688
  f"""
678
- ({Self.id.lower()}-configuration-variables)=
689
+ {config_var_anchors * myst_anchors}
679
690
  #### Configuration Variables
680
-
681
- | Variable Name | Type | Description | Default | Units |
682
- | - | - | - | - | - |
683
691
  """
684
692
  )
685
- for var in Self.config_vars:
686
- units = var.units or ""
687
- pdk_superscript = "<sup>PDK</sup>" if var.pdk else ""
688
- result += f"| `{var.name}`{{#{var._get_docs_identifier(Self.id)}}}{pdk_superscript} | {var.type_repr_md(for_document=True)} | {var.desc_repr_md()} | `{var.default}` | {units} |\n"
689
- result += "\n"
693
+ result += Variable._render_table_md(
694
+ Self.config_vars, myst_anchor_owner_id=Self.id if myst_anchors else None
695
+ )
690
696
 
697
+ step_anchor = f"(step-{slugify(Self.id.lower())})="
691
698
  result = (
692
699
  textwrap.dedent(
693
700
  f"""
694
- (step-{slugify(Self.id.lower())})=
701
+ {step_anchor * myst_anchors}
695
702
  ### {Self.__get_desc()}
696
703
  """
697
704
  )
@@ -703,11 +710,22 @@ class Step(ABC):
703
710
  @classmethod
704
711
  def display_help(Self): # pragma: no cover
705
712
  """
706
- IPython-only. Displays Markdown help for a given step.
713
+ Displays Markdown help for this Step.
714
+
715
+ If in an IPython environment, it's rendered using ``IPython.display``.
716
+ Otherwise, it's rendered using ``rich.markdown``.
707
717
  """
708
- import IPython.display
718
+ try:
719
+ get_ipython() # type: ignore
720
+
721
+ import IPython.display
709
722
 
710
- IPython.display.display(IPython.display.Markdown(Self.get_help_md()))
723
+ IPython.display.display(IPython.display.Markdown(Self.get_help_md()))
724
+ except NameError:
725
+ from ..logging import console
726
+ from rich.markdown import Markdown
727
+
728
+ console.log(Markdown(Self.get_help_md()))
711
729
 
712
730
  def _repr_markdown_(self) -> str: # pragma: no cover
713
731
  """
@@ -1141,7 +1159,7 @@ class Step(ABC):
1141
1159
 
1142
1160
  for input in self.inputs:
1143
1161
  value = state_in_result[input]
1144
- if value is None:
1162
+ if value is None and not input.value.optional:
1145
1163
  raise StepException(
1146
1164
  f"{type(self).__name__}: missing required input '{input.name}'"
1147
1165
  ) from None
@@ -1416,7 +1434,8 @@ class Step(ABC):
1416
1434
  A factory singleton for Steps, allowing steps types to be registered and then
1417
1435
  retrieved by name.
1418
1436
 
1419
- See https://en.wikipedia.org/wiki/Factory_(object-oriented_programming) for
1437
+ See
1438
+ `Factory (object-oriented programming) on Wikipedia <https://en.wikipedia.org/wiki/Factory_(object-oriented_programming)>`_
1420
1439
  a primer.
1421
1440
  """
1422
1441
 
librelane/steps/yosys.py CHANGED
@@ -248,6 +248,14 @@ class YosysStep(TclStep):
248
248
 
249
249
  @Step.factory.register()
250
250
  class EQY(Step):
251
+ """
252
+ Experimental: Uses the `EQY <https://github.com/yosyshq/eqy>`_ utility to
253
+ perform an RTL vs. Netlist equivalence check.
254
+
255
+ Currently, you are expected to provide your own EQY script if you want this
256
+ to work properly.
257
+ """
258
+
251
259
  id = "Yosys.EQY"
252
260
  name = "Equivalence Check"
253
261
  long_name = "RTL/Netlist Equivalence Check"
@@ -262,7 +270,7 @@ class EQY(Step):
262
270
  Variable(
263
271
  "EQY_SCRIPT",
264
272
  Optional[Path],
265
- "An optional override for the automatically generated EQY script for more complex designs.",
273
+ "The EQY script to use. If unset, a generic EQY script will be generated, but this fails in a number of scenarios.",
266
274
  ),
267
275
  Variable(
268
276
  "MACRO_PLACEMENT_CFG",
@@ -1,32 +1,31 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: librelane
3
- Version: 2.4.0.dev2
3
+ Version: 2.4.7
4
4
  Summary: An infrastructure for implementing chip design flows
5
5
  Home-page: https://github.com/librelane/librelane
6
6
  License: Apache-2.0
7
7
  Author: Mohamed Gaber
8
8
  Author-email: me@donn.website
9
- Requires-Python: >=3.8,<4
9
+ Requires-Python: >=3.8.1,<4
10
10
  Classifier: License :: OSI Approved :: Apache Software License
11
11
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.8
13
12
  Classifier: Programming Language :: Python :: 3.9
14
13
  Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
16
15
  Classifier: Programming Language :: Python :: 3.12
17
16
  Classifier: Programming Language :: Python :: 3.13
18
- Requires-Dist: ciel (>=0.16.0)
19
- Requires-Dist: click (>=8,<9)
17
+ Requires-Dist: ciel (>=2.0.3,<3)
18
+ Requires-Dist: click (>=8,<8.2)
20
19
  Requires-Dist: cloup (>=3.0.5,<4)
21
20
  Requires-Dist: deprecated (>=1.2.10,<2)
22
21
  Requires-Dist: httpx (>=0.22.0,<0.29)
23
22
  Requires-Dist: klayout (>=0.29.0,<0.31.0)
24
- Requires-Dist: libparse (>=0.3.1,<1)
23
+ Requires-Dist: lln-libparse (==0.56.*)
25
24
  Requires-Dist: lxml (>=4.9.0)
26
25
  Requires-Dist: psutil (>=5.9.0)
27
26
  Requires-Dist: pyyaml (>=5,<7)
28
27
  Requires-Dist: rapidfuzz (>=3.9.0,<4)
29
- Requires-Dist: rich (>=12,<14)
28
+ Requires-Dist: rich (>=12,<15)
30
29
  Requires-Dist: semver (>=3.0.2,<4.0.0)
31
30
  Requires-Dist: yamlcore (>=0.0.2,<0.0.3)
32
31
  Project-URL: Documentation, https://librelane.readthedocs.io
@@ -36,7 +35,7 @@ Description-Content-Type: text/markdown
36
35
  <h1 align="center">LibreLane</h1>
37
36
  <p align="center">
38
37
  <a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License: Apache 2.0"/></a>
39
- <a href="https://www.python.org"><img src="https://img.shields.io/badge/Python-3.8-3776AB.svg?style=flat&logo=python&logoColor=white" alt="Python 3.8 or higher" /></a>
38
+ <a href="https://www.python.org"><img src="https://img.shields.io/badge/Python-3.8-3776AB.svg?style=flat&logo=python&logoColor=white" alt="Python 3.8.1 or higher" /></a>
40
39
  <a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code Style: black"/></a>
41
40
  <a href="https://mypy-lang.org/"><img src="https://www.mypy-lang.org/static/mypy_badge.svg" alt="Checked with mypy"/></a>
42
41
  <a href="https://nixos.org/"><img src="https://img.shields.io/static/v1?logo=nixos&logoColor=white&label=&message=Built%20with%20Nix&color=41439a" alt="Built with Nix"/></a>
@@ -73,7 +72,7 @@ Colaboratory by following
73
72
 
74
73
  You'll need the following:
75
74
 
76
- * Python **3.8** or higher with PIP, Venv and Tkinter
75
+ * Python **3.8.1** or higher with PIP, Venv and Tkinter
77
76
 
78
77
  ### Nix (Recommended)
79
78
 
@@ -81,7 +80,7 @@ Works for macOS and Linux (x86-64 and aarch64). Recommended, as it is more
81
80
  integrated with your filesystem and overall has less upload and download deltas.
82
81
 
83
82
  See
84
- [Nix-based installation](https://librelane.readthedocs.io/en/latest/getting_started/common/nix_installation/index.html)
83
+ [Nix-based installation](https://librelane.readthedocs.io/en/latest/installation/nix_installation/index.html)
85
84
  in the docs for more info.
86
85
 
87
86
  ### Docker
@@ -89,7 +88,7 @@ in the docs for more info.
89
88
  Works for Windows, macOS and Linux (x86-64 and aarch64).
90
89
 
91
90
  See
92
- [Docker-based installation](https://librelane.readthedocs.io/en/latest/getting_started/common/docker_installation/index.html)
91
+ [Docker-based installation](https://librelane.readthedocs.io/en/latest/installation/docker_installation/index.html)
93
92
  in the docs for more info.
94
93
 
95
94
  Do note you'll need to add `--dockerized` right after `librelane` in most CLI
@@ -1,31 +1,33 @@
1
- librelane/__init__.py,sha256=EMpoZrRmS_wsweKjhyAg52OXCK7HWQ8o8CVrYaX4ub0,1220
2
- librelane/__main__.py,sha256=48sW8mh1MNbG0Mf75f5LekXzerbaEASLInQSrvQqPw4,14802
1
+ librelane/__init__.py,sha256=Xbz6e-J9pNxv0AIi89-mApMEQQtRgxJyzHS6yYc00Y0,1221
2
+ librelane/__main__.py,sha256=XeQHNgw0w3ODYxJ9K-dQVfQMMoguteytCrXRquv3RjQ,15055
3
3
  librelane/__version__.py,sha256=dbE4stCACDmIoxgKksesAkTa-_hi5dW6nPLWw9Pfq3Q,1486
4
- librelane/common/__init__.py,sha256=LrzxjZKJu3-i8oEYdXtV1IxkXicHtoSUNRcOGrGVGsw,1516
5
- librelane/common/cli.py,sha256=Ob7mDR77qX1DZ7MXBQ4EPGS3dAO0o7b4njIloOxoB-Q,2351
6
- librelane/common/drc.py,sha256=2N5jPbM0cxnOj2Kci2AhHTTgHcynTtkV118ii3kq7IU,9603
7
- librelane/common/generic_dict.py,sha256=xJjHIRvhp4vDk98kvaj8VPa3nUubMedaSfB5OL08sOE,10008
4
+ librelane/common/__init__.py,sha256=tUX6pVEPrf7LnX7OiIaQFCyB1fs5AgwGt0xR2OHWC5Q,1557
5
+ librelane/common/cli.py,sha256=xi48GBGHRsYrLGwx40ARwpykHx7GnuHbJjHxjOwtZ5Y,2349
6
+ librelane/common/drc.py,sha256=3AUxg986X_lCPrQvDkLekVTeC4-4qS7ZDpVMKlVkEmo,9638
7
+ librelane/common/generic_dict.py,sha256=ASa5wtVcLuGlsBqGfLxLYXrYksqQB62iHljV04plIqI,10010
8
8
  librelane/common/metrics/__init__.py,sha256=nzdmeia1fN4CDPT604v-OHaBVydz-M4hz232g-jxJ6M,1521
9
- librelane/common/metrics/__main__.py,sha256=jU7UXuGugZ_ojR4ml8Q6KHARiMF8QFBnqlMgtJRgJRI,12472
9
+ librelane/common/metrics/__main__.py,sha256=VfoOHFkGXtei6GLkPUD42X6io8QKFCHhxLMWOXPz_5E,12473
10
10
  librelane/common/metrics/library.py,sha256=CG7rubLdjuCQL9-9bzAC-64hf-KlH-iu_Fg0oKuesqs,7373
11
11
  librelane/common/metrics/metric.py,sha256=h3Xd26z5M80IJgVmmrBTjKcdGLb4I0wyjM-H4jdyi_0,6990
12
12
  librelane/common/metrics/util.py,sha256=Bl_9znlot7-Os2VigYLSmMf56aAkGdv3evWz9vfK7K4,9344
13
- librelane/common/misc.py,sha256=gxf5kDwn6m1Zib9BWK19nfAb2HLEBVlH-OyR3MiGpFQ,12408
13
+ librelane/common/misc.py,sha256=q6LRHIld6rs6VbmPBQHXlxfqS9O1z9mtMN-rUdXwMec,14466
14
14
  librelane/common/ring_buffer.py,sha256=DGFen9y0JOmiL7E27tmzDTVSJKZtV-waF9hl5Rz9uek,1898
15
- librelane/common/tcl.py,sha256=G0__oR6azVCS2Aue87zboba7vAR7v-SVQeUbqfviiDA,2709
15
+ librelane/common/tcl.py,sha256=eNHMyAU_96z_ABPV56HMLDe__Zm2QLZBxR5PjWJN1t8,2718
16
16
  librelane/common/toolbox.py,sha256=fBMkpoOOL7rdbwi3W3-U5rrCxSplAqFZtlTcJtjLgMY,20968
17
17
  librelane/common/tpe.py,sha256=Txj0fVscXSDJTYmEKZ2ESFHOeqrhHnaPPiwWBgyx4g8,1285
18
- librelane/common/types.py,sha256=oclAQkeluz_iopI_28clHzxvac7gN5moT8Rzipy5mgM,3468
18
+ librelane/common/types.py,sha256=xo_OKq-2ue7JVpyQb6oUu6JuVSnLNEFKQCPBqNhZnQ4,3509
19
19
  librelane/config/__init__.py,sha256=lbJmD5CbrrrnaNdIUWqFIK488ea0uyej3iExh-9mkgE,1107
20
- librelane/config/__main__.py,sha256=6KSXxM4qNE2yJhizUsF1kdMsY1kY7hLHoPoz50POsS8,4532
20
+ librelane/config/__main__.py,sha256=NsJGoIOb950mdXql1zmzSq10wuFovK9NGWm011NNJ3A,4474
21
21
  librelane/config/config.py,sha256=WUznKnVYLn7ZNbUL4YMkMX7akmyc2S26ksQSicKeN1c,34964
22
- librelane/config/flow.py,sha256=qCGaUOj12j57gORzoE10m7_WG-n600llnFDMlZagUF4,16660
22
+ librelane/config/flow.py,sha256=M69rKdNxoshaoSyMzUyUq8ZemtbYjoNEllDlCTzioo0,16771
23
23
  librelane/config/pdk_compat.py,sha256=rznq5xIny9M0PmddhPOGtCIrSdv98ysAoYgkpyM0gUA,8450
24
- librelane/config/preprocessor.py,sha256=I239Y01dC2o5eb1UtcSbLdybVrZgqGyDr7ecT234I4Y,14913
24
+ librelane/config/preprocessor.py,sha256=jakORJjdoJhXky45oCiVYw51GDoxKjD3HJlTTAYRDaw,14913
25
25
  librelane/config/removals.py,sha256=lJ0xpkCqnZAdA_ug4yq0NDjRBFuw4XsdORwymbEVGyQ,2907
26
- librelane/config/variable.py,sha256=NbR4h1Y8h4pFr6ZLUPVTUzpWB9nmlgbD-zb1Z2Ct-ww,26057
27
- librelane/container.py,sha256=3KHxs3dUSVUZVYsS6fsA7dD3Q4QEQEzRxgXZZh9dzi0,7554
28
- librelane/env_info.py,sha256=vAE9AZ_vDFLt7Srtg4ZywPzE6vgVhCrIvg8PP25-BJ8,10460
26
+ librelane/config/variable.py,sha256=HWPizQgSFEXCrzzHP76s_uw1McxH0Kh7H5-y3mv8Yo4,30623
27
+ librelane/container.py,sha256=GN1lqVguuqPAuTxINii-bWKBKmIQ-VJc0WHPDEp73sU,8829
28
+ librelane/env_info.py,sha256=xF9iqwwJv5yZz7n7BTrrT_yP3Dp1HjAOUObNE9k_1g4,11074
29
+ librelane/examples/hold_eco_demo/config.yaml,sha256=InDj4pS6o6TpyvQZyR3qCrYcIHdmCd6l04wqanKnK_A,490
30
+ librelane/examples/hold_eco_demo/demo.v,sha256=0In_gDLH1svr4xK59l5N15VjCNtN74uZx1yT5tIVGrM,471
29
31
  librelane/examples/spm/config.yaml,sha256=YKBm0lsY3AJZNcxAh1sQ1QMmJeVCpOpil6dw_RgQh4c,633
30
32
  librelane/examples/spm/pin_order.cfg,sha256=-8mTGFKnES0vhQATfaE2TXN_mdCZ3SZIN90Src1l6fY,52
31
33
  librelane/examples/spm/src/impl.sdc,sha256=wP18UoVlOJ9q4lmUoa3XpgcpPdyzEqHBNxCgOOU7QH0,2961
@@ -42,12 +44,13 @@ librelane/examples/spm-user_project_wrapper/user_project_wrapper.v,sha256=zc6GC5
42
44
  librelane/flows/__init__.py,sha256=ghtmUG-taVpHJ3CKJRYZGn3dU0r93araT1EIGlBEsxg,896
43
45
  librelane/flows/builtins.py,sha256=tR14Qc1ZUey2w-Ar4DWOvxuP7LGPtMecCJq8WgcYJpk,773
44
46
  librelane/flows/classic.py,sha256=fI-LNhrvi7lzfsHRyJv_yjgFbpbWBVxN-9QpsgDxpTQ,10940
45
- librelane/flows/cli.py,sha256=P2LCFn5_RQ88yB0WuetpLAuWeKQXd-DrpCOMgnVh9Mg,16705
46
- librelane/flows/flow.py,sha256=wyYw-w6NIbCCfyfgwiq3BpztLlvZkRFUUeePoI9DpaU,34167
47
+ librelane/flows/cli.py,sha256=4cJT7l9Nl-RJMMqWrS6W5QpbomM5aPYBToXdyZjwF4I,17443
48
+ librelane/flows/flow.py,sha256=f7aZgkb42L0c7PUQvVWuaDRTh77rkKNURzS9Nb-SSNE,36865
47
49
  librelane/flows/misc.py,sha256=32Om3isexesfKKiJZCajNmINc-xdv7eVx_tgoh9SR6U,2015
48
50
  librelane/flows/optimizing.py,sha256=OwZz6WGmXpliwO8vtmhjKHD-kzDyNv-zoCECZIigXsI,6076
49
51
  librelane/flows/sequential.py,sha256=DLzgvHKq0cO-U-eLO98zIFRnhGLfRv80_ozSX973TlI,13350
50
52
  librelane/flows/synth_explore.py,sha256=8mpeuG6oxeEXVQi4NwS4I415eCu7Ak6DN4oK30h1eCQ,7418
53
+ librelane/help/__main__.py,sha256=gnm0yi-Ih8YoyY2cMiHONV2ZzR-tvHfdEHCb28YQJZ0,1243
51
54
  librelane/logging/__init__.py,sha256=mrTnzjpH6AOu2CiDZYfOMCVByAS2Xeg9HS4FJyXsJOE,1043
52
55
  librelane/logging/logger.py,sha256=kA61TGsR00Fi6kQSxgTC1pHpS_-zqC1PdQnYqnk2TWY,8632
53
56
  librelane/open_pdks_rev,sha256=_q6FiO0UljepWU99r9IgkbLrKLDIPbO-80--OFWrZxA,41
@@ -64,38 +67,39 @@ librelane/scripts/magic/Readme.md,sha256=NaQrlxY8l8GT-kokJNlMHeAR3PksWVbFpSznOWW
64
67
  librelane/scripts/magic/common/read.tcl,sha256=BcTGgul2TuSVd0TmhXrR0mvwE4hVO6NaHcy_5uLsOMI,3132
65
68
  librelane/scripts/magic/def/antenna_check.tcl,sha256=T_r1CWgySFVlLMcoTrNXQ_aMRs_fBAUYUUjyXJV1Sg0,1019
66
69
  librelane/scripts/magic/def/mag.tcl,sha256=PuL3MH6pmZP5Qh2cJ0GygWNzaYjdCSCoAbOli-JB4fs,707
67
- librelane/scripts/magic/def/mag_gds.tcl,sha256=pPNKntSkVM0fzHuyVrUtxWc7HWY2-MIMoId6PW8SIT4,2137
68
- librelane/scripts/magic/drc.tcl,sha256=slHVfI6QoApKc2S6V3MIqcV5xnKRMJ_1wSGleJzkHpk,2402
70
+ librelane/scripts/magic/def/mag_gds.tcl,sha256=zZESdGgKZG6__Z9f8Kjxhw3Fx4FMpYlSBGCilggIuv8,2129
71
+ librelane/scripts/magic/drc.tcl,sha256=gPGyI96lR10dJXcJACajzHaHiT6ayAYPJqrmmuQkABc,2395
69
72
  librelane/scripts/magic/extract_spice.tcl,sha256=lFNXfjIIzAWb2wda9ZtBOecENOOXyFBsh9HgrPYf7VQ,2737
70
73
  librelane/scripts/magic/gds/drc_batch.tcl,sha256=O76rwxSrQgoCuoxk36tRBZkQaeMfJknlHrQA3mtU2JU,2198
71
74
  librelane/scripts/magic/gds/erase_box.tcl,sha256=wsVSwMlkZFJa_MEGNsdXLnXFvjZlrl_lzIWkJjcDBgg,929
72
- librelane/scripts/magic/gds/extras_mag.tcl,sha256=aEABKbyUukMr3AhCCgpE8WpEzWwZzeFbqlQ8kAQJFYI,1325
73
- librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=mK0MEeQMRPN0MopgMlF2v5mq9jkssHEFRKv5gssWbLI,1063
75
+ librelane/scripts/magic/gds/extras_mag.tcl,sha256=hOmFK12wmGiA_H70YS0jVK4Faav-1sTCpajUxjTsopM,1317
76
+ librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=mfYTQdio1XAA0DpWlV5JS7c3rkxtSS06kZqVfDfKGuQ,1056
74
77
  librelane/scripts/magic/get_bbox.tcl,sha256=iC0D5Pw09ZiNxHyy70Z0_axlc7eIT_jVGmvlutM8z_4,377
75
- librelane/scripts/magic/lef/extras_maglef.tcl,sha256=PsLCHxLslS3UxspmYf_vniL4Jzq54nZTa2AB5F90i58,1594
76
- librelane/scripts/magic/lef/maglef.tcl,sha256=MyCuqqR9zhKaC7OAVU2iCFIMkSZxl4hyc5bsEVnBG2k,863
78
+ librelane/scripts/magic/lef/extras_maglef.tcl,sha256=V0TivPN4aLJ0is497IAmOB1qQm8vmCqqycKuwV3w0HY,1586
79
+ librelane/scripts/magic/lef/maglef.tcl,sha256=I6-xFtsCZQtQI4UbU53gaWrpELWUd4agNF5LLgq9Eq0,856
77
80
  librelane/scripts/magic/lef.tcl,sha256=Ij_v63siQrgYh56juCiZMcJBBCl2Lco3Ah4YKg-xiAU,2076
78
81
  librelane/scripts/magic/open.tcl,sha256=qgk3HiT4qI-pMWn2E2MxwijgveCVmt6oCd8wEWh0jio,915
79
- librelane/scripts/magic/wrapper.tcl,sha256=rBeBSExykheFx7MTejjnX_OKROnWeDYNE5ciCAQvueU,704
82
+ librelane/scripts/magic/wrapper.tcl,sha256=qO33N2AiEYBTABMB5vWMWWEd2FpyOhg8JlcGsBVD6MY,712
80
83
  librelane/scripts/netgen/setup.tcl,sha256=LBkdtVZpxrNGQ8UNwMkEQ-xSrkn9DNIBW_jzB9b1gYk,979
81
84
  librelane/scripts/odbpy/apply_def_template.py,sha256=Tn6y65biu0bAQ6XilYxq5jn3a_KqjTl423-aXWI864k,1534
82
85
  librelane/scripts/odbpy/cell_frequency.py,sha256=NfGgM8wxIvjM1C_GHUghZPOh8gpdasLOWR4qBdHHLFE,3105
83
86
  librelane/scripts/odbpy/check_antenna_properties.py,sha256=dMD-RcoA7plcAu9IIqa2e-8XCO0EMcKG-6P39D3Gpic,3942
84
87
  librelane/scripts/odbpy/contextualize.py,sha256=G8EEgmK6ISikXD2-Pw-RTs1JxLWPnuppwL7oPfAsb84,4020
85
- librelane/scripts/odbpy/defutil.py,sha256=vOVLEP1WOs2N1JjIoV0mAABWptJAWIzJYIa0JECg8Vc,17987
88
+ librelane/scripts/odbpy/defutil.py,sha256=gBANy_XTeLeXRBMGdCy2vI5y44qMB6E_Fy0VeyW6rUg,18104
86
89
  librelane/scripts/odbpy/diodes.py,sha256=ZS_1niaTcwvaTTNjJcth4Qepcwxa6aV6E9WM_KiMtTI,11811
87
90
  librelane/scripts/odbpy/disconnected_pins.py,sha256=hS_Iletg7N6K6yN_ccvWxZ3nWNZp4ecUJM-oY0kkEfA,11139
88
- librelane/scripts/odbpy/exception_codes.py,sha256=VXReNio2d9uxU4cXL1PpRxWhhK2_OSs5DeCpVqTDYJE,648
91
+ librelane/scripts/odbpy/eco_buffer.py,sha256=lb7KtVZUzXSkPq9mRTXPVnSo_isy4845wohLFPhDN30,6292
92
+ librelane/scripts/odbpy/eco_diode.py,sha256=LSM3D0ygE7_vSHbXt49DU1R068NkqmSYVlb32a3scZI,4307
89
93
  librelane/scripts/odbpy/filter_unannotated.py,sha256=Gvcaj_WNr6TPiHk-36nkMu4betNHZo1g2lD3UcA9hDQ,2950
90
94
  librelane/scripts/odbpy/io_place.py,sha256=LSJIJQDLSOpENyQOg_kVTIbh1AbYLiHIXx0siduo-lg,15589
91
- librelane/scripts/odbpy/ioplace_parser/__init__.py,sha256=TMKTIWwGJfdSr7dJcsoisUuKlbTKJdHV6-0kB77v2P8,887
92
- librelane/scripts/odbpy/ioplace_parser/parse.py,sha256=LDncc8r1nDmcTCVtxqBu7xswiesVX6-snYiIKFB_kxs,5594
95
+ librelane/scripts/odbpy/ioplace_parser/__init__.py,sha256=_xCDqam3PxWO-uhTZ6afdn3dpuu4XlX2T_RaOn7QqJQ,877
96
+ librelane/scripts/odbpy/ioplace_parser/parse.py,sha256=L2GXzNA-gkjyySZcTWXrRRP8rllabE5pGap9dtiFfOo,5584
93
97
  librelane/scripts/odbpy/label_macro_pins.py,sha256=n3o9-_g6HkVP8k49yNnCkQJms9f_ykCE0Rye7bVFtIk,8620
94
98
  librelane/scripts/odbpy/lefutil.py,sha256=XhfWSGHdn96yZWYQAPisgJM0iuY3xw4SW7jmMTzbpZs,3064
95
99
  librelane/scripts/odbpy/placers.py,sha256=mgy_-GYeLDPMG41YAopMTtJyCHP6ucJRk7cJzI9PLRQ,4572
96
- librelane/scripts/odbpy/power_utils.py,sha256=al12uMiv8G0yQZOPKXNHYQ1dm2KGlu9xigSuYLEAo_A,14627
100
+ librelane/scripts/odbpy/power_utils.py,sha256=qbwhvW0QRiqtFXpYNGyfDIrhNZv9dt0JX2n4CQ8YRs8,14722
97
101
  librelane/scripts/odbpy/random_place.py,sha256=TEsV4LtXQTP8OJvnBh09Siu9fKkwG9UpIkCkQpdXAgU,1649
98
- librelane/scripts/odbpy/reader.py,sha256=uRmcBtD2pN4d9BKfbSjeTyqR2gSoV0SO30VuUSkm-Dk,8449
102
+ librelane/scripts/odbpy/reader.py,sha256=omOCANavm7khGq3AvDyJX00IvhDn_15cW64IU-u2dRQ,8540
99
103
  librelane/scripts/odbpy/remove_buffers.py,sha256=f-kGZIPnMtu4gnl2r2CDkng8U8vUMJKJWNV_akOpc38,5460
100
104
  librelane/scripts/odbpy/snap_to_grid.py,sha256=lULRWlcYXvrTBUpemUPlpO2dBnbFeriuG-DlI4KnViE,1743
101
105
  librelane/scripts/odbpy/wire_lengths.py,sha256=pSPhVnLlvcvmgEh89G8nu8DRaZVP66r-4ieVoV3zrm4,2737
@@ -106,7 +110,7 @@ librelane/scripts/openroad/buffer_list.tcl,sha256=sXygy1KRSUS4dZi1UOpBkGGOuXRVLM
106
110
  librelane/scripts/openroad/common/dpl.tcl,sha256=Nqq5e5OwRoyk8mHfVa5uw3DGKDGMEFrx6odpxanc_Ns,912
107
111
  librelane/scripts/openroad/common/dpl_cell_pad.tcl,sha256=KWVuj8u1-y3ZUiQr48TAsFv1GSzOCVnAjdqfBjtoQxQ,1066
108
112
  librelane/scripts/openroad/common/grt.tcl,sha256=DCKe5D7INCBctitbRdgZNRsBrI9Qo5v7Ag7DF45W4_U,1137
109
- librelane/scripts/openroad/common/io.tcl,sha256=MEePZdAjuBTkWhgFBshrszGo3R-OSNABcrGS62dOq1A,16576
113
+ librelane/scripts/openroad/common/io.tcl,sha256=cPJ4O2nBKrGKON7lO7ZX1j_TpcxQFCw3gH858yTWg8Q,18289
110
114
  librelane/scripts/openroad/common/pdn_cfg.tcl,sha256=KnQAxzlL_261Kp4M02cQ6usZHIRNBj56SAZNn1CqrZc,4552
111
115
  librelane/scripts/openroad/common/resizer.tcl,sha256=3p59NDcXgEkUzg_43dcUYr2KkD__fkADdqCZ3uWsUU4,3478
112
116
  librelane/scripts/openroad/common/set_global_connections.tcl,sha256=zGMz0Hu57ZVdLhz4djJASyre0qOi-dszylo6HD8ClUM,2899
@@ -122,7 +126,7 @@ librelane/scripts/openroad/fill.tcl,sha256=LzXVqnaFbsGnIRTXuvrGNHqqWBv-T2OGcP828
122
126
  librelane/scripts/openroad/floorplan.tcl,sha256=akWifUeTsfplmFi11_ApU6hRcCaCmCyd0Su5ZWiTf50,5397
123
127
  librelane/scripts/openroad/gpl.tcl,sha256=OkTGsatlgnTj-sGg20LOhV2Ws87up8K8Ts52vPMC_NM,2540
124
128
  librelane/scripts/openroad/grt.tcl,sha256=r_73hbvc4wMi2EFoPbGTh29Lh5ATT4vVwKjxyPIOFcM,1022
125
- librelane/scripts/openroad/gui.tcl,sha256=TQCUN_StadQ74mTcVCYA-MdAD0kOuP9P1vvyUXlWw1s,651
129
+ librelane/scripts/openroad/gui.tcl,sha256=BhKTcYEo-SajnYtdzXqpzjYbczy0qZ-OvEFlHMjPtlU,1255
126
130
  librelane/scripts/openroad/insert_buffer.tcl,sha256=BMTovQa4_CO8LSCeEqqiDAcTs5ELZt7X3ifJy1pDBVs,4403
127
131
  librelane/scripts/openroad/ioplacer.tcl,sha256=FdBr8Yg_qT1VhNVTmvR-x6j_Fyh94ZuAm_K6D7k4jTY,1896
128
132
  librelane/scripts/openroad/irdrop.tcl,sha256=wouIIPS_C_PeYFkCBQz0ERHcsobf74QB2x1NYAxNpjc,1950
@@ -143,26 +147,26 @@ librelane/scripts/pyosys/ys_common.py,sha256=mOni8WmKMNuLWsLRNcE15rcqCxGR1kf-9ck
143
147
  librelane/scripts/tclsh/hello.tcl,sha256=kkR3akY7QnGHYXsQODYwLkMkUEOgWcNFtzaMTTEV2bY,34
144
148
  librelane/state/__init__.py,sha256=rLUdAkeB278r8pB2Jpv-ccmmmP32FR90wANIFHXdA0w,969
145
149
  librelane/state/__main__.py,sha256=Ici4Ejg1ICUZNSYZRguC3BfEk_wFxsmE0ag0Vv8iY1I,1679
146
- librelane/state/design_format.py,sha256=9mWBbHrhzludtv3dKB6P4UQncBVTMMtoj69kNgRvh5o,5306
147
- librelane/state/state.py,sha256=J05gAeSVDiF76ITuw4WJZ7WkMyG4oTjt_7kpsI3E3PE,11957
148
- librelane/steps/__init__.py,sha256=8jTPCsrzJWjNctKUSXOjxYqqeMQjYkAKslcIXS3GDzg,1647
149
- librelane/steps/__main__.py,sha256=GviXtDLISKJCufKxK3oFPOSMF1GyShZbG5RXpVCYFkk,13376
150
- librelane/steps/checker.py,sha256=vul1D0cT03144qKK5QAKswClKKICK7kNB4PB6xXykvc,21353
150
+ librelane/state/design_format.py,sha256=ISl4O18ky1BiMkQn8Si0Tcf8UA5vrlZ1yay0iKPxvfk,5794
151
+ librelane/state/state.py,sha256=-vg7pYJ7U7uzC26oDKM49H410fm2-kV03Hf0bg3dMus,12149
152
+ librelane/steps/__init__.py,sha256=j3JYrdnWM74dYuEvE931oSrQI7FUz-hKWr8Mts8C0wg,1668
153
+ librelane/steps/__main__.py,sha256=p7eQ8l8V47RBmQifLcwZPXbEN807qR9ICUx4sMwM7fY,13450
154
+ librelane/steps/checker.py,sha256=Uq7DyO8wE7WD3RjDSiB_w_T9f4YO6CC_zkGn21MLrRI,21305
151
155
  librelane/steps/common_variables.py,sha256=qT0VeIstFsDbe8VGAyqXrXxQw69OZ08haM6u1IbdFiE,10429
152
156
  librelane/steps/cvc_rv.py,sha256=32vxFIbzSbrDtE0fXvdoQ-v3LVMrfi3r88f8Y-TKPKg,5531
153
- librelane/steps/klayout.py,sha256=g7jYz-1cLwgfPTiMJIdAQ9zmkrwNtJLPoRg6PqOUv6Y,16490
154
- librelane/steps/magic.py,sha256=4o_WarBAQdTTuekP72uovjvqW5wsaDCpMB3LtAhC_IY,20051
155
- librelane/steps/misc.py,sha256=Xk_a6JJPljkk8pemu-NtlzDRs-8S7vuRKZKj4pnCRlE,5690
157
+ librelane/steps/klayout.py,sha256=drEx4u1k48tE3SWiW1217rxtcuSfe5YeUXQN2Llt1PI,16768
158
+ librelane/steps/magic.py,sha256=60Ko7sf_E3KNO18op_pyojrBdfej0v5NCexXxmI0X90,20716
159
+ librelane/steps/misc.py,sha256=VUe3GOOaZm9r0mHmMSUi4cDCN2Mccm16I_isisW_r8Y,5811
156
160
  librelane/steps/netgen.py,sha256=R9sDWv-9wKMdi2rkuLQdOc4uLlbYhXcKKd6WsZsnLt0,8953
157
- librelane/steps/odb.py,sha256=BNvw_SoXanMpeshzZyRvYW44059xj2o1FWf1OSeFzps,33337
158
- librelane/steps/openroad.py,sha256=pit4e2UmAE6pr3SvheHrrM0JXybA5c6QoYtX9fFaDas,85709
161
+ librelane/steps/odb.py,sha256=9TFYkFojERc4wVoTxpaHHVvB_sI3SNi6vakTwpmdTfU,38791
162
+ librelane/steps/openroad.py,sha256=SmZT2zj0phyD7aIiVV0USi5KUDHHvDXfyg2VyWFV3Yw,86134
159
163
  librelane/steps/openroad_alerts.py,sha256=IJyB4piBDCKXhkJswHGMYCRDwbdQsR0GZlrGGDhmW6Q,3364
160
- librelane/steps/pyosys.py,sha256=bBKCIiKxbAQXrEgR1gdg2el-IpuZoUzLOwR62-ilwQg,22326
161
- librelane/steps/step.py,sha256=YkUWbxx2dOz0QR90jM5NC7neFkWO1RW5zJc0I_XxRyc,54975
164
+ librelane/steps/pyosys.py,sha256=DLft0-g4RFaMiEtElve6-CaNV24IT1usNprzLNYB5io,22933
165
+ librelane/steps/step.py,sha256=XcGHsrn0u1chrVwrjil60pNxw0s_0tz3DBo8knwmRZc,55397
162
166
  librelane/steps/tclstep.py,sha256=0PMWJ6C3dKnlQf9mA9rZntgxUBCiByE9csHcEcM1iq0,10027
163
167
  librelane/steps/verilator.py,sha256=MWx2TpLqYyea9_jSeLG9c2S5ujvYERQZRFNaMhfHxZE,7916
164
- librelane/steps/yosys.py,sha256=GX6rTiQG-ZhDxfB9SxrPQ9Sab3WC84p0OUtqiL1Nubk,12533
165
- librelane-2.4.0.dev2.dist-info/METADATA,sha256=JlRl6zQcZGwcjn6ZgcLHZivozmfzMWx0EqDzvFvuY-g,6600
166
- librelane-2.4.0.dev2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
167
- librelane-2.4.0.dev2.dist-info/entry_points.txt,sha256=GTBvXykNMMFsNKiJFgtEw7P1wb_VZIqVM35EFSpyZQE,263
168
- librelane-2.4.0.dev2.dist-info/RECORD,,
168
+ librelane/steps/yosys.py,sha256=3MDUZU-LSe0YArm1VxGRysZM6Pb87uuzOh8T0AqdHcQ,12805
169
+ librelane-2.4.7.dist-info/METADATA,sha256=4MPYwAo6LXql5gH9zqH0XvD8hl9sG_oATGX0iuUERSg,6537
170
+ librelane-2.4.7.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
171
+ librelane-2.4.7.dist-info/entry_points.txt,sha256=0eZs2NOH-w-W_GVRCs-ualst26XplkPpJkOnGWMaFw0,306
172
+ librelane-2.4.7.dist-info/RECORD,,
@@ -2,6 +2,7 @@
2
2
  librelane=librelane.__main__:cli
3
3
  librelane.config=librelane.config.__main__:cli
4
4
  librelane.env_info=librelane:env_info_cli
5
+ librelane.help=librelane.help.__main__:cli
5
6
  librelane.state=librelane.state.__main__:cli
6
7
  librelane.steps=librelane.steps.__main__:cli
7
8
  openlane=librelane.__main__:cli
@@ -1,17 +0,0 @@
1
- # Copyright 2023 Efabless Corporation
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- METAL_LAYER_ERROR = 10
16
- FORMAT_ERROR = 11
17
- NOT_FOUND_ERROR = 12