librelane 2.4.0.dev4__tar.gz → 2.4.0.dev5__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.dev4 → librelane-2.4.0.dev5}/PKG-INFO +2 -2
  2. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/cli.py +1 -1
  3. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/metrics/__main__.py +1 -1
  4. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/state/design_format.py +16 -1
  5. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/openroad.py +19 -14
  6. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/step.py +12 -3
  7. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/pyproject.toml +3 -4
  8. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/Readme.md +0 -0
  9. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/__init__.py +0 -0
  10. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/__main__.py +0 -0
  11. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/__version__.py +0 -0
  12. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/__init__.py +0 -0
  13. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/drc.py +0 -0
  14. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/generic_dict.py +0 -0
  15. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/metrics/__init__.py +0 -0
  16. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/metrics/library.py +0 -0
  17. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/metrics/metric.py +0 -0
  18. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/metrics/util.py +0 -0
  19. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/misc.py +0 -0
  20. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/ring_buffer.py +0 -0
  21. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/tcl.py +0 -0
  22. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/toolbox.py +0 -0
  23. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/tpe.py +0 -0
  24. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/common/types.py +0 -0
  25. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/config/__init__.py +0 -0
  26. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/config/__main__.py +0 -0
  27. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/config/config.py +0 -0
  28. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/config/flow.py +0 -0
  29. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/config/pdk_compat.py +0 -0
  30. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/config/preprocessor.py +0 -0
  31. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/config/removals.py +0 -0
  32. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/config/variable.py +0 -0
  33. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/container.py +0 -0
  34. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/env_info.py +0 -0
  35. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm/config.yaml +0 -0
  36. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm/pin_order.cfg +0 -0
  37. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm/src/impl.sdc +0 -0
  38. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm/src/signoff.sdc +0 -0
  39. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm/src/spm.v +0 -0
  40. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm/verify/spm_tb.v +0 -0
  41. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm-user_project_wrapper/SPM_example.v +0 -0
  42. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +0 -0
  43. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm-user_project_wrapper/config-tut.json +0 -0
  44. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm-user_project_wrapper/config.json +0 -0
  45. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm-user_project_wrapper/defines.v +0 -0
  46. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm-user_project_wrapper/template.def +0 -0
  47. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +0 -0
  48. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/flows/__init__.py +0 -0
  49. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/flows/builtins.py +0 -0
  50. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/flows/classic.py +0 -0
  51. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/flows/cli.py +0 -0
  52. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/flows/flow.py +0 -0
  53. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/flows/misc.py +0 -0
  54. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/flows/optimizing.py +0 -0
  55. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/flows/sequential.py +0 -0
  56. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/flows/synth_explore.py +0 -0
  57. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/logging/__init__.py +0 -0
  58. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/logging/logger.py +0 -0
  59. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/open_pdks_rev +0 -0
  60. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/plugins.py +0 -0
  61. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/py.typed +0 -0
  62. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/base.sdc +0 -0
  63. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/klayout/Readme.md +0 -0
  64. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/klayout/open_design.py +0 -0
  65. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/klayout/render.py +0 -0
  66. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/klayout/stream_out.py +0 -0
  67. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/klayout/xml_drc_report_to_json.py +0 -0
  68. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/klayout/xor.drc +0 -0
  69. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/Readme.md +0 -0
  70. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/common/read.tcl +0 -0
  71. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/def/antenna_check.tcl +0 -0
  72. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/def/mag.tcl +0 -0
  73. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/def/mag_gds.tcl +0 -0
  74. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/drc.tcl +0 -0
  75. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/extract_spice.tcl +0 -0
  76. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/gds/drc_batch.tcl +0 -0
  77. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/gds/erase_box.tcl +0 -0
  78. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/gds/extras_mag.tcl +0 -0
  79. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -0
  80. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/get_bbox.tcl +0 -0
  81. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/lef/extras_maglef.tcl +0 -0
  82. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/lef/maglef.tcl +0 -0
  83. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/lef.tcl +0 -0
  84. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/open.tcl +0 -0
  85. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/magic/wrapper.tcl +0 -0
  86. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/netgen/setup.tcl +0 -0
  87. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/apply_def_template.py +0 -0
  88. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/cell_frequency.py +0 -0
  89. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/check_antenna_properties.py +0 -0
  90. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/contextualize.py +0 -0
  91. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/defutil.py +0 -0
  92. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/diodes.py +0 -0
  93. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/disconnected_pins.py +0 -0
  94. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/eco_buffer.py +0 -0
  95. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/eco_diode.py +0 -0
  96. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/filter_unannotated.py +0 -0
  97. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/io_place.py +0 -0
  98. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/ioplace_parser/__init__.py +0 -0
  99. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/ioplace_parser/parse.py +0 -0
  100. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/label_macro_pins.py +0 -0
  101. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/lefutil.py +0 -0
  102. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/placers.py +0 -0
  103. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/power_utils.py +0 -0
  104. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/random_place.py +0 -0
  105. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/reader.py +0 -0
  106. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/remove_buffers.py +0 -0
  107. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/snap_to_grid.py +0 -0
  108. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/odbpy/wire_lengths.py +0 -0
  109. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/antenna_check.tcl +0 -0
  110. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/antenna_repair.tcl +0 -0
  111. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/basic_mp.tcl +0 -0
  112. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/buffer_list.tcl +0 -0
  113. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/dpl.tcl +0 -0
  114. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/dpl_cell_pad.tcl +0 -0
  115. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/grt.tcl +0 -0
  116. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/io.tcl +0 -0
  117. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/pdn_cfg.tcl +0 -0
  118. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/resizer.tcl +0 -0
  119. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/set_global_connections.tcl +0 -0
  120. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/set_layer_adjustments.tcl +0 -0
  121. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/set_power_nets.tcl +0 -0
  122. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/set_rc.tcl +0 -0
  123. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/common/set_routing_layers.tcl +0 -0
  124. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/cts.tcl +0 -0
  125. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/cut_rows.tcl +0 -0
  126. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/dpl.tcl +0 -0
  127. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/drt.tcl +0 -0
  128. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/fill.tcl +0 -0
  129. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/floorplan.tcl +0 -0
  130. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/gpl.tcl +0 -0
  131. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/grt.tcl +0 -0
  132. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/gui.tcl +0 -0
  133. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/insert_buffer.tcl +0 -0
  134. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/ioplacer.tcl +0 -0
  135. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/irdrop.tcl +0 -0
  136. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/pdn.tcl +0 -0
  137. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/rcx.tcl +0 -0
  138. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/repair_design.tcl +0 -0
  139. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/repair_design_postgrt.tcl +0 -0
  140. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/rsz_timing_postcts.tcl +0 -0
  141. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/rsz_timing_postgrt.tcl +0 -0
  142. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/sta/check_macro_instances.tcl +0 -0
  143. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/sta/corner.tcl +0 -0
  144. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/tapcell.tcl +0 -0
  145. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/openroad/write_views.tcl +0 -0
  146. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/pyosys/construct_abc_script.py +0 -0
  147. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/pyosys/json_header.py +0 -0
  148. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/pyosys/synthesize.py +0 -0
  149. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/pyosys/ys_common.py +0 -0
  150. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/scripts/tclsh/hello.tcl +0 -0
  151. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/state/__init__.py +0 -0
  152. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/state/__main__.py +0 -0
  153. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/state/state.py +0 -0
  154. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/__init__.py +0 -0
  155. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/__main__.py +0 -0
  156. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/checker.py +0 -0
  157. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/common_variables.py +0 -0
  158. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/cvc_rv.py +0 -0
  159. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/klayout.py +0 -0
  160. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/magic.py +0 -0
  161. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/misc.py +0 -0
  162. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/netgen.py +0 -0
  163. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/odb.py +0 -0
  164. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/openroad_alerts.py +0 -0
  165. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/pyosys.py +0 -0
  166. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/tclstep.py +0 -0
  167. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/librelane/steps/verilator.py +0 -0
  168. {librelane-2.4.0.dev4 → librelane-2.4.0.dev5}/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.dev4
3
+ Version: 2.4.0.dev5
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,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Requires-Dist: ciel (>=0.16.0)
19
- Requires-Dist: click (>=8,<9)
19
+ Requires-Dist: click (>=8,<8.2)
20
20
  Requires-Dist: cloup (>=3.0.5,<4)
21
21
  Requires-Dist: deprecated (>=1.2.10,<2)
22
22
  Requires-Dist: httpx (>=0.22.0,<0.29)
@@ -67,7 +67,7 @@ class IntEnumChoice(Choice):
67
67
  f"{value} is not a not a valid value for IntEnum {self.__enum.__name__}"
68
68
  )
69
69
 
70
- def get_metavar(self, param: "Parameter") -> str:
70
+ def get_metavar(self, param: Parameter) -> str:
71
71
  _bk = self.choices
72
72
  self.choices = [f"{e.name} or {e.value}" for e in self.__enum]
73
73
  result = super().get_metavar(param)
@@ -286,7 +286,7 @@ cli.add_command(compare_multiple)
286
286
  @cloup.option(
287
287
  "-m",
288
288
  "--metric-repo",
289
- default="efabless/librelane-metrics",
289
+ default="librelane/librelane-metrics",
290
290
  help="The repository storing metrics for --repo",
291
291
  )
292
292
  @cloup.option(
@@ -12,8 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  from enum import Enum
15
- from dataclasses import dataclass
16
15
  from typing import Dict, Optional
16
+ from dataclasses import dataclass, replace
17
17
 
18
18
 
19
19
  @dataclass
@@ -44,10 +44,16 @@ class DesignFormatObject:
44
44
  folder_override: Optional[str] = None
45
45
  multiple: bool = False
46
46
 
47
+ _instance_optional: bool = False
48
+
47
49
  @property
48
50
  def folder(self) -> str:
49
51
  return self.folder_override or self.id
50
52
 
53
+ @property
54
+ def optional(self) -> bool:
55
+ return self._instance_optional
56
+
51
57
 
52
58
  class DesignFormat(Enum):
53
59
  """
@@ -174,6 +180,15 @@ class DesignFormat(Enum):
174
180
  def by_id(id: str) -> Optional["DesignFormat"]:
175
181
  return _designformat_by_id.get(id)
176
182
 
183
+ def mkOptional(self) -> "DesignFormat":
184
+ # HACK: Create ephemeral DesignFormat copy until 3.0.0 lets us do this
185
+ # a bit more appropriately.
186
+ clone = object.__new__(DesignFormat)
187
+ clone._name_ = self._name_
188
+ clone._value_ = replace(self._value_)
189
+ clone._value_._instance_optional = True
190
+ return clone
191
+
177
192
 
178
193
  _designformat_by_id: Dict[str, "DesignFormat"] = {
179
194
  format.value.id: format for format in DesignFormat
@@ -778,7 +778,10 @@ class STAPostPNR(STAPrePNR):
778
778
  ),
779
779
  ]
780
780
 
781
- inputs = STAPrePNR.inputs + [DesignFormat.SPEF, DesignFormat.ODB]
781
+ inputs = STAPrePNR.inputs + [
782
+ DesignFormat.SPEF,
783
+ DesignFormat.ODB.mkOptional(),
784
+ ]
782
785
  outputs = STAPrePNR.outputs + [DesignFormat.LIB]
783
786
 
784
787
  def prepare_env(self, env: dict, state: State) -> dict:
@@ -851,19 +854,21 @@ class STAPostPNR(STAPrePNR):
851
854
  ) -> MetricsUpdate:
852
855
  current_env["_LIB_SAVE_DIR"] = corner_dir
853
856
  metrics_updates = super().run_corner(state_in, current_env, corner, corner_dir)
854
- try:
855
- filter_unannotated_metrics = self.filter_unannotated_report(
856
- corner=corner,
857
- checks_report=os.path.join(corner_dir, "checks.rpt"),
858
- corner_dir=corner_dir,
859
- env=current_env,
860
- odb_design=str(state_in[DesignFormat.ODB]),
861
- )
862
- except subprocess.CalledProcessError as e:
863
- self.err(
864
- f"Failed filtering unannotated nets for the {corner} timing corner."
865
- )
866
- raise e
857
+ filter_unannotated_metrics = {}
858
+ if odb := state_in[DesignFormat.ODB]:
859
+ try:
860
+ filter_unannotated_metrics = self.filter_unannotated_report(
861
+ corner=corner,
862
+ checks_report=os.path.join(corner_dir, "checks.rpt"),
863
+ corner_dir=corner_dir,
864
+ env=current_env,
865
+ odb_design=str(odb),
866
+ )
867
+ except subprocess.CalledProcessError as e:
868
+ self.err(
869
+ f"Failed filtering unannotated nets for the {corner} timing corner."
870
+ )
871
+ raise e
867
872
  return {**metrics_updates, **filter_unannotated_metrics}
868
873
 
869
874
  def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]:
@@ -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,
@@ -661,7 +667,10 @@ class Step(ABC):
661
667
  for input, output in zip_longest(Self.inputs, Self.outputs):
662
668
  input_str = ""
663
669
  if input is not None:
664
- input_str = f"{input.value.name} (.{input.value.extension})"
670
+ optional = "?" if input.value.optional else ""
671
+ input_str = (
672
+ f"{input.value.name}{optional} (.{input.value.extension})"
673
+ )
665
674
 
666
675
  output_str = ""
667
676
  if output is not None:
@@ -1141,7 +1150,7 @@ class Step(ABC):
1141
1150
 
1142
1151
  for input in self.inputs:
1143
1152
  value = state_in_result[input]
1144
- if value is None:
1153
+ if value is None and not input.value.optional:
1145
1154
  raise StepException(
1146
1155
  f"{type(self).__name__}: missing required input '{input.name}'"
1147
1156
  ) from None
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "librelane"
3
- version = "2.4.0.dev4"
3
+ version = "2.4.0.dev5"
4
4
  description = "An infrastructure for implementing chip design flows"
5
5
  authors = ["Mohamed Gaber <me@donn.website>", "Efabless Corporation"]
6
6
  readme = "Readme.md"
@@ -11,7 +11,7 @@ documentation = "https://librelane.readthedocs.io"
11
11
 
12
12
  [tool.poetry.dependencies]
13
13
  python = ">=3.8,<4"
14
- click = ">=8,<9"
14
+ click = ">=8,<8.2"
15
15
  cloup = ">=3.0.5,<4"
16
16
  pyyaml = ">=5,<7"
17
17
  rich = ">=12,<14"
@@ -31,8 +31,7 @@ semver = "^3.0.2"
31
31
  wheel = "*"
32
32
  black = ">=24.4.0,<25"
33
33
 
34
- flake8 = ">=4"
35
- flake8-no-implicit-concat = "0.3.3"
34
+ flake8 = { version = ">=7", markers = "python_version >= \"3.8.1\"" }
36
35
  flake8-pytest-style = "*"
37
36
 
38
37
  mypy = ">=1.9.0,<1.10.0"
File without changes