librelane 3.0.0.dev24__py3-none-any.whl → 3.0.0.dev26__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.

Potentially problematic release.


This version of librelane might be problematic. Click here for more details.

Files changed (34) hide show
  1. librelane/common/__init__.py +1 -0
  2. librelane/common/drc.py +1 -0
  3. librelane/common/misc.py +27 -5
  4. librelane/common/types.py +2 -3
  5. librelane/config/__main__.py +1 -1
  6. librelane/config/variable.py +16 -0
  7. librelane/examples/spm/config.yaml +8 -8
  8. librelane/examples/spm-user_project_wrapper/config.json +17 -5
  9. librelane/flows/flow.py +89 -21
  10. librelane/scripts/magic/def/mag_gds.tcl +1 -2
  11. librelane/scripts/magic/drc.tcl +0 -1
  12. librelane/scripts/magic/gds/extras_mag.tcl +0 -2
  13. librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -1
  14. librelane/scripts/magic/lef/extras_maglef.tcl +0 -2
  15. librelane/scripts/magic/lef/maglef.tcl +0 -1
  16. librelane/scripts/magic/wrapper.tcl +2 -0
  17. librelane/scripts/odbpy/power_utils.py +8 -6
  18. librelane/scripts/odbpy/reader.py +2 -2
  19. librelane/scripts/openroad/common/io.tcl +23 -11
  20. librelane/scripts/openroad/common/pdn_cfg.tcl +36 -36
  21. librelane/scripts/openroad/ioplacer.tcl +22 -21
  22. librelane/scripts/openroad/pdn.tcl +1 -1
  23. librelane/state/state.py +11 -3
  24. librelane/steps/__main__.py +1 -2
  25. librelane/steps/common_variables.py +82 -33
  26. librelane/steps/magic.py +24 -14
  27. librelane/steps/odb.py +15 -39
  28. librelane/steps/openroad.py +22 -44
  29. librelane/steps/step.py +22 -7
  30. librelane/steps/tclstep.py +1 -1
  31. {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev26.dist-info}/METADATA +1 -1
  32. {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev26.dist-info}/RECORD +34 -34
  33. {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev26.dist-info}/WHEEL +0 -0
  34. {librelane-3.0.0.dev24.dist-info → librelane-3.0.0.dev26.dist-info}/entry_points.txt +0 -0
@@ -19,7 +19,6 @@ import io
19
19
  import os
20
20
  import re
21
21
  import json
22
- import functools
23
22
  import subprocess
24
23
  import textwrap
25
24
  import pathlib
@@ -1177,8 +1176,8 @@ class IOPlacement(OpenROADStep):
1177
1176
  """
1178
1177
  Places I/O pins on a floor-planned ODB file using OpenROAD's built-in placer.
1179
1178
 
1180
- If ``FP_PIN_ORDER_CFG`` is not ``None``, this step is skipped (for
1181
- compatibility with LibreLane 1.)
1179
+ If ``IO_PIN_ORDER_CFG`` is not ``None``, this step is skipped (for
1180
+ compatibility with OpenLane.)
1182
1181
  """
1183
1182
 
1184
1183
  id = "OpenROAD.IOPlacement"
@@ -1189,51 +1188,31 @@ class IOPlacement(OpenROADStep):
1189
1188
  + io_layer_variables
1190
1189
  + [
1191
1190
  Variable(
1192
- "FP_PPL_MODE",
1191
+ "IO_PIN_PLACEMENT_MODE",
1193
1192
  Literal["matching", "random_equidistant", "annealing"],
1194
1193
  "Decides the mode of the random IO placement option.",
1195
1194
  default="matching",
1196
- deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode)],
1195
+ deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode), "FP_PPL_MODE"],
1197
1196
  ),
1198
1197
  Variable(
1199
- "FP_IO_MIN_DISTANCE",
1198
+ "IO_PIN_MIN_DISTANCE",
1200
1199
  Optional[Decimal],
1201
1200
  "The minimum distance between two pins. If unspecified by a PDK, OpenROAD will use the length of two routing tracks.",
1202
1201
  units="µm",
1203
1202
  pdk=True,
1203
+ deprecated_names=["FP_IO_MIN_DISTANCE"],
1204
1204
  ),
1205
1205
  Variable(
1206
- "FP_PIN_ORDER_CFG",
1206
+ "IO_PIN_ORDER_CFG",
1207
1207
  Optional[Path],
1208
1208
  "Path to a custom pin configuration file.",
1209
+ deprecated_names=["FP_PIN_ORDER_CFG"],
1209
1210
  ),
1210
1211
  Variable(
1211
1212
  "FP_DEF_TEMPLATE",
1212
1213
  Optional[Path],
1213
1214
  "Points to the DEF file to be used as a template.",
1214
1215
  ),
1215
- Variable(
1216
- "FP_IO_VLENGTH",
1217
- Optional[Decimal],
1218
- """
1219
- The length of the pins with a north or south orientation. If unspecified by a PDK, OpenROAD will use whichever is higher of the following two values:
1220
- * The pin width
1221
- * The minimum value satisfying the minimum area constraint given the pin width
1222
- """,
1223
- units="µm",
1224
- pdk=True,
1225
- ),
1226
- Variable(
1227
- "FP_IO_HLENGTH",
1228
- Optional[Decimal],
1229
- """
1230
- The length of the pins with an east or west orientation. If unspecified by a PDK, OpenROAD will use whichever is higher of the following two values:
1231
- * The pin width
1232
- * The minimum value satisfying the minimum area constraint given the pin width
1233
- """,
1234
- units="µm",
1235
- pdk=True,
1236
- ),
1237
1216
  ]
1238
1217
  )
1239
1218
 
@@ -1241,8 +1220,8 @@ class IOPlacement(OpenROADStep):
1241
1220
  return os.path.join(get_script_dir(), "openroad", "ioplacer.tcl")
1242
1221
 
1243
1222
  def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
1244
- if self.config["FP_PIN_ORDER_CFG"] is not None:
1245
- info(f"FP_PIN_ORDER_CFG is set. Skipping '{self.id}'…")
1223
+ if self.config["IO_PIN_ORDER_CFG"] is not None:
1224
+ info(f"IO_PIN_ORDER_CFG is set. Skipping '{self.id}'…")
1246
1225
  return {}, {}
1247
1226
  if self.config["FP_DEF_TEMPLATE"] is not None:
1248
1227
  info(
@@ -1333,9 +1312,7 @@ def get_psm_error_count(rpt: io.TextIOWrapper) -> int:
1333
1312
 
1334
1313
  sio.seek(0)
1335
1314
  violations = yaml.load(sio, Loader=yaml.SafeLoader) or []
1336
- return functools.reduce(
1337
- lambda acc, current: acc + len(current["srcs"]), violations, 0
1338
- )
1315
+ return sum(len(violation["srcs"]) for violation in violations)
1339
1316
 
1340
1317
 
1341
1318
  @Step.factory.register()
@@ -1353,10 +1330,10 @@ class GeneratePDN(OpenROADStep):
1353
1330
  + pdn_variables
1354
1331
  + [
1355
1332
  Variable(
1356
- "FP_PDN_CFG",
1333
+ "PDN_CFG",
1357
1334
  Optional[Path],
1358
1335
  "A custom PDN configuration file. If not provided, the default PDN config will be used.",
1359
- deprecated_names=["PDN_CFG"],
1336
+ deprecated_names=["FP_PDN_CFG"],
1360
1337
  )
1361
1338
  ]
1362
1339
  )
@@ -1366,11 +1343,11 @@ class GeneratePDN(OpenROADStep):
1366
1343
 
1367
1344
  def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
1368
1345
  kwargs, env = self.extract_env(kwargs)
1369
- if self.config["FP_PDN_CFG"] is None:
1370
- env["FP_PDN_CFG"] = os.path.join(
1346
+ if self.config["PDN_CFG"] is None:
1347
+ env["PDN_CFG"] = os.path.join(
1371
1348
  get_script_dir(), "openroad", "common", "pdn_cfg.tcl"
1372
1349
  )
1373
- info(f"'FP_PDN_CFG' not explicitly set, setting it to {env['FP_PDN_CFG']}…")
1350
+ info(f"'PDN_CFG' not explicitly set, setting it to {env['PDN_CFG']}…")
1374
1351
  views_updates, metrics_updates = super().run(state_in, env=env, **kwargs)
1375
1352
 
1376
1353
  alerts = self.alerts or []
@@ -1523,16 +1500,17 @@ class GlobalPlacementSkipIO(_GlobalPlacement):
1523
1500
 
1524
1501
  config_vars = _GlobalPlacement.config_vars + [
1525
1502
  Variable(
1526
- "FP_PPL_MODE",
1503
+ "IO_PIN_PLACEMENT_MODE",
1527
1504
  Literal["matching", "random_equidistant", "annealing"],
1528
1505
  "Decides the mode of the random IO placement option.",
1529
1506
  default="matching",
1530
- deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode)],
1507
+ deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode), "FP_PPL_MODE"],
1531
1508
  ),
1532
1509
  Variable(
1533
- "FP_PIN_ORDER_CFG",
1510
+ "IO_PIN_ORDER_CFG",
1534
1511
  Optional[Path],
1535
1512
  "Path to a custom pin configuration file.",
1513
+ deprecated_names=["FP_PIN_ORDER_CFG"],
1536
1514
  ),
1537
1515
  Variable(
1538
1516
  "FP_DEF_TEMPLATE",
@@ -1548,9 +1526,9 @@ class GlobalPlacementSkipIO(_GlobalPlacement):
1548
1526
  f"I/O pins were loaded from {self.config['FP_DEF_TEMPLATE']}. Returning state unaltered…"
1549
1527
  )
1550
1528
  return {}, {}
1551
- if self.config["FP_PIN_ORDER_CFG"] is not None:
1529
+ if self.config["IO_PIN_ORDER_CFG"] is not None:
1552
1530
  info(
1553
- f"I/O pins to be placed from {self.config['FP_PIN_ORDER_CFG']}. Returning state unaltered…"
1531
+ f"I/O pins to be placed from {self.config['IO_PIN_ORDER_CFG']}. Returning state unaltered…"
1554
1532
  )
1555
1533
  return {}, {}
1556
1534
  env["__PL_SKIP_IO"] = "1"
librelane/steps/step.py CHANGED
@@ -619,6 +619,7 @@ class Step(ABC):
619
619
  *,
620
620
  docstring_override: str = "",
621
621
  use_dropdown: bool = False,
622
+ myst_anchors: bool = False,
622
623
  ): # pragma: no cover
623
624
  """
624
625
  Renders Markdown help for this step to a string.
@@ -676,11 +677,12 @@ class Step(ABC):
676
677
  result += f"| {input_str} | {output_str} |\n"
677
678
 
678
679
  if len(Self.config_vars):
680
+ all_vars_anchor = f"({Self.id.lower()}-configuration-variables)="
679
681
  result += textwrap.dedent(
680
682
  f"""
681
- ({Self.id.lower()}-configuration-variables)=
683
+ {all_vars_anchor * myst_anchors}
682
684
  #### Configuration Variables
683
-
685
+
684
686
  | Variable Name | Type | Description | Default | Units |
685
687
  | - | - | - | - | - |
686
688
  """
@@ -688,13 +690,15 @@ class Step(ABC):
688
690
  for var in Self.config_vars:
689
691
  units = var.units or ""
690
692
  pdk_superscript = "<sup>PDK</sup>" if var.pdk else ""
691
- 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"
693
+ var_anchor = f"{{#{var._get_docs_identifier(Self.id)}}}"
694
+ result += f"| `{var.name}`{var_anchor * myst_anchors} {pdk_superscript} | {var.type_repr_md(for_document=True)} | {var.desc_repr_md()} | `{var.default}` | {units} |\n"
692
695
  result += "\n"
693
696
 
697
+ step_anchor = f"(step-{slugify(Self.id.lower())})="
694
698
  result = (
695
699
  textwrap.dedent(
696
700
  f"""
697
- (step-{slugify(Self.id.lower())})=
701
+ {step_anchor * myst_anchors}
698
702
  ### {Self.__get_desc()}
699
703
  """
700
704
  )
@@ -706,11 +710,22 @@ class Step(ABC):
706
710
  @classmethod
707
711
  def display_help(Self): # pragma: no cover
708
712
  """
709
- 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``.
710
717
  """
711
- import IPython.display
718
+ try:
719
+ get_ipython() # type: ignore
720
+
721
+ import IPython.display
722
+
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
712
727
 
713
- IPython.display.display(IPython.display.Markdown(Self.get_help_md()))
728
+ console.log(Markdown(Self.get_help_md()))
714
729
 
715
730
  def _repr_markdown_(self) -> str: # pragma: no cover
716
731
  """
@@ -255,7 +255,7 @@ class TclStep(Step):
255
255
  #
256
256
  # Emplace file to be sourced in dict with key ``_TCL_ENV_IN``
257
257
  env = os.environ.copy()
258
- with open(env_in_file, "a+") as f:
258
+ with open(env_in_file, "w") as f:
259
259
  for key, value in env_in:
260
260
  if key in env and env[key] == value:
261
261
  continue
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: librelane
3
- Version: 3.0.0.dev24
3
+ Version: 3.0.0.dev26
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
@@ -1,32 +1,32 @@
1
1
  librelane/__init__.py,sha256=EMpoZrRmS_wsweKjhyAg52OXCK7HWQ8o8CVrYaX4ub0,1220
2
2
  librelane/__main__.py,sha256=Zq2h2ZTQqA0T7qpGFELJ1bzVQnv-951nnhJ0-9WzNaM,14541
3
3
  librelane/__version__.py,sha256=dbE4stCACDmIoxgKksesAkTa-_hi5dW6nPLWw9Pfq3Q,1486
4
- librelane/common/__init__.py,sha256=WTSw8kJaR6JJsi1FLUbKAekE7qmXLTYEeoInLRXQdEc,1529
4
+ librelane/common/__init__.py,sha256=QhzRvLXLR2cGdYenayWYmCfgkTS836dWW41Ve1Wa5IE,1551
5
5
  librelane/common/cli.py,sha256=xi48GBGHRsYrLGwx40ARwpykHx7GnuHbJjHxjOwtZ5Y,2349
6
- librelane/common/drc.py,sha256=3hFkUZir0d5D_uMO8-JuaJpcd3hAp9ex_teBc16XkNY,12774
6
+ librelane/common/drc.py,sha256=l1quZbHXGb7yjKCO5IFn-Xxf_zIx4f6kxqpNm3YmpOs,12809
7
7
  librelane/common/generic_dict.py,sha256=ASa5wtVcLuGlsBqGfLxLYXrYksqQB62iHljV04plIqI,10010
8
8
  librelane/common/metrics/__init__.py,sha256=nzdmeia1fN4CDPT604v-OHaBVydz-M4hz232g-jxJ6M,1521
9
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=HnkvnObQzPvPgzDmUhm8lG4eXvTb4vFOcGIPGAnmXj8,12408
13
+ librelane/common/misc.py,sha256=2zj62QbSuYaD2iYqGnM7vFR3ga41E3TxZpOOBYYIka8,13257
14
14
  librelane/common/ring_buffer.py,sha256=DGFen9y0JOmiL7E27tmzDTVSJKZtV-waF9hl5Rz9uek,1898
15
15
  librelane/common/tcl.py,sha256=G0__oR6azVCS2Aue87zboba7vAR7v-SVQeUbqfviiDA,2709
16
16
  librelane/common/toolbox.py,sha256=ijR__rVqQ_nJtfm34H-VdSCIeArKns7lVAc1TcTUSsQ,20975
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=Uhma2IQdvDTJiZs9ZIQA7r9zWSq7fZR-19P9UJWQclA,4476
20
+ librelane/config/__main__.py,sha256=NsJGoIOb950mdXql1zmzSq10wuFovK9NGWm011NNJ3A,4474
21
21
  librelane/config/config.py,sha256=bAxB0qpw95YoLGmMjvxAwrX1hcpHRvNhH7wjQdyW-DE,35031
22
22
  librelane/config/flow.py,sha256=RS8uspcrepl8GT5SsWrBQ-kmssO4c15_lrc2nBPVK5M,16482
23
23
  librelane/config/pdk_compat.py,sha256=ofqYuD-MgTcfvPVXpGJo8H1GKzCvN6sxHsK_OqCVXa8,12870
24
24
  librelane/config/preprocessor.py,sha256=ATi29SHz0_OBq1IqUkGxvhHUDKB5z5jO0KqvoQXg8R8,14913
25
25
  librelane/config/removals.py,sha256=vxqTuRTJ0jt2TX4KmFZCZPTwghDFkCVjIhF2iReHwJA,2958
26
- librelane/config/variable.py,sha256=v92bVwy11LgS53gYhU9DBwOUABc2XMGqEglqTORpPfc,26269
26
+ librelane/config/variable.py,sha256=YKRlnQu6YvkwnJ5zYfWTcj0fHP0Jcy22ZTb0i4kb3h4,26823
27
27
  librelane/container.py,sha256=3KHxs3dUSVUZVYsS6fsA7dD3Q4QEQEzRxgXZZh9dzi0,7554
28
28
  librelane/env_info.py,sha256=vAE9AZ_vDFLt7Srtg4ZywPzE6vgVhCrIvg8PP25-BJ8,10460
29
- librelane/examples/spm/config.yaml,sha256=YKBm0lsY3AJZNcxAh1sQ1QMmJeVCpOpil6dw_RgQh4c,633
29
+ librelane/examples/spm/config.yaml,sha256=H2ERY4xoIeXN7kM3N9yGWiFBbtByyaN2Ni1kFqYPtO4,612
30
30
  librelane/examples/spm/pin_order.cfg,sha256=-8mTGFKnES0vhQATfaE2TXN_mdCZ3SZIN90Src1l6fY,52
31
31
  librelane/examples/spm/src/impl.sdc,sha256=wP18UoVlOJ9q4lmUoa3XpgcpPdyzEqHBNxCgOOU7QH0,2961
32
32
  librelane/examples/spm/src/signoff.sdc,sha256=uiW143QNFig2vw3tXdC0LEtd59_pzsuaBDdgtMGB48Q,2694
@@ -35,7 +35,7 @@ librelane/examples/spm/verify/spm_tb.v,sha256=FJfUnnI7u4SDcrnKXK0QWd9KSpM-fjH2ni
35
35
  librelane/examples/spm-user_project_wrapper/SPM_example.v,sha256=pSpVqH0LSzWHDcNCqehPik1GRQbw57fXqWZctITnWmY,8430
36
36
  librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc,sha256=O6dbdMWNR1AKi3bdHcYRqMs89angq2eWSBxzSR3R_Pg,7247
37
37
  librelane/examples/spm-user_project_wrapper/config-tut.json,sha256=g6NBPVNZifToYeT5yU9Em8yv6TsUUD8JMsIvsGGN0bI,254
38
- librelane/examples/spm-user_project_wrapper/config.json,sha256=Whifv8K2ydE6UGbVfaHyZXbMtfuGX88mhGhsTheXMVU,363
38
+ librelane/examples/spm-user_project_wrapper/config.json,sha256=BBfnaAQ1VFabzurQDGcHGTgLkFudKL2-RdB3pIZrZ5Q,448
39
39
  librelane/examples/spm-user_project_wrapper/defines.v,sha256=TUfuwmRFiUCjY6MdWJLGr0LWiuyoPpH1UeBbacDqFDI,2236
40
40
  librelane/examples/spm-user_project_wrapper/template.def,sha256=7kl9l-oh4BDKuFHhp2yzk-ObUcrvvUVwPkqsMG0ZTds,438993
41
41
  librelane/examples/spm-user_project_wrapper/user_project_wrapper.v,sha256=zc6GC583muuWtzw3p6v_B1k8j-Oo9WypuQf_8doA4uo,3364
@@ -43,7 +43,7 @@ librelane/flows/__init__.py,sha256=ghtmUG-taVpHJ3CKJRYZGn3dU0r93araT1EIGlBEsxg,8
43
43
  librelane/flows/builtins.py,sha256=tR14Qc1ZUey2w-Ar4DWOvxuP7LGPtMecCJq8WgcYJpk,773
44
44
  librelane/flows/classic.py,sha256=JB9gVgP2hHPhMuCJg7hvoj2BvJcvRec7suEXPgHmz14,10971
45
45
  librelane/flows/cli.py,sha256=P2LCFn5_RQ88yB0WuetpLAuWeKQXd-DrpCOMgnVh9Mg,16705
46
- librelane/flows/flow.py,sha256=VIPF8LqiqQX-MYv4yPiQL1oEqrOOboi6N1a2BKmYWHs,34069
46
+ librelane/flows/flow.py,sha256=qly_ENbw8zHSS6ubUY56JrCRjKnfuSoN78suz1k4chw,36997
47
47
  librelane/flows/misc.py,sha256=32Om3isexesfKKiJZCajNmINc-xdv7eVx_tgoh9SR6U,2015
48
48
  librelane/flows/optimizing.py,sha256=OwZz6WGmXpliwO8vtmhjKHD-kzDyNv-zoCECZIigXsI,6076
49
49
  librelane/flows/sequential.py,sha256=kBpR9kxfEfdTaNy9Ter2KNQXkW6qojCwoBsFJBwTq6I,15359
@@ -64,19 +64,19 @@ librelane/scripts/magic/Readme.md,sha256=NaQrlxY8l8GT-kokJNlMHeAR3PksWVbFpSznOWW
64
64
  librelane/scripts/magic/common/read.tcl,sha256=BiKyRi2ExXaR7WcSSmbtLfW-CaJU2DAmgVAi-XXrPGA,3120
65
65
  librelane/scripts/magic/def/antenna_check.tcl,sha256=T_r1CWgySFVlLMcoTrNXQ_aMRs_fBAUYUUjyXJV1Sg0,1019
66
66
  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
67
+ librelane/scripts/magic/def/mag_gds.tcl,sha256=fwtQR9zPZpWqVmmLb-1hzY4WMCr4gbA3S0pTZsS9sss,2144
68
+ librelane/scripts/magic/drc.tcl,sha256=gPGyI96lR10dJXcJACajzHaHiT6ayAYPJqrmmuQkABc,2395
69
69
  librelane/scripts/magic/extract_spice.tcl,sha256=lFNXfjIIzAWb2wda9ZtBOecENOOXyFBsh9HgrPYf7VQ,2737
70
70
  librelane/scripts/magic/gds/drc_batch.tcl,sha256=O76rwxSrQgoCuoxk36tRBZkQaeMfJknlHrQA3mtU2JU,2198
71
71
  librelane/scripts/magic/gds/erase_box.tcl,sha256=wsVSwMlkZFJa_MEGNsdXLnXFvjZlrl_lzIWkJjcDBgg,929
72
- librelane/scripts/magic/gds/extras_mag.tcl,sha256=jUu7vBUlJIvgldEC0UiohJC9FGnB2yiTzT1YbG_lmIo,1312
73
- librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=mK0MEeQMRPN0MopgMlF2v5mq9jkssHEFRKv5gssWbLI,1063
72
+ librelane/scripts/magic/gds/extras_mag.tcl,sha256=1raG0URUezUDEKkdDeJqdlS0Y5gb4IzQFnjFysHHlmU,1304
73
+ librelane/scripts/magic/gds/mag_with_pointers.tcl,sha256=mfYTQdio1XAA0DpWlV5JS7c3rkxtSS06kZqVfDfKGuQ,1056
74
74
  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
75
+ librelane/scripts/magic/lef/extras_maglef.tcl,sha256=V0TivPN4aLJ0is497IAmOB1qQm8vmCqqycKuwV3w0HY,1586
76
+ librelane/scripts/magic/lef/maglef.tcl,sha256=I6-xFtsCZQtQI4UbU53gaWrpELWUd4agNF5LLgq9Eq0,856
77
77
  librelane/scripts/magic/lef.tcl,sha256=Ij_v63siQrgYh56juCiZMcJBBCl2Lco3Ah4YKg-xiAU,2076
78
78
  librelane/scripts/magic/open.tcl,sha256=qgk3HiT4qI-pMWn2E2MxwijgveCVmt6oCd8wEWh0jio,915
79
- librelane/scripts/magic/wrapper.tcl,sha256=rBeBSExykheFx7MTejjnX_OKROnWeDYNE5ciCAQvueU,704
79
+ librelane/scripts/magic/wrapper.tcl,sha256=qO33N2AiEYBTABMB5vWMWWEd2FpyOhg8JlcGsBVD6MY,712
80
80
  librelane/scripts/netgen/setup.tcl,sha256=LBkdtVZpxrNGQ8UNwMkEQ-xSrkn9DNIBW_jzB9b1gYk,979
81
81
  librelane/scripts/odbpy/apply_def_template.py,sha256=Tn6y65biu0bAQ6XilYxq5jn3a_KqjTl423-aXWI864k,1534
82
82
  librelane/scripts/odbpy/cell_frequency.py,sha256=NfGgM8wxIvjM1C_GHUghZPOh8gpdasLOWR4qBdHHLFE,3105
@@ -94,9 +94,9 @@ librelane/scripts/odbpy/ioplace_parser/parse.py,sha256=L2GXzNA-gkjyySZcTWXrRRP8r
94
94
  librelane/scripts/odbpy/label_macro_pins.py,sha256=n3o9-_g6HkVP8k49yNnCkQJms9f_ykCE0Rye7bVFtIk,8620
95
95
  librelane/scripts/odbpy/lefutil.py,sha256=XhfWSGHdn96yZWYQAPisgJM0iuY3xw4SW7jmMTzbpZs,3064
96
96
  librelane/scripts/odbpy/placers.py,sha256=mgy_-GYeLDPMG41YAopMTtJyCHP6ucJRk7cJzI9PLRQ,4572
97
- librelane/scripts/odbpy/power_utils.py,sha256=al12uMiv8G0yQZOPKXNHYQ1dm2KGlu9xigSuYLEAo_A,14627
97
+ librelane/scripts/odbpy/power_utils.py,sha256=qbwhvW0QRiqtFXpYNGyfDIrhNZv9dt0JX2n4CQ8YRs8,14722
98
98
  librelane/scripts/odbpy/random_place.py,sha256=TEsV4LtXQTP8OJvnBh09Siu9fKkwG9UpIkCkQpdXAgU,1649
99
- librelane/scripts/odbpy/reader.py,sha256=XHHZr3e9Esz4T5j35vYXHsURyRepUEb3CmNG46Uec8I,8541
99
+ librelane/scripts/odbpy/reader.py,sha256=uoLHGKfXRoMdrfXmkgIj3HHa_sqMOFvB3DIUT3vSSQw,8542
100
100
  librelane/scripts/odbpy/remove_buffers.py,sha256=f-kGZIPnMtu4gnl2r2CDkng8U8vUMJKJWNV_akOpc38,5460
101
101
  librelane/scripts/odbpy/snap_to_grid.py,sha256=lULRWlcYXvrTBUpemUPlpO2dBnbFeriuG-DlI4KnViE,1743
102
102
  librelane/scripts/odbpy/wire_lengths.py,sha256=pSPhVnLlvcvmgEh89G8nu8DRaZVP66r-4ieVoV3zrm4,2737
@@ -107,8 +107,8 @@ librelane/scripts/openroad/buffer_list.tcl,sha256=sXygy1KRSUS4dZi1UOpBkGGOuXRVLM
107
107
  librelane/scripts/openroad/common/dpl.tcl,sha256=T_rzoZy8i7S9C92TOmiN79w0MCfudafEhkXcHmB1BAM,920
108
108
  librelane/scripts/openroad/common/dpl_cell_pad.tcl,sha256=KWVuj8u1-y3ZUiQr48TAsFv1GSzOCVnAjdqfBjtoQxQ,1066
109
109
  librelane/scripts/openroad/common/grt.tcl,sha256=2qDLSj8lKKEJHH9V9npiSMXQdsIsIHE0DVmbVRStbk4,1132
110
- librelane/scripts/openroad/common/io.tcl,sha256=1DHtdskRn1yc-jywvUFClHbrPFypKUXdZqOXXJsfouQ,22523
111
- librelane/scripts/openroad/common/pdn_cfg.tcl,sha256=6Uodl1pO6fckiQnMFbTo3fghrflqXp-MQnQ9ZT5gR64,4555
110
+ librelane/scripts/openroad/common/io.tcl,sha256=fAoRoz6E9iwanFsWvaO50T1xGF6CSuxw38O6MtgrZ1w,22756
111
+ librelane/scripts/openroad/common/pdn_cfg.tcl,sha256=8xTK4_her0hcaxySKpXKlQIIe0goetTcJlSEBl88qL0,4417
112
112
  librelane/scripts/openroad/common/resizer.tcl,sha256=OhjpVxw_8IOx5Bmh2_gh_EIHxKaX84NS37Of9Rlchpw,2255
113
113
  librelane/scripts/openroad/common/set_global_connections.tcl,sha256=jxafLD-2SLciJYeueobrlJYetnfAfK0P5uMLwhaTQco,2927
114
114
  librelane/scripts/openroad/common/set_layer_adjustments.tcl,sha256=xqAIDXsTa1_JsGmKXf6eG2Rni2EZSilSsHfJAhCl1xY,1037
@@ -126,9 +126,9 @@ librelane/scripts/openroad/gpl.tcl,sha256=WzxlyikUf70Q1FgaE6sIVvquYPZ8RU02_te1VB
126
126
  librelane/scripts/openroad/grt.tcl,sha256=r_73hbvc4wMi2EFoPbGTh29Lh5ATT4vVwKjxyPIOFcM,1022
127
127
  librelane/scripts/openroad/gui.tcl,sha256=BhKTcYEo-SajnYtdzXqpzjYbczy0qZ-OvEFlHMjPtlU,1255
128
128
  librelane/scripts/openroad/insert_buffer.tcl,sha256=ST0tbr1LoutjjaouqgngiQZudlzzHMd5APB6DTE2TGw,4412
129
- librelane/scripts/openroad/ioplacer.tcl,sha256=u7PQ8vaPKHAXeb2HNc5RZmOMc52j2LrccO0irnxDNLM,1861
129
+ librelane/scripts/openroad/ioplacer.tcl,sha256=tV-GF4ExJAKXqw-PQTf1Xlcc87xDJDLi1jksmnS1Smk,1970
130
130
  librelane/scripts/openroad/irdrop.tcl,sha256=bXhNY_87xPV-ocF9v8wOWqjlnFPaVO_6K_DWbBHAAPs,1974
131
- librelane/scripts/openroad/pdn.tcl,sha256=YlZp5T9A4ZEC5_05QXMyQuOfYtJhQ3uR2Gu3-xud9vM,1569
131
+ librelane/scripts/openroad/pdn.tcl,sha256=WiKVmLw3g_ZN1Hs4iiAzc6Qah7ZwCn6o-OA5iNmlTtY,1566
132
132
  librelane/scripts/openroad/rcx.tcl,sha256=kyEhli4sGFMEj-He9UXZDGb0Tmxlw7d6iZD7t6adUx8,1057
133
133
  librelane/scripts/openroad/repair_design.tcl,sha256=mSQKIT-uac2gJFia_xMNQtHJKD--aTI2T0gmM5mrWZA,2314
134
134
  librelane/scripts/openroad/repair_design_postgrt.tcl,sha256=sEXdFfH2le-q0ggcsWGgCR-GCFyzPdxk4P3RZyWCnpI,1902
@@ -147,25 +147,25 @@ librelane/scripts/tclsh/hello.tcl,sha256=kkR3akY7QnGHYXsQODYwLkMkUEOgWcNFtzaMTTE
147
147
  librelane/state/__init__.py,sha256=DZ_RyKMr2oj4p5d32u8MmDKfCxR7OEdDw-1HWKTpatA,949
148
148
  librelane/state/__main__.py,sha256=Ici4Ejg1ICUZNSYZRguC3BfEk_wFxsmE0ag0Vv8iY1I,1679
149
149
  librelane/state/design_format.py,sha256=75-XXzCfk5HUAJQAcdpwiHYkweeR9NwaXKtubCV0dqg,6461
150
- librelane/state/state.py,sha256=3CdihPR6lryQMt8ihSef0O2F8-qaqy1w7V0wiwie3nk,11710
150
+ librelane/state/state.py,sha256=tYn2si8NlkVErOSWKfVhsgrMpyxeX2Hv9EAPsQBWx2c,11902
151
151
  librelane/steps/__init__.py,sha256=j3JYrdnWM74dYuEvE931oSrQI7FUz-hKWr8Mts8C0wg,1668
152
- librelane/steps/__main__.py,sha256=GviXtDLISKJCufKxK3oFPOSMF1GyShZbG5RXpVCYFkk,13376
152
+ librelane/steps/__main__.py,sha256=GQZiV4s-9GIF4AwP34W61zwgzMvPp-QTR4cNELi7r5c,13349
153
153
  librelane/steps/checker.py,sha256=HD5YFPAbHQKsFmBDrIAbo_0clZcCszNhIXb4lHaNIeQ,21629
154
- librelane/steps/common_variables.py,sha256=XPNEvrojD-6oIvxgo55mi2lKmARWyYq-PtY1_c_0ZUs,10318
154
+ librelane/steps/common_variables.py,sha256=eih2eA1m0FpL8ydF5WWattwh_SxtzI55eb8gggJtBuY,12494
155
155
  librelane/steps/cvc_rv.py,sha256=TNnEQDJI5tEUq8OQelVmBWmNbLzygrvKsZ36utKDvp4,5543
156
156
  librelane/steps/klayout.py,sha256=EFtzu53bWm-Bg_xEovdR7fc1GbWTwqkcivtr1rivHWU,16615
157
- librelane/steps/magic.py,sha256=Xtsy1KWu8dcNq3pRlqM9WRRxtwbCQJq24IyxC0W8D2o,20254
157
+ librelane/steps/magic.py,sha256=m4cZH2VomJs0RudtV8avSaZVqRj1NP7Pm2P6qo2z2X0,20919
158
158
  librelane/steps/misc.py,sha256=8ubCvFeFEspXrgnzNWINY5-TXTyalNtlvcX8TSw0qdg,5685
159
159
  librelane/steps/netgen.py,sha256=R9sDWv-9wKMdi2rkuLQdOc4uLlbYhXcKKd6WsZsnLt0,8953
160
- librelane/steps/odb.py,sha256=9ilEnb8w--T84Eh51cB_sz5fwa-UWa7d7p0Di5rv3BA,39371
161
- librelane/steps/openroad.py,sha256=YQ_vMfPrTgz843Rhq9MR38sZ5C_-YuFO4Z73QOkTAfA,100144
160
+ librelane/steps/odb.py,sha256=-zsXi0jVdtfBfAJI0OC4x1jI_B2OX5YVn4uAn6NyFdk,38424
161
+ librelane/steps/openroad.py,sha256=0wA8-fvtIDbaSteh8lY_VxW7cF_73MdNKqTvWc7Blf4,99284
162
162
  librelane/steps/openroad_alerts.py,sha256=IJyB4piBDCKXhkJswHGMYCRDwbdQsR0GZlrGGDhmW6Q,3364
163
163
  librelane/steps/pyosys.py,sha256=LY7qqxkhjfoyBBR7vdkm7ylabbxMJDwIoYm7mAUbLVY,23348
164
- librelane/steps/step.py,sha256=T5z0Nm5z-fq_qj3BIwchnfUobmxX67cEmZ-5dUYT76s,55163
165
- librelane/steps/tclstep.py,sha256=YwyiSXAjRIflH2vzYvTzYfN4FyAI8Td9B_CKLkBj08o,10084
164
+ librelane/steps/step.py,sha256=THIxZkhtkNYt1iRgMduD0ywrOTCaV7cCfUB2EqXN6-k,55751
165
+ librelane/steps/tclstep.py,sha256=8-zpYOo562E86nm7f4DiTqUsLKY0AFtEJgrp9CnWWDw,10083
166
166
  librelane/steps/verilator.py,sha256=MWx2TpLqYyea9_jSeLG9c2S5ujvYERQZRFNaMhfHxZE,7916
167
167
  librelane/steps/yosys.py,sha256=uC72fb1yFXyIxrtcRu5DxxR3hadG19SlGh668yjhWHc,12694
168
- librelane-3.0.0.dev24.dist-info/METADATA,sha256=maVhK_OcJ7zHWMQsUUmlwqT4bID895Jv6Sx3FpZnzm8,6561
169
- librelane-3.0.0.dev24.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
170
- librelane-3.0.0.dev24.dist-info/entry_points.txt,sha256=GTBvXykNMMFsNKiJFgtEw7P1wb_VZIqVM35EFSpyZQE,263
171
- librelane-3.0.0.dev24.dist-info/RECORD,,
168
+ librelane-3.0.0.dev26.dist-info/METADATA,sha256=ndJNvx1YIso3n8GZhhQLFStMDVNpsjMTJ562JZGLULs,6561
169
+ librelane-3.0.0.dev26.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
170
+ librelane-3.0.0.dev26.dist-info/entry_points.txt,sha256=GTBvXykNMMFsNKiJFgtEw7P1wb_VZIqVM35EFSpyZQE,263
171
+ librelane-3.0.0.dev26.dist-info/RECORD,,