librelane 2.4.0.dev9__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.
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/PKG-INFO +1 -1
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/types.py +2 -3
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/config/variable.py +16 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/flows/flow.py +32 -4
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/step.py +22 -7
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/pyproject.toml +1 -1
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/Readme.md +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/__init__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/__main__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/__version__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/__init__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/cli.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/drc.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/generic_dict.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/metrics/__init__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/metrics/__main__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/metrics/library.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/metrics/metric.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/metrics/util.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/misc.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/ring_buffer.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/tcl.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/toolbox.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/common/tpe.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/config/__init__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/config/__main__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/config/config.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/config/flow.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/config/pdk_compat.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/config/preprocessor.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/config/removals.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/container.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/env_info.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm/config.yaml +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm/pin_order.cfg +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm/src/impl.sdc +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm/src/signoff.sdc +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm/src/spm.v +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm/verify/spm_tb.v +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/SPM_example.v +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/base_sdc_file.sdc +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/config-tut.json +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/config.json +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/defines.v +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/template.def +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/user_project_wrapper.v +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/flows/__init__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/flows/builtins.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/flows/classic.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/flows/cli.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/flows/misc.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/flows/optimizing.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/flows/sequential.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/flows/synth_explore.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/logging/__init__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/logging/logger.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/open_pdks_rev +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/plugins.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/py.typed +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/base.sdc +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/klayout/Readme.md +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/klayout/open_design.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/klayout/render.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/klayout/stream_out.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/klayout/xml_drc_report_to_json.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/klayout/xor.drc +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/Readme.md +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/common/read.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/def/antenna_check.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/def/mag.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/def/mag_gds.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/drc.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/extract_spice.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/gds/drc_batch.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/gds/erase_box.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/gds/extras_mag.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/gds/mag_with_pointers.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/get_bbox.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/lef/extras_maglef.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/lef/maglef.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/lef.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/open.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/wrapper.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/netgen/setup.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/apply_def_template.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/cell_frequency.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/check_antenna_properties.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/contextualize.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/defutil.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/diodes.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/disconnected_pins.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/eco_buffer.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/eco_diode.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/filter_unannotated.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/io_place.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/ioplace_parser/__init__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/ioplace_parser/parse.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/label_macro_pins.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/lefutil.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/placers.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/power_utils.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/random_place.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/reader.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/remove_buffers.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/snap_to_grid.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/wire_lengths.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/antenna_check.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/antenna_repair.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/basic_mp.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/buffer_list.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/dpl.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/dpl_cell_pad.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/grt.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/io.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/pdn_cfg.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/resizer.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_global_connections.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_layer_adjustments.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_power_nets.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_rc.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_routing_layers.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/cts.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/cut_rows.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/dpl.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/drt.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/fill.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/floorplan.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/gpl.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/grt.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/gui.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/insert_buffer.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/ioplacer.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/irdrop.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/pdn.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/rcx.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/repair_design.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/repair_design_postgrt.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/rsz_timing_postcts.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/rsz_timing_postgrt.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/sta/check_macro_instances.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/sta/corner.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/tapcell.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/write_views.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/pyosys/construct_abc_script.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/pyosys/json_header.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/pyosys/synthesize.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/pyosys/ys_common.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/tclsh/hello.tcl +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/state/__init__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/state/__main__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/state/design_format.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/state/state.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/__init__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/__main__.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/checker.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/common_variables.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/cvc_rv.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/klayout.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/magic.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/misc.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/netgen.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/odb.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/openroad.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/openroad_alerts.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/pyosys.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/tclstep.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/verilator.py +0 -0
- {librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/steps/yosys.py +0 -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)
|
|
@@ -440,6 +440,9 @@ class Variable:
|
|
|
440
440
|
return_value = list()
|
|
441
441
|
raw = value
|
|
442
442
|
if isinstance(raw, list) or isinstance(raw, tuple):
|
|
443
|
+
if validating_type == List[Path]:
|
|
444
|
+
if any(isinstance(item, List) for item in raw):
|
|
445
|
+
Variable.__flatten_list(value)
|
|
443
446
|
pass
|
|
444
447
|
elif is_string(raw):
|
|
445
448
|
if not permissive_typing:
|
|
@@ -725,3 +728,16 @@ class Variable:
|
|
|
725
728
|
and self.type == rhs.type
|
|
726
729
|
and self.default == rhs.default
|
|
727
730
|
)
|
|
731
|
+
|
|
732
|
+
# Flatten list. Note: Must modify value, not return a new list.
|
|
733
|
+
@staticmethod
|
|
734
|
+
def __flatten_list(value: list):
|
|
735
|
+
new_list = []
|
|
736
|
+
for item in value:
|
|
737
|
+
if isinstance(item, list):
|
|
738
|
+
for sub_item in item:
|
|
739
|
+
new_list.append(sub_item)
|
|
740
|
+
else:
|
|
741
|
+
new_list.append(item)
|
|
742
|
+
|
|
743
|
+
value[:] = new_list
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/examples/spm-user_project_wrapper/defines.v
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/klayout/xml_drc_report_to_json.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/def/antenna_check.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/gds/mag_with_pointers.tcl
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/magic/lef/extras_maglef.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/apply_def_template.py
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/check_antenna_properties.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/filter_unannotated.py
RENAMED
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/ioplace_parser/__init__.py
RENAMED
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/odbpy/ioplace_parser/parse.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/antenna_repair.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/dpl_cell_pad.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/pdn_cfg.tcl
RENAMED
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/resizer.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/common/set_power_nets.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/repair_design_postgrt.tcl
RENAMED
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/rsz_timing_postcts.tcl
RENAMED
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/openroad/rsz_timing_postgrt.tcl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{librelane-2.4.0.dev9 → librelane-2.4.0.dev11}/librelane/scripts/pyosys/construct_abc_script.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|