librelane 2.4.0.dev10__tar.gz → 2.4.0.dev11__tar.gz

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 (168) hide show
  1. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/PKG-INFO +1 -1
  2. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/types.py +2 -3
  3. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/flows/flow.py +32 -4
  4. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/step.py +22 -7
  5. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/pyproject.toml +1 -1
  6. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/Readme.md +0 -0
  7. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/__init__.py +0 -0
  8. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/__main__.py +0 -0
  9. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/__version__.py +0 -0
  10. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/__init__.py +0 -0
  11. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/cli.py +0 -0
  12. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/drc.py +0 -0
  13. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/generic_dict.py +0 -0
  14. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/metrics/__init__.py +0 -0
  15. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/metrics/__main__.py +0 -0
  16. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/metrics/library.py +0 -0
  17. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/metrics/metric.py +0 -0
  18. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/metrics/util.py +0 -0
  19. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/misc.py +0 -0
  20. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/ring_buffer.py +0 -0
  21. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/tcl.py +0 -0
  22. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/toolbox.py +0 -0
  23. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/common/tpe.py +0 -0
  24. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/config/__init__.py +0 -0
  25. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/config/__main__.py +0 -0
  26. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/config/config.py +0 -0
  27. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/config/flow.py +0 -0
  28. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/config/pdk_compat.py +0 -0
  29. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/config/preprocessor.py +0 -0
  30. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/config/removals.py +0 -0
  31. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/config/variable.py +0 -0
  32. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/container.py +0 -0
  33. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/env_info.py +0 -0
  34. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm/config.yaml +0 -0
  35. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm/pin_order.cfg +0 -0
  36. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm/src/impl.sdc +0 -0
  37. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm/src/signoff.sdc +0 -0
  38. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm/src/spm.v +0 -0
  39. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm/verify/spm_tb.v +0 -0
  40. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/SPM_example.v +0 -0
  41. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +0 -0
  42. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/config-tut.json +0 -0
  43. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/config.json +0 -0
  44. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/defines.v +0 -0
  45. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/template.def +0 -0
  46. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +0 -0
  47. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/flows/__init__.py +0 -0
  48. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/flows/builtins.py +0 -0
  49. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/flows/classic.py +0 -0
  50. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/flows/cli.py +0 -0
  51. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/flows/misc.py +0 -0
  52. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/flows/optimizing.py +0 -0
  53. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/flows/sequential.py +0 -0
  54. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/flows/synth_explore.py +0 -0
  55. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/logging/__init__.py +0 -0
  56. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/logging/logger.py +0 -0
  57. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/open_pdks_rev +0 -0
  58. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/plugins.py +0 -0
  59. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/py.typed +0 -0
  60. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/base.sdc +0 -0
  61. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/klayout/Readme.md +0 -0
  62. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/klayout/open_design.py +0 -0
  63. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/klayout/render.py +0 -0
  64. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/klayout/stream_out.py +0 -0
  65. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/klayout/xml_drc_report_to_json.py +0 -0
  66. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/klayout/xor.drc +0 -0
  67. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/Readme.md +0 -0
  68. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/common/read.tcl +0 -0
  69. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/def/antenna_check.tcl +0 -0
  70. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/def/mag.tcl +0 -0
  71. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/def/mag_gds.tcl +0 -0
  72. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/drc.tcl +0 -0
  73. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/extract_spice.tcl +0 -0
  74. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/gds/drc_batch.tcl +0 -0
  75. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/gds/erase_box.tcl +0 -0
  76. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/gds/extras_mag.tcl +0 -0
  77. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -0
  78. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/get_bbox.tcl +0 -0
  79. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/lef/extras_maglef.tcl +0 -0
  80. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/lef/maglef.tcl +0 -0
  81. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/lef.tcl +0 -0
  82. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/open.tcl +0 -0
  83. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/magic/wrapper.tcl +0 -0
  84. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/netgen/setup.tcl +0 -0
  85. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/apply_def_template.py +0 -0
  86. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/cell_frequency.py +0 -0
  87. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/check_antenna_properties.py +0 -0
  88. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/contextualize.py +0 -0
  89. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/defutil.py +0 -0
  90. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/diodes.py +0 -0
  91. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/disconnected_pins.py +0 -0
  92. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/eco_buffer.py +0 -0
  93. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/eco_diode.py +0 -0
  94. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/filter_unannotated.py +0 -0
  95. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/io_place.py +0 -0
  96. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/ioplace_parser/__init__.py +0 -0
  97. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/ioplace_parser/parse.py +0 -0
  98. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/label_macro_pins.py +0 -0
  99. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/lefutil.py +0 -0
  100. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/placers.py +0 -0
  101. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/power_utils.py +0 -0
  102. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/random_place.py +0 -0
  103. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/reader.py +0 -0
  104. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/remove_buffers.py +0 -0
  105. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/snap_to_grid.py +0 -0
  106. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/wire_lengths.py +0 -0
  107. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/antenna_check.tcl +0 -0
  108. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/antenna_repair.tcl +0 -0
  109. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/basic_mp.tcl +0 -0
  110. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/buffer_list.tcl +0 -0
  111. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/dpl.tcl +0 -0
  112. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/dpl_cell_pad.tcl +0 -0
  113. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/grt.tcl +0 -0
  114. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/io.tcl +0 -0
  115. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/pdn_cfg.tcl +0 -0
  116. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/resizer.tcl +0 -0
  117. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_global_connections.tcl +0 -0
  118. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_layer_adjustments.tcl +0 -0
  119. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_power_nets.tcl +0 -0
  120. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_rc.tcl +0 -0
  121. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_routing_layers.tcl +0 -0
  122. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/cts.tcl +0 -0
  123. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/cut_rows.tcl +0 -0
  124. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/dpl.tcl +0 -0
  125. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/drt.tcl +0 -0
  126. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/fill.tcl +0 -0
  127. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/floorplan.tcl +0 -0
  128. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/gpl.tcl +0 -0
  129. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/grt.tcl +0 -0
  130. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/gui.tcl +0 -0
  131. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/insert_buffer.tcl +0 -0
  132. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/ioplacer.tcl +0 -0
  133. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/irdrop.tcl +0 -0
  134. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/pdn.tcl +0 -0
  135. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/rcx.tcl +0 -0
  136. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/repair_design.tcl +0 -0
  137. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/repair_design_postgrt.tcl +0 -0
  138. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/rsz_timing_postcts.tcl +0 -0
  139. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/rsz_timing_postgrt.tcl +0 -0
  140. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/sta/check_macro_instances.tcl +0 -0
  141. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/sta/corner.tcl +0 -0
  142. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/tapcell.tcl +0 -0
  143. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/openroad/write_views.tcl +0 -0
  144. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/pyosys/construct_abc_script.py +0 -0
  145. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/pyosys/json_header.py +0 -0
  146. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/pyosys/synthesize.py +0 -0
  147. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/pyosys/ys_common.py +0 -0
  148. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/scripts/tclsh/hello.tcl +0 -0
  149. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/state/__init__.py +0 -0
  150. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/state/__main__.py +0 -0
  151. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/state/design_format.py +0 -0
  152. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/state/state.py +0 -0
  153. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/__init__.py +0 -0
  154. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/__main__.py +0 -0
  155. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/checker.py +0 -0
  156. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/common_variables.py +0 -0
  157. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/cvc_rv.py +0 -0
  158. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/klayout.py +0 -0
  159. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/magic.py +0 -0
  160. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/misc.py +0 -0
  161. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/netgen.py +0 -0
  162. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/odb.py +0 -0
  163. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/openroad.py +0 -0
  164. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/openroad_alerts.py +0 -0
  165. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/pyosys.py +0 -0
  166. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/tclstep.py +0 -0
  167. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/verilator.py +0 -0
  168. {librelane-2.4.0.dev10 → librelane-2.4.0.dev11}/librelane/steps/yosys.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: librelane
3
- Version: 2.4.0.dev10
3
+ Version: 2.4.0.dev11
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
@@ -16,6 +16,7 @@ import sys
16
16
  import tempfile
17
17
  from math import isfinite
18
18
  from decimal import Decimal
19
+ from weakref import finalize
19
20
  from collections import UserString
20
21
  from typing import Any, Union, ClassVar, Tuple, Optional
21
22
 
@@ -112,6 +113,4 @@ class ScopedFile(Path):
112
113
  super().__init__(self._ntf.name)
113
114
  self._ntf.write(contents)
114
115
  self._ntf.close()
115
-
116
- def __del__(self):
117
- os.unlink(self._ntf.name)
116
+ self._ntf_cleanup = finalize(self, os.unlink, self._ntf.name)
@@ -375,7 +375,7 @@ class Flow(ABC):
375
375
  self.progress_bar = FlowProgressBar(self.name)
376
376
 
377
377
  @classmethod
378
- def get_help_md(Self) -> str: # pragma: no cover
378
+ def get_help_md(Self, myst_anchors: bool = True) -> str: # pragma: no cover
379
379
  """
380
380
  :returns: rendered Markdown help for this Flow
381
381
  """
@@ -383,10 +383,12 @@ class Flow(ABC):
383
383
  if Self.__doc__:
384
384
  doc_string = textwrap.dedent(Self.__doc__)
385
385
 
386
+ flow_anchor = f"(flow-{slugify(Self.__name__, lower=True)})="
387
+
386
388
  result = (
387
389
  textwrap.dedent(
388
390
  f"""\
389
- (flow-{slugify(Self.__name__, lower=True)})=
391
+ {flow_anchor * myst_anchors}
390
392
  ### {Self.__name__}
391
393
 
392
394
  ```{{eval-rst}}
@@ -426,7 +428,8 @@ class Flow(ABC):
426
428
  for var in flow_config_vars:
427
429
  units = var.units or ""
428
430
  pdk_superscript = "<sup>PDK</sup>" if var.pdk else ""
429
- result += f"| `{var.name}`{{#{var._get_docs_identifier(Self.__name__)}}}{pdk_superscript} | {var.type_repr_md()} | {var.desc_repr_md()} | `{var.default}` | {units} |\n"
431
+ var_anchor = f"{{#{var._get_docs_identifier(Self.__name__)}}}"
432
+ result += f"| `{var.name}`{var_anchor * myst_anchors} {pdk_superscript} | {var.type_repr_md()} | {var.desc_repr_md()} | `{var.default}` | {units} |\n"
430
433
  result += "\n"
431
434
 
432
435
  if len(Self.Steps):
@@ -438,10 +441,35 @@ class Flow(ABC):
438
441
  name = step.name
439
442
  else:
440
443
  name = step.id
441
- result += f"* [`{step.id}`](./step_config_vars.md#{slugify(name)})\n"
444
+ if myst_anchors:
445
+ result += (
446
+ f"* [`{step.id}`](./step_config_vars.md#{slugify(name)})\n"
447
+ )
448
+ else:
449
+ result += f"* {step.id}"
442
450
 
443
451
  return result
444
452
 
453
+ @classmethod
454
+ def display_help(Self): # pragma: no cover
455
+ """
456
+ Displays Markdown help for a given flow.
457
+
458
+ If in an IPython environment, it's rendered using ``IPython.display``.
459
+ Otherwise, it's rendered using ``rich.markdown``.
460
+ """
461
+ try:
462
+ get_ipython() # type: ignore
463
+
464
+ import IPython.display
465
+
466
+ IPython.display.display(IPython.display.Markdown(Self.get_help_md()))
467
+ except NameError:
468
+ from ..logging import console
469
+ from rich.markdown import Markdown
470
+
471
+ console.log(Markdown(Self.get_help_md()))
472
+
445
473
  def get_all_config_variables(self) -> List[Variable]:
446
474
  """
447
475
  :returns: All configuration variables for this Flow, including
@@ -625,6 +625,7 @@ class Step(ABC):
625
625
  *,
626
626
  docstring_override: str = "",
627
627
  use_dropdown: bool = False,
628
+ myst_anchors: bool = False,
628
629
  ): # pragma: no cover
629
630
  """
630
631
  Renders Markdown help for this step to a string.
@@ -682,11 +683,12 @@ class Step(ABC):
682
683
  result += f"| {input_str} | {output_str} |\n"
683
684
 
684
685
  if len(Self.config_vars):
686
+ all_vars_anchor = f"({Self.id.lower()}-configuration-variables)="
685
687
  result += textwrap.dedent(
686
688
  f"""
687
- ({Self.id.lower()}-configuration-variables)=
689
+ {all_vars_anchor * myst_anchors}
688
690
  #### Configuration Variables
689
-
691
+
690
692
  | Variable Name | Type | Description | Default | Units |
691
693
  | - | - | - | - | - |
692
694
  """
@@ -694,13 +696,15 @@ class Step(ABC):
694
696
  for var in Self.config_vars:
695
697
  units = var.units or ""
696
698
  pdk_superscript = "<sup>PDK</sup>" if var.pdk else ""
697
- 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"
699
+ var_anchor = f"{{#{var._get_docs_identifier(Self.id)}}}"
700
+ 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"
698
701
  result += "\n"
699
702
 
703
+ step_anchor = f"(step-{slugify(Self.id.lower())})="
700
704
  result = (
701
705
  textwrap.dedent(
702
706
  f"""
703
- (step-{slugify(Self.id.lower())})=
707
+ {step_anchor * myst_anchors}
704
708
  ### {Self.__get_desc()}
705
709
  """
706
710
  )
@@ -712,11 +716,22 @@ class Step(ABC):
712
716
  @classmethod
713
717
  def display_help(Self): # pragma: no cover
714
718
  """
715
- IPython-only. Displays Markdown help for a given step.
719
+ Displays Markdown help for this Step.
720
+
721
+ If in an IPython environment, it's rendered using ``IPython.display``.
722
+ Otherwise, it's rendered using ``rich.markdown``.
716
723
  """
717
- import IPython.display
724
+ try:
725
+ get_ipython() # type: ignore
726
+
727
+ import IPython.display
728
+
729
+ IPython.display.display(IPython.display.Markdown(Self.get_help_md()))
730
+ except NameError:
731
+ from ..logging import console
732
+ from rich.markdown import Markdown
718
733
 
719
- IPython.display.display(IPython.display.Markdown(Self.get_help_md()))
734
+ console.log(Markdown(Self.get_help_md()))
720
735
 
721
736
  def _repr_markdown_(self) -> str: # pragma: no cover
722
737
  """
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "librelane"
3
- version = "2.4.0.dev10"
3
+ version = "2.4.0.dev11"
4
4
  description = "An infrastructure for implementing chip design flows"
5
5
  # Technically, maintainer. We cannot use the maintainers field until
6
6
  # poetry-core>=2.0.0 which requires Python version 3.9+. This field does