From 55c9f6b8b964daa05b87f8e2f783a815df58215e Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Tue, 3 Nov 2026 04:02:30 +0200 Subject: [PATCH 1/6] chore: update base yosys to 0.70 - update yosys submodule to 0.70 - update two tests - lint/format with ruff - remove nix flake --- .github/scripts/generate_tag.py | 41 -------- .github/scripts/gh.py | 139 -------------------------- .github/workflows/ci.yml | 6 +- MANIFEST.in | 3 +- Readme.md | 3 +- default.nix | 46 --------- flake.lock | 45 --------- flake.nix | 46 --------- include/kernel/yosys_config.h | 1 + {libparse => include}/stdio_filebuf.h | 0 libparse/__init__.py | 11 ++ libparse/__main__.py | 14 ++- libparse/__version__.py | 3 +- libparse/wrapper.cpp | 1 + pyproject.toml | 10 ++ setup.py | 11 +- shell.nix | 6 ++ test/conftest.py | 4 +- test/generate_ref.py | 6 +- test/inverter_nldm.lib.ref | 2 +- test/inverter_spdm.lib.ref | 2 +- test/test_parse.py | 2 + yosys | 2 +- 23 files changed, 65 insertions(+), 339 deletions(-) delete mode 100644 .github/scripts/generate_tag.py delete mode 100644 .github/scripts/gh.py delete mode 100644 default.nix delete mode 100644 flake.lock delete mode 100644 flake.nix create mode 100644 include/kernel/yosys_config.h rename {libparse => include}/stdio_filebuf.h (100%) create mode 100644 shell.nix diff --git a/.github/scripts/generate_tag.py b/.github/scripts/generate_tag.py deleted file mode 100644 index 38c0b41..0000000 --- a/.github/scripts/generate_tag.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# Copyright 2020 Efabless Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import os -import subprocess -import sys - -from gh import gh - -version = subprocess.check_output( - [sys.executable, os.path.join("libparse", "__version__.py")], - encoding="utf8", -) - -print("Getting tags…") - -latest_tag = None -latest_tag_commit = None -tags = [pair[1] for pair in gh.libparse.tags] - -tag_exists = version in tags - -if tag_exists: - print("Tag already exists. Leaving NEW_TAG unaltered.") -else: - new_tag = version - - print("Found new tag %s." % new_tag) - gh.export_env("NEW_TAG", new_tag) diff --git a/.github/scripts/gh.py b/.github/scripts/gh.py deleted file mode 100644 index 2efa5c2..0000000 --- a/.github/scripts/gh.py +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/env python3 -# Copyright 2020 Efabless Corporation -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import os -import subprocess -from types import SimpleNamespace - - -def export_env_default(key, value): - with open(os.getenv("GITHUB_ENV"), "a") as f: - f.write("%s=%s\n" % (key, value)) - - -export_env = export_env_default - - -class Repo(object): - def __init__(self, name, url, branch_rx=None, extraction_rx=None): - print("[Repo Object] Initializing repo %s with URL %s…" % (name, url)) - self.name = name - self.url = url - self.commit = None - self.branch_rx = branch_rx - self.extraction_rx = extraction_rx - - self._latest_commit = None - self._branches = None - self._tags = None - - @property - def latest_commit(self): - if self._latest_commit is None: - print("[Repo Object] Fetching latest commit for %s…" % self.name) - p = subprocess.check_output(["git", "ls-remote", self.url]).decode("utf8") - for line in p.split("\n"): - if "HEAD" in line: - self._latest_commit = line[:40] - return self._latest_commit - - @property - def branches(self): - if self._branches is None: - print("[Repo Object] Fetching branches for %s…" % self.name) - p = subprocess.check_output( - ["git", "ls-remote", "--heads", self.url] - ).decode("utf8") - branches = [] - for line in p.split("\n"): - if line.strip() == "": - continue - - match = line.split() - - hash = match[0] - name = match[1] - - branches.append((hash, name)) - self._branches = branches - return self._branches - - @property - def tags(self): - if self._tags is None: - print("[Repo Object] Fetching tags for %s…" % self.name) - p = subprocess.check_output( - ["git", "ls-remote", "--tags", "--sort=creatordate", self.url] - ).decode("utf8") - - tags = [] - for line in p.split("\n"): - if line.strip() == "": - continue - - match = line.split() - - hash = match[0] - name = match[1].split("/")[2] - - tags.append((hash, name)) - self._tags = tags - return self._tags - - def out_of_date(self): - return self.commit != self.latest_commit - - -if os.getenv("GITHUB_ACTIONS") != "true": - dn = os.path.dirname - git_directory = dn(dn(dn(os.path.realpath(__file__)))) - - def git_command(*args): - return subprocess.check_output(["git"] + list(args), cwd=git_directory).decode( - "utf-8" - )[:-1] - - repo_url = git_command("remote", "get-url", "origin") - branch = git_command("branch", "--show-current") - - os.environ["REPO_URL"] = repo_url - os.environ["BRANCH_NAME"] = branch - os.environ["GITHUB_WORKSPACE"] = git_directory - os.environ["GITHUB_EVENT_NAME"] = "workspace_dispatch" - os.environ["GITHUB_RUN_ID"] = "mock_gha_run" - - def export_env_alt(key, value): - os.environ[key] = value - print("Setting ENV[%s] to %s..." % (key, value)) - - export_env = export_env_alt - -origin = os.getenv("REPO_URL") -repo = Repo("libparse", origin) - -# public -gh = SimpleNamespace( - **{ - "run_id": os.getenv("GITHUB_RUN_ID"), - "origin": origin, - "branch": os.getenv("BRANCH_NAME"), - "root": os.getenv("GITHUB_WORKSPACE"), - "pdk": os.getenv("PDK_ROOT"), - "tool": os.getenv("TOOL"), - "event": SimpleNamespace(**{"name": os.getenv("GITHUB_EVENT_NAME")}), - "export_env": export_env, - "Repo": Repo, - "libparse": repo, - } -) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 16afe7b..36640ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,13 +57,11 @@ jobs: name: Build Wheels | ${{ matrix.os.name }} | ${{ matrix.os.archs }} runs-on: ${{ matrix.os.runner }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: fetch-depth: 0 submodules: true persist-credentials: false - - run: | - perl -i -pe 'print "__attribute__((weak)) " if /LibertyParser::error/' yosys/passes/techmap/libparse.cc - uses: actions/setup-python@v5 - if: ${{ matrix.os.family == 'macos' && matrix.os.archs == 'arm64' }} name: "[macOS/arm64] Install Python 3.8 (see: https://cibuildwheel.pypa.io/en/stable/faq/#macos-building-cpython-38-wheels-on-arm64)" @@ -95,7 +93,7 @@ jobs: id-token: write needs: build_wheels steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v5 with: path: "." pattern: python-wheels-* diff --git a/MANIFEST.in b/MANIFEST.in index 6fa3d06..1943f61 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,6 @@ include Readme.md -include libparse/stdio_filebuf.h +include include/* +include include/**/* include yosys/kernel/*.h include yosys/kernel/constids.inc include yosys/passes/techmap/libparse.* diff --git a/Readme.md b/Readme.md index b6bca54..6079974 100644 --- a/Readme.md +++ b/Readme.md @@ -1,6 +1,6 @@ # libparse-python -A SWIG-based Python wrapper around [Yosys](https://github.com/yosyshq/yosys)'s +A pybind11-based Python wrapper around [Yosys](https://github.com/yosyshq/yosys)'s `libparse`, for all your dotlib file parsing needs. # Requirements @@ -9,6 +9,7 @@ A SWIG-based Python wrapper around [Yosys](https://github.com/yosyshq/yosys)'s * UNIX or UNIX-like operating system (Windows untested) * Python 3.8+ (CPython or PyPy) with PIP +* C++20 compiler # License Apache 2.0. Check 'License'. diff --git a/default.nix b/default.nix deleted file mode 100644 index 5b33452..0000000 --- a/default.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ - lib, - src ? ./., - buildPythonPackage, - pytest, - pybind11, - pytestCheckHook, - perl, -}: let - version_file = builtins.readFile ./libparse/__version__.py; - version_list = builtins.match ''.+''\n__version__ = "([^"]+)"''\n.+''$'' version_file; - version = builtins.head version_list; -in - buildPythonPackage { - pname = "libparse"; - inherit version; - - inherit src; - - postPatch = '' - perl -i -pe 'print "__attribute__((weak)) " if /LibertyParser::error/' yosys/passes/techmap/libparse.cc - ''; - - nativeBuildInputs = [ - perl - ]; - - buildInputs = [ - pybind11 - ]; - - pythonImportsCheck = [ "libparse" ]; - - doCheck = true; - - nativeCheckInputs = [ - pytestCheckHook - ]; - - meta = { - description = "Python wrapper around Yosys's libparse"; - license = with lib.licenses; [asl20]; - homepage = "https://github.com/librelane/libparse-python"; - platforms = with lib.platforms; linux ++ darwin; - }; - } diff --git a/flake.lock b/flake.lock deleted file mode 100644 index cdac53d..0000000 --- a/flake.lock +++ /dev/null @@ -1,45 +0,0 @@ -{ - "nodes": { - "nix-eda": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1756208922, - "narHash": "sha256-6CR+pLQPn3urPdlAmRS4qe2b9IzjyyMB25hy6V68bcc=", - "owner": "fossi-foundation", - "repo": "nix-eda", - "rev": "5fe9ce30351385cead78fe8932210b0683795c80", - "type": "github" - }, - "original": { - "owner": "fossi-foundation", - "repo": "nix-eda", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1750400657, - "narHash": "sha256-3vkjFnxCOP6vm5Pm13wC/Zy6/VYgei/I/2DWgW4RFeA=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "b2485d56967598da068b5a6946dadda8bfcbcd37", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-25.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "nix-eda": "nix-eda" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 81897b6..0000000 --- a/flake.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ - inputs = { - self.submodules = true; - nix-eda.url = "github:fossi-foundation/nix-eda"; - }; - - outputs = { - self, - nix-eda, - ... - }: let - nixpkgs = nix-eda.inputs.nixpkgs; - lib = nixpkgs.lib; - in { - overlays = { - default = lib.composeManyExtensions [ - ( - nix-eda.composePythonOverlay (pkgs': pkgs: pypkgs': pypkgs: let - callPythonPackage = lib.callPackageWith (pkgs' // pypkgs'); - in { - libparse = callPythonPackage ./default.nix { - src = self; - }; - }) - ) - ]; - }; - - legacyPackages = nix-eda.forAllSystems ( - system: - import nix-eda.inputs.nixpkgs { - inherit system; - overlays = [nix-eda.overlays.default self.overlays.default]; - } - ); - - packages = nix-eda.forAllSystems ( - system: let - pkgs = self.legacyPackages."${system}"; - in { - inherit (pkgs.python3.pkgs) libparse; - default = self.packages."${system}".libparse; - } - ); - }; -} diff --git a/include/kernel/yosys_config.h b/include/kernel/yosys_config.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/include/kernel/yosys_config.h @@ -0,0 +1 @@ +#pragma once diff --git a/libparse/stdio_filebuf.h b/include/stdio_filebuf.h similarity index 100% rename from libparse/stdio_filebuf.h rename to include/stdio_filebuf.h diff --git a/libparse/__init__.py b/libparse/__init__.py index c1b8007..b0b0ffc 100644 --- a/libparse/__init__.py +++ b/libparse/__init__.py @@ -1,6 +1,10 @@ +# Copyright 2025 Mohamed Gaber +# SPDX-License-Identifier: Apache-2.0 from _libparse import LibertyAst, LibertyParser + from .__version__ import __version__ + def __LibertyAst__to_dict(self): result = {} result["id"] = self.id @@ -12,4 +16,11 @@ def __LibertyAst__to_dict(self): result["children"] = [child.to_dict() for child in self.children] return result + LibertyAst.to_dict = __LibertyAst__to_dict + +__all__ = [ + "LibertyAst", + "LibertyParser", + "__version__", +] diff --git a/libparse/__main__.py b/libparse/__main__.py index a52623b..9e9f773 100644 --- a/libparse/__main__.py +++ b/libparse/__main__.py @@ -1,13 +1,20 @@ - -import sys +# Copyright 2025 Mohamed Gaber +# SPDX-License-Identifier: Apache-2.0 import json +import sys from argparse import ArgumentParser from . import LibertyParser, __version__ + def main(argv): p = ArgumentParser("libparse") - p.add_argument("-v", "--version", action='version', version=f'%(prog)s {__version__}') + p.add_argument( + "-v", + "--version", + action="version", + version=f"%(prog)s {__version__}", + ) p.add_argument("file", nargs=1) ns = p.parse_args(argv) f = open(ns.file[0], "r") @@ -18,5 +25,6 @@ def main(argv): exit(1) print(json.dumps(parsed.ast.to_dict())) + if __name__ == "__main__": main(sys.argv[1:]) diff --git a/libparse/__version__.py b/libparse/__version__.py index 6a626f2..9df9f70 100644 --- a/libparse/__version__.py +++ b/libparse/__version__.py @@ -1,4 +1,3 @@ - # Copyright 2025 Mohamed Gaber # # Adapted from libparse-python @@ -16,7 +15,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.56.0" +__version__ = "0.70.0" if __name__ == "__main__": print(__version__, end="") diff --git a/libparse/wrapper.cpp b/libparse/wrapper.cpp index da6a028..9fd25e1 100644 --- a/libparse/wrapper.cpp +++ b/libparse/wrapper.cpp @@ -1,4 +1,5 @@ // Copyright 2025 Mohamed Gaber +// SPDX-License-Identifier: Apache-2.0 // // Partially adapted from libparse-python // diff --git a/pyproject.toml b/pyproject.toml index 6f6db0a..1766df5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,3 +7,13 @@ build-backend = "setuptools.build_meta" [tool.pytest.ini_options] testpaths = ["test"] + +[tool.ruff] +extend-exclude = ["yosys"] + +[tool.ruff.lint] +extend-select = ["I", "E", "PL"] +extend-ignore = ["PLR", "SIM115"] + +[tool.ruff.lint.per-file-ignores] +"test/**/*.py" = ["PLC0415"] diff --git a/setup.py b/setup.py index aabf76a..367be2e 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,11 @@ -#!/usr/bin/env python3 -import sys +# Copyright 2025 Mohamed Gaber +# SPDX-License-Identifier: Apache-2.0 import subprocess +import sys from pathlib import Path -from setuptools import setup + from pybind11.setup_helpers import Pybind11Extension, build_ext +from setuptools import setup __file_dir__ = Path(__file__).absolute().parent __version__ = subprocess.check_output( @@ -17,9 +19,10 @@ "libparse/wrapper.cpp", "yosys/passes/techmap/libparse.cc", ], - include_dirs=["yosys/passes/techmap", "yosys"], + include_dirs=["yosys/passes/techmap", "yosys", "include"], define_macros=[("FILTERLIB", "1"), ("_YOSYS_", "1")], ) +ext.cxx_std = 20 setup( name="lln-libparse", diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..3d4b70d --- /dev/null +++ b/shell.nix @@ -0,0 +1,6 @@ +{pkgs ? import {}}: +pkgs.mkShell { + buildInputs = [ + (pkgs.python3.withPackages (ps: with ps; [pybind11])) + ]; +} diff --git a/test/conftest.py b/test/conftest.py index e0c039a..ea64198 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -1,6 +1,8 @@ -import pytest from pathlib import Path +import pytest + + def pytest_configure(): pytest.test_root = Path(__file__).absolute().parent pytest.parsing_tests = pytest.test_root.glob("*.lib") diff --git a/test/generate_ref.py b/test/generate_ref.py index 8916e5f..619139d 100644 --- a/test/generate_ref.py +++ b/test/generate_ref.py @@ -1,7 +1,7 @@ import json from pathlib import Path -from typing import Dict -from libparse import LibertyParser, LibertyAst + +from libparse import LibertyParser __file_dir__ = Path(__file__).absolute().parent @@ -13,5 +13,5 @@ parsed = LibertyParser(x) with open(str(file) + ".ref", "w", encoding="utf8") as f: json.dump(parsed.ast.to_dict(), fp=f) - except RuntimeError as e: + except RuntimeError: pass diff --git a/test/inverter_nldm.lib.ref b/test/inverter_nldm.lib.ref index 00597f3..804a613 100644 --- a/test/inverter_nldm.lib.ref +++ b/test/inverter_nldm.lib.ref @@ -1 +1 @@ -{"id": "library", "args": ["inverter"], "children": [{"id": "delay_model", "value": "\"table_lookup\""}, {"id": "time_unit", "value": "\"1ns\""}, {"id": "voltage_unit", "value": "\"1V\""}, {"id": "current_unit", "value": "\"1mA\""}, {"id": "capacitive_load_unit", "args": ["1", "pf"]}, {"id": "pulling_resistance_unit", "value": "1kohm"}, {"id": "default_fanout_load", "value": "1.0"}, {"id": "default_inout_pin_cap", "value": "1.0"}, {"id": "default_input_pin_cap", "value": "1.0"}, {"id": "default_output_pin_cap", "value": "0.00"}, {"id": "nom_voltage", "value": "1.6"}, {"id": "input_voltage", "args": ["MY_CMOS_IN"], "children": [{"id": "vil", "value": "0.3"}, {"id": "vih", "value": "1.1"}, {"id": "vimin", "value": "-0.3"}, {"id": "vimax", "value": "VDD+0.3"}]}, {"id": "output_voltage", "args": ["MY_CMOS_OUT"], "children": [{"id": "vol", "value": "0.1"}, {"id": "voh", "value": "1.4"}, {"id": "vomin", "value": "-0.3"}, {"id": "vomax", "value": "VDD+0.3"}]}, {"id": "noise_lut_template", "args": ["my_noise_reject"], "children": [{"id": "variable_1", "value": "input_noise_width"}, {"id": "variable_2", "value": "total_output_net_capacitance"}, {"id": "index_1", "args": ["\"0, 0.1, 0.3, 1, 2\""]}, {"id": "index_2", "args": ["\"0, 0.1, 0.3, 1, 2\""]}]}, {"id": "noise_lut_template", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "variable_1", "value": "input_noise_width"}, {"id": "variable_2", "value": "total_output_net_capacitance"}, {"id": "index_1", "args": ["\"0, 0.1, 2\""]}, {"id": "index_2", "args": ["\"0, 0.1, 2\""]}]}, {"id": "iv_lut_template", "args": ["my_current_low"], "children": [{"id": "variable_1", "value": "iv_output_voltage"}, {"id": "index_1", "args": ["\"-1, -0.1, 0, 0.1 0.8, 1.6, 2\""]}]}, {"id": "iv_lut_template", "args": ["my_current_high"], "children": [{"id": "variable_1", "value": "iv_output_voltage"}, {"id": "index_1", "args": ["\"-1, 0, 0.3, 0.5, 0.8, 1.5, 1.6, 1.7, 2\""]}]}, {"id": "propagation_lut_template", "args": ["my_propagated_noise"], "children": [{"id": "variable_1", "value": "input_noise_width"}, {"id": "variable_2", "value": "input_noise_height"}, {"id": "variable_3", "value": "total_output_net_capacitance"}, {"id": "index_1", "args": ["\"0.01, 0.2, 2\""]}, {"id": "index_2", "args": ["\"0.2, 0.8\""]}, {"id": "index_3", "args": ["\"0, 2\""]}]}, {"id": "cell", "args": ["INV"], "children": [{"id": "area", "value": "1"}, {"id": "pin", "args": ["A"], "children": [{"id": "direction", "value": "input"}, {"id": "capacitance", "value": "1"}, {"id": "fanout_load", "value": "1"}, {"id": "input_voltage", "value": "MY_CMOS_IN"}, {"id": "hyperbolic_noise_low", "children": [{"id": "height_coefficient", "value": "0.4"}, {"id": "area_coefficient", "value": "1.1"}, {"id": "width_coefficient", "value": "0.1"}]}, {"id": "hyperbolic_noise_high", "children": [{"id": "height_coefficient", "value": "0.3"}, {"id": "area_coefficient", "value": "0.9"}, {"id": "width_coefficient", "value": "0.1"}]}, {"id": "hyperbolic_noise_below_low", "children": [{"id": "height_coefficient", "value": "0.1"}, {"id": "area_coefficient", "value": "0.3"}, {"id": "width_coefficient", "value": "0.01"}]}, {"id": "hyperbolic_noise_above_high", "children": [{"id": "height_coefficient", "value": "0.1"}, {"id": "area_coefficient", "value": "0.3"}, {"id": "width_coefficient", "value": "0.01"}]}]}, {"id": "pin", "args": ["Y"], "children": [{"id": "direction", "value": "output"}, {"id": "max_fanout", "value": "10"}, {"id": "function", "value": "\" !A \""}, {"id": "output_voltage", "value": "MY_CMOS_OUT"}, {"id": "timing", "children": [{"id": "related_pin", "value": "A"}, {"id": "steady_state_resistance_high", "value": "1500"}, {"id": "steady_state_resistance_low", "value": "1100"}, {"id": "steady_state_resistance_above_high", "value": "200"}, {"id": "steady_state_resistance_below_low", "value": "100"}, {"id": "cell_rise", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "rise_transition", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "cell_fall", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "fall_transition", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "noise_immunity_low", "args": ["my_noise_reject"], "children": [{"id": "values", "args": ["\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\""]}]}, {"id": "noise_immunity_high", "args": ["my_noise_reject"], "children": [{"id": "values", "args": ["\"1.3, 0.8, 0.7, 0.6, 0.55\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\""]}]}, {"id": "noise_immunity_below_low", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "values", "args": ["\"1, 0.8, 0.5\"", "\"1, 0.8, 0.5\"", "\"1, 0.8, 0.5\""]}]}, {"id": "noise_immunity_above_high", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "values", "args": ["\"1, 0.8, 0.5\"", "\"1, 0.8, 0.5\"", "\"1, 0.8, 0.5\""]}]}, {"id": "steady_state_current_low", "args": ["my_current_low"], "children": [{"id": "values", "args": ["\"0.1, 0.05, 0, -0.1, -0.25, -1, -1.8\""]}]}, {"id": "steady_state_current_high", "args": ["my_current_high"], "children": [{"id": "values", "args": ["\"2, 1.8, 1.7, 1.4, 1, 0.5, 0, -0.1, -0.8\""]}]}, {"id": "propagated_noise_width_high", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_height_high", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_width_low", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_height_low", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_width_above_high", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_height_above_high", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_width_below_low", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_height_below_low", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}]}]}]}]} \ No newline at end of file +{"id": "library", "args": ["inverter"], "children": [{"id": "delay_model", "value": "\"table_lookup\""}, {"id": "time_unit", "value": "\"1ns\""}, {"id": "voltage_unit", "value": "\"1V\""}, {"id": "current_unit", "value": "\"1mA\""}, {"id": "capacitive_load_unit", "args": ["1", "pf"]}, {"id": "pulling_resistance_unit", "value": "1kohm"}, {"id": "default_fanout_load", "value": "1.0"}, {"id": "default_inout_pin_cap", "value": "1.0"}, {"id": "default_input_pin_cap", "value": "1.0"}, {"id": "default_output_pin_cap", "value": "0.00"}, {"id": "nom_voltage", "value": "1.6"}, {"id": "input_voltage", "args": ["MY_CMOS_IN"], "children": [{"id": "vil", "value": "0.3"}, {"id": "vih", "value": "1.1"}, {"id": "vimin", "value": "-0.3"}, {"id": "vimax", "value": "VDD + 0.3"}]}, {"id": "output_voltage", "args": ["MY_CMOS_OUT"], "children": [{"id": "vol", "value": "0.1"}, {"id": "voh", "value": "1.4"}, {"id": "vomin", "value": "-0.3"}, {"id": "vomax", "value": "VDD + 0.3"}]}, {"id": "noise_lut_template", "args": ["my_noise_reject"], "children": [{"id": "variable_1", "value": "input_noise_width"}, {"id": "variable_2", "value": "total_output_net_capacitance"}, {"id": "index_1", "args": ["\"0, 0.1, 0.3, 1, 2\""]}, {"id": "index_2", "args": ["\"0, 0.1, 0.3, 1, 2\""]}]}, {"id": "noise_lut_template", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "variable_1", "value": "input_noise_width"}, {"id": "variable_2", "value": "total_output_net_capacitance"}, {"id": "index_1", "args": ["\"0, 0.1, 2\""]}, {"id": "index_2", "args": ["\"0, 0.1, 2\""]}]}, {"id": "iv_lut_template", "args": ["my_current_low"], "children": [{"id": "variable_1", "value": "iv_output_voltage"}, {"id": "index_1", "args": ["\"-1, -0.1, 0, 0.1 0.8, 1.6, 2\""]}]}, {"id": "iv_lut_template", "args": ["my_current_high"], "children": [{"id": "variable_1", "value": "iv_output_voltage"}, {"id": "index_1", "args": ["\"-1, 0, 0.3, 0.5, 0.8, 1.5, 1.6, 1.7, 2\""]}]}, {"id": "propagation_lut_template", "args": ["my_propagated_noise"], "children": [{"id": "variable_1", "value": "input_noise_width"}, {"id": "variable_2", "value": "input_noise_height"}, {"id": "variable_3", "value": "total_output_net_capacitance"}, {"id": "index_1", "args": ["\"0.01, 0.2, 2\""]}, {"id": "index_2", "args": ["\"0.2, 0.8\""]}, {"id": "index_3", "args": ["\"0, 2\""]}]}, {"id": "cell", "args": ["INV"], "children": [{"id": "area", "value": "1"}, {"id": "pin", "args": ["A"], "children": [{"id": "direction", "value": "input"}, {"id": "capacitance", "value": "1"}, {"id": "fanout_load", "value": "1"}, {"id": "input_voltage", "value": "MY_CMOS_IN"}, {"id": "hyperbolic_noise_low", "children": [{"id": "height_coefficient", "value": "0.4"}, {"id": "area_coefficient", "value": "1.1"}, {"id": "width_coefficient", "value": "0.1"}]}, {"id": "hyperbolic_noise_high", "children": [{"id": "height_coefficient", "value": "0.3"}, {"id": "area_coefficient", "value": "0.9"}, {"id": "width_coefficient", "value": "0.1"}]}, {"id": "hyperbolic_noise_below_low", "children": [{"id": "height_coefficient", "value": "0.1"}, {"id": "area_coefficient", "value": "0.3"}, {"id": "width_coefficient", "value": "0.01"}]}, {"id": "hyperbolic_noise_above_high", "children": [{"id": "height_coefficient", "value": "0.1"}, {"id": "area_coefficient", "value": "0.3"}, {"id": "width_coefficient", "value": "0.01"}]}]}, {"id": "pin", "args": ["Y"], "children": [{"id": "direction", "value": "output"}, {"id": "max_fanout", "value": "10"}, {"id": "function", "value": "\" !A \""}, {"id": "output_voltage", "value": "MY_CMOS_OUT"}, {"id": "timing", "children": [{"id": "related_pin", "value": "A"}, {"id": "steady_state_resistance_high", "value": "1500"}, {"id": "steady_state_resistance_low", "value": "1100"}, {"id": "steady_state_resistance_above_high", "value": "200"}, {"id": "steady_state_resistance_below_low", "value": "100"}, {"id": "cell_rise", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "rise_transition", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "cell_fall", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "fall_transition", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "noise_immunity_low", "args": ["my_noise_reject"], "children": [{"id": "values", "args": ["\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\""]}]}, {"id": "noise_immunity_high", "args": ["my_noise_reject"], "children": [{"id": "values", "args": ["\"1.3, 0.8, 0.7, 0.6, 0.55\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\"", "\"1.5, 0.9, 0.8, 0.65, 0.6\""]}]}, {"id": "noise_immunity_below_low", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "values", "args": ["\"1, 0.8, 0.5\"", "\"1, 0.8, 0.5\"", "\"1, 0.8, 0.5\""]}]}, {"id": "noise_immunity_above_high", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "values", "args": ["\"1, 0.8, 0.5\"", "\"1, 0.8, 0.5\"", "\"1, 0.8, 0.5\""]}]}, {"id": "steady_state_current_low", "args": ["my_current_low"], "children": [{"id": "values", "args": ["\"0.1, 0.05, 0, -0.1, -0.25, -1, -1.8\""]}]}, {"id": "steady_state_current_high", "args": ["my_current_high"], "children": [{"id": "values", "args": ["\"2, 1.8, 1.7, 1.4, 1, 0.5, 0, -0.1, -0.8\""]}]}, {"id": "propagated_noise_width_high", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_height_high", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_width_low", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_height_low", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_width_above_high", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_height_above_high", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_width_below_low", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}, {"id": "propagated_noise_height_below_low", "args": ["my_propagated_noise"], "children": [{"id": "values", "args": ["\"0.01, 0.10\"", "\"0.15, 0.18\"", "\"0.04, 0.14\"", "\"0.18, 0.25\"", "\"0.07, 0.17\"", "\"0.32, 0.35\""]}]}]}]}]}]} \ No newline at end of file diff --git a/test/inverter_spdm.lib.ref b/test/inverter_spdm.lib.ref index cebdb55..c770754 100644 --- a/test/inverter_spdm.lib.ref +++ b/test/inverter_spdm.lib.ref @@ -1 +1 @@ -{"id": "library", "args": ["inverter"], "children": [{"id": "delay_model", "value": "\"polynomial\""}, {"id": "time_unit", "value": "\"1ns\""}, {"id": "voltage_unit", "value": "\"1V\""}, {"id": "current_unit", "value": "\"1mA\""}, {"id": "capacitive_load_unit", "args": ["1", "pf"]}, {"id": "pulling_resistance_unit", "value": "1kohm"}, {"id": "default_fanout_load", "value": "1.0"}, {"id": "default_inout_pin_cap", "value": "1.0"}, {"id": "default_input_pin_cap", "value": "1.0"}, {"id": "default_output_pin_cap", "value": "0.00"}, {"id": "power_supply", "children": [{"id": "default_power_rail", "value": "VDD"}, {"id": "power_rail", "args": ["VDD1", "1.6"]}, {"id": "power_rail", "args": ["VDD2", "1.3"]}]}, {"id": "input_voltage", "args": ["MY_CMOS_IN"], "children": [{"id": "vil", "value": "0.3"}, {"id": "vih", "value": "1.1"}, {"id": "vimin", "value": "-0.3"}, {"id": "vimax", "value": "VDD+0.3"}]}, {"id": "output_voltage", "args": ["MY_CMOS_OUT"], "children": [{"id": "vol", "value": "0.1"}, {"id": "voh", "value": "1.4"}, {"id": "vomin", "value": "-0.3"}, {"id": "vomax", "value": "VDD+0.3"}]}, {"id": "poly_template", "args": ["my_noise_reject"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature", "total_output_net_capacitance"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.4", "1.8"]}, {"id": "variable_3_range", "args": ["1.1", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "125"]}, {"id": "variable_5_range", "args": ["0.01", "1.0"]}, {"id": "domain", "args": ["typ"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature", "total_output_net_capacitance"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.5", "1.7"]}, {"id": "variable_3_range", "args": ["1.2", "1.4"]}, {"id": "variable_4_range", "args": ["25", "25"]}, {"id": "variable_5_range", "args": ["0.01", "1.0"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}]}, {"id": "domain", "args": ["min"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.7", "1.8"]}, {"id": "variable_3_range", "args": ["1.4", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "-40"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}]}, {"id": "domain", "args": ["max"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.6", "1.7"]}, {"id": "variable_3_range", "args": ["1.1", "1.2"]}, {"id": "variable_4_range", "args": ["125", "125"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}]}]}, {"id": "poly_template", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.4", "1.8"]}, {"id": "variable_3_range", "args": ["1.1", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "125"]}]}, {"id": "poly_template", "args": ["my_current_low"], "children": [{"id": "variables", "args": ["iv_output_voltage", "voltage", "voltage1", "temperature"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["-1", "2"]}, {"id": "variable_2_range", "args": ["1.4", "1.8"]}, {"id": "variable_3_range", "args": ["1.1", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "125"]}]}, {"id": "poly_template", "args": ["my_current_high"], "children": [{"id": "variables", "args": ["iv_output_voltage", "voltage", "voltage1", "temperature"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["-1", "2"]}, {"id": "variable_2_range", "args": ["1.4", "1.8"]}, {"id": "variable_3_range", "args": ["1.1", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "125"]}]}, {"id": "poly_template", "args": ["my_propagated_noise"], "children": [{"id": "variables", "args": ["input_noise_width", "input_noise_height", "input_peak_time_ratio", "total_output_net_capacitance", "voltage", "voltage1", "temperature"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["0.01", "2"]}, {"id": "variable_2_range", "args": ["0", "0.8"]}, {"id": "variable_3_range", "args": ["0.0", "1.0"]}, {"id": "variable_4_range", "args": ["0", "2"]}, {"id": "variable_5_range", "args": ["1.4", "1.8"]}, {"id": "variable_6_range", "args": ["1.1", "1.5"]}, {"id": "variable_7_range", "args": ["-40", "125"]}]}, {"id": "cell", "args": ["INV"], "children": [{"id": "area", "value": "1"}, {"id": "pin", "args": ["A"], "children": [{"id": "direction", "value": "input"}, {"id": "capacitance", "value": "1"}, {"id": "fanout_load", "value": "1"}, {"id": "input_voltage", "value": "MY_CMOS_IN"}, {"id": "hyperbolic_noise_low", "children": [{"id": "height_coefficient", "value": "0.4"}, {"id": "area_coefficient", "value": "1.1"}, {"id": "width_coefficient", "value": "0.1"}]}, {"id": "hyperbolic_noise_high", "children": [{"id": "height_coefficient", "value": "0.3"}, {"id": "area_coefficient", "value": "0.9"}, {"id": "width_coefficient", "value": "0.1"}]}, {"id": "hyperbolic_noise_below_low", "children": [{"id": "height_coefficient", "value": "0.1"}, {"id": "area_coefficient", "value": "0.3"}, {"id": "width_coefficient", "value": "0.01"}]}, {"id": "hyperbolic_noise_above_high", "children": [{"id": "height_coefficient", "value": "0.1"}, {"id": "area_coefficient", "value": "0.3"}, {"id": "width_coefficient", "value": "0.01"}]}]}, {"id": "pin", "args": ["Y"], "children": [{"id": "direction", "value": "output"}, {"id": "max_fanout", "value": "10"}, {"id": "function", "value": "\" !A \""}, {"id": "output_voltage", "value": "MY_CMOS_OUT"}, {"id": "timing", "children": [{"id": "related_pin", "value": "A"}, {"id": "cell_rise", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "rise_transition", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "cell_fall", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "fall_transition", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "noise_immunity_low", "args": ["my_noise_reject"], "children": [{"id": "domain", "args": ["typ"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "domain", "args": ["min"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "domain", "args": ["max"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}]}, {"id": "noise_immunity_high", "args": ["my_noise_reject"], "children": [{"id": "domain", "args": ["typ"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "domain", "args": ["min"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "domain", "args": ["max"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}]}, {"id": "noise_immunity_below_low", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "noise_immunity_above_high", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "steady_state_resistance_high", "value": "1500"}, {"id": "steady_state_resistance_low", "value": "1100"}, {"id": "steady_state_resistance_above_high", "value": "200"}, {"id": "steady_state_resistance_below_low", "value": "100"}, {"id": "steady_state_current_low", "args": ["my_current_low"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "steady_state_current_high", "args": ["my_current_high"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "propagated_noise_width_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_height_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_peak_time_ratio_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_width_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_height_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_peak_time_ratio_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_width_above_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_height_above_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_peak_time_ratio_above_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_width_below_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_height_below_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_peak_time_ratio_below_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}]}]}]}]} \ No newline at end of file +{"id": "library", "args": ["inverter"], "children": [{"id": "delay_model", "value": "\"polynomial\""}, {"id": "time_unit", "value": "\"1ns\""}, {"id": "voltage_unit", "value": "\"1V\""}, {"id": "current_unit", "value": "\"1mA\""}, {"id": "capacitive_load_unit", "args": ["1", "pf"]}, {"id": "pulling_resistance_unit", "value": "1kohm"}, {"id": "default_fanout_load", "value": "1.0"}, {"id": "default_inout_pin_cap", "value": "1.0"}, {"id": "default_input_pin_cap", "value": "1.0"}, {"id": "default_output_pin_cap", "value": "0.00"}, {"id": "power_supply", "children": [{"id": "default_power_rail", "value": "VDD"}, {"id": "power_rail", "args": ["VDD1", "1.6"]}, {"id": "power_rail", "args": ["VDD2", "1.3"]}]}, {"id": "input_voltage", "args": ["MY_CMOS_IN"], "children": [{"id": "vil", "value": "0.3"}, {"id": "vih", "value": "1.1"}, {"id": "vimin", "value": "-0.3"}, {"id": "vimax", "value": "VDD + 0.3"}]}, {"id": "output_voltage", "args": ["MY_CMOS_OUT"], "children": [{"id": "vol", "value": "0.1"}, {"id": "voh", "value": "1.4"}, {"id": "vomin", "value": "-0.3"}, {"id": "vomax", "value": "VDD + 0.3"}]}, {"id": "poly_template", "args": ["my_noise_reject"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature", "total_output_net_capacitance"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.4", "1.8"]}, {"id": "variable_3_range", "args": ["1.1", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "125"]}, {"id": "variable_5_range", "args": ["0.01", "1.0"]}, {"id": "domain", "args": ["typ"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature", "total_output_net_capacitance"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.5", "1.7"]}, {"id": "variable_3_range", "args": ["1.2", "1.4"]}, {"id": "variable_4_range", "args": ["25", "25"]}, {"id": "variable_5_range", "args": ["0.01", "1.0"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}]}, {"id": "domain", "args": ["min"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.7", "1.8"]}, {"id": "variable_3_range", "args": ["1.4", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "-40"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}]}, {"id": "domain", "args": ["max"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.6", "1.7"]}, {"id": "variable_3_range", "args": ["1.1", "1.2"]}, {"id": "variable_4_range", "args": ["125", "125"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}]}]}, {"id": "poly_template", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "variables", "args": ["input_noise_width", "voltage", "voltage1", "temperature"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["0", "2"]}, {"id": "variable_2_range", "args": ["1.4", "1.8"]}, {"id": "variable_3_range", "args": ["1.1", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "125"]}]}, {"id": "poly_template", "args": ["my_current_low"], "children": [{"id": "variables", "args": ["iv_output_voltage", "voltage", "voltage1", "temperature"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["-1", "2"]}, {"id": "variable_2_range", "args": ["1.4", "1.8"]}, {"id": "variable_3_range", "args": ["1.1", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "125"]}]}, {"id": "poly_template", "args": ["my_current_high"], "children": [{"id": "variables", "args": ["iv_output_voltage", "voltage", "voltage1", "temperature"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["-1", "2"]}, {"id": "variable_2_range", "args": ["1.4", "1.8"]}, {"id": "variable_3_range", "args": ["1.1", "1.5"]}, {"id": "variable_4_range", "args": ["-40", "125"]}]}, {"id": "poly_template", "args": ["my_propagated_noise"], "children": [{"id": "variables", "args": ["input_noise_width", "input_noise_height", "input_peak_time_ratio", "total_output_net_capacitance", "voltage", "voltage1", "temperature"]}, {"id": "mapping", "args": ["voltage", "VDD1"]}, {"id": "mapping", "args": ["voltage1", "VDD2"]}, {"id": "variable_1_range", "args": ["0.01", "2"]}, {"id": "variable_2_range", "args": ["0", "0.8"]}, {"id": "variable_3_range", "args": ["0.0", "1.0"]}, {"id": "variable_4_range", "args": ["0", "2"]}, {"id": "variable_5_range", "args": ["1.4", "1.8"]}, {"id": "variable_6_range", "args": ["1.1", "1.5"]}, {"id": "variable_7_range", "args": ["-40", "125"]}]}, {"id": "cell", "args": ["INV"], "children": [{"id": "area", "value": "1"}, {"id": "pin", "args": ["A"], "children": [{"id": "direction", "value": "input"}, {"id": "capacitance", "value": "1"}, {"id": "fanout_load", "value": "1"}, {"id": "input_voltage", "value": "MY_CMOS_IN"}, {"id": "hyperbolic_noise_low", "children": [{"id": "height_coefficient", "value": "0.4"}, {"id": "area_coefficient", "value": "1.1"}, {"id": "width_coefficient", "value": "0.1"}]}, {"id": "hyperbolic_noise_high", "children": [{"id": "height_coefficient", "value": "0.3"}, {"id": "area_coefficient", "value": "0.9"}, {"id": "width_coefficient", "value": "0.1"}]}, {"id": "hyperbolic_noise_below_low", "children": [{"id": "height_coefficient", "value": "0.1"}, {"id": "area_coefficient", "value": "0.3"}, {"id": "width_coefficient", "value": "0.01"}]}, {"id": "hyperbolic_noise_above_high", "children": [{"id": "height_coefficient", "value": "0.1"}, {"id": "area_coefficient", "value": "0.3"}, {"id": "width_coefficient", "value": "0.01"}]}]}, {"id": "pin", "args": ["Y"], "children": [{"id": "direction", "value": "output"}, {"id": "max_fanout", "value": "10"}, {"id": "function", "value": "\" !A \""}, {"id": "output_voltage", "value": "MY_CMOS_OUT"}, {"id": "timing", "children": [{"id": "related_pin", "value": "A"}, {"id": "cell_rise", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "rise_transition", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "cell_fall", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "fall_transition", "args": ["scalar"], "children": [{"id": "values", "args": ["\"0\""]}]}, {"id": "noise_immunity_low", "args": ["my_noise_reject"], "children": [{"id": "domain", "args": ["typ"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "domain", "args": ["min"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "domain", "args": ["max"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}]}, {"id": "noise_immunity_high", "args": ["my_noise_reject"], "children": [{"id": "domain", "args": ["typ"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "domain", "args": ["min"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "domain", "args": ["max"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}]}, {"id": "noise_immunity_below_low", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "noise_immunity_above_high", "args": ["my_noise_reject_outside_rail"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "steady_state_resistance_high", "value": "1500"}, {"id": "steady_state_resistance_low", "value": "1100"}, {"id": "steady_state_resistance_above_high", "value": "200"}, {"id": "steady_state_resistance_below_low", "value": "100"}, {"id": "steady_state_current_low", "args": ["my_current_low"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "steady_state_current_high", "args": ["my_current_high"], "children": [{"id": "orders", "args": ["\"1 3 1 1\""]}, {"id": "coefs", "args": ["\"-0.0143963, 0.027248, 1.41943, -0.549705, \\\n 1.85208, 1.83018, -5.58407, -2.96409, -0.000201525, \\\n 0.000114903, -0.00251275, -0.00190513, 0.0025968, \\\n 0.00126903, -0.0109683, -0.00618697, 0.0342387, \\\n 0.0150761, 2.08784, -0.221496, 4.13848, 2.44241, \\\n -14.0275, -7.83306, 7.09012e-05, -1.98323e-05, \\\n -0.00194544, 0.000979011, 0.00657121, -0.000407383, \\\n -0.0275888, -0.0163063\""]}]}, {"id": "propagated_noise_width_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_height_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_peak_time_ratio_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_width_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_height_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_peak_time_ratio_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_width_above_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_height_above_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_peak_time_ratio_above_high", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_width_below_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_height_below_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}, {"id": "propagated_noise_peak_time_ratio_below_low", "args": ["my_propagated_noise"], "children": [{"id": "orders", "args": ["\"1, 1, 1, 1, 1, 1, 1\""]}, {"id": "coefs", "args": ["\"1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \\\n 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0\""]}]}]}]}]}]} \ No newline at end of file diff --git a/test/test_parse.py b/test/test_parse.py index 2e98337..8e413c9 100644 --- a/test/test_parse.py +++ b/test/test_parse.py @@ -3,9 +3,11 @@ import pytest + @pytest.mark.parametrize("test", pytest.parsing_tests, ids=lambda test: test.name) def test_parse(test: Path): from libparse import LibertyParser + ref = Path(str(test) + ".ref") print(ref) if not ref.is_file(): diff --git a/yosys b/yosys index 9c447ad..28ba3cb 160000 --- a/yosys +++ b/yosys @@ -1 +1 @@ -Subproject commit 9c447ad9d4b1ea589369364eea38b4d70da2c599 +Subproject commit 28ba3cb926fe376fa05ebfc1b921747d011d4557 From 4334e267904cd3df9629c67daf116eb6df234d9a Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Tue, 3 Nov 2026 04:27:11 +0200 Subject: [PATCH 2/6] sdist in ci --- .github/workflows/ci.yml | 41 +++++++++++++++++++++------------ MANIFEST.in | 6 ++--- Readme.md | 7 ++++-- include/kernel/yosys.h | 43 +++++++++++++++++++++++++++++++++++ include/kernel/yosys_config.h | 1 - setup.py | 3 +-- 6 files changed, 77 insertions(+), 24 deletions(-) create mode 100644 include/kernel/yosys.h delete mode 100644 include/kernel/yosys_config.h diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 36640ce..e5049aa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,10 +43,16 @@ jobs: archs: "aarch64", }, { - name: "macOS 14", + name: "macOS 15", family: "macos", - runner: "macos-14", - archs: "x86_64,arm64", + runner: "macos-15", + archs: "arm64", + }, + { + name: "macOS 15", + family: "macos", + runner: "macos-15", + archs: "x86_64", }, # { # name: "Windows Server 2022", @@ -69,19 +75,27 @@ jobs: with: python-version: 3.8 - name: Build wheels - uses: pypa/cibuildwheel@v2.21.1 + uses: pypa/cibuildwheel@v4.3.5 + with: + output-dir: dist env: - # * APIs not supported by PyPy - CIBW_SKIP: > - pp* + CIBW_SKIP: pp* CIBW_ARCHS: ${{ matrix.os.archs }} CIBW_BUILD_VERBOSITY: "1" CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28 - - uses: actions/upload-artifact@v4 + # patchelf version installed by default creates a corrupt ELF binary + # sometimes + CIBW_REPAIR_WHEEL_COMMAND_LINUX: pip3 install --upgrade patchelf && auditwheel repair -w {dest_dir} {wheel} + CIBW_TEST_REQUIRES: pytest + CIBW_TEST_COMMAND: pytest + - name: Build sdist + if: ${{ matrix.os.family == 'linux' && matrix.os.archs == 'x86_64' }} + run: pipx run build --sdist . --outdir ./dist + - uses: actions/upload-artifact@v7 with: name: python-wheels-${{ matrix.os.runner }} - path: ./wheelhouse/*.whl + path: ./dist/* upload_wheels: name: Upload Wheels if: github.event_name == 'push' && github.ref == 'refs/heads/main' @@ -93,14 +107,11 @@ jobs: id-token: write needs: build_wheels steps: - - uses: actions/download-artifact@v5 + - name: Download all wheel artifacts + uses: actions/download-artifact@v8 with: - path: "." + path: dist pattern: python-wheels-* merge-multiple: true - - run: | - ls - mkdir -p ./dist - mv *.whl ./dist - name: Publish uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/MANIFEST.in b/MANIFEST.in index 1943f61..5dec370 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,6 +1,4 @@ include Readme.md -include include/* -include include/**/* -include yosys/kernel/*.h -include yosys/kernel/constids.inc +include include/*.h +include include/kernel/*.h include yosys/passes/techmap/libparse.* diff --git a/Readme.md b/Readme.md index 6079974..7a69932 100644 --- a/Readme.md +++ b/Readme.md @@ -5,12 +5,15 @@ A pybind11-based Python wrapper around [Yosys](https://github.com/yosyshq/yosys) # Requirements -## Running - * UNIX or UNIX-like operating system (Windows untested) * Python 3.8+ (CPython or PyPy) with PIP * C++20 compiler +# Building + +* binary wheel: `python3 -m pip wheel .` +* sdist: `python3 -m build --sdist .` + # License Apache 2.0. Check 'License'. diff --git a/include/kernel/yosys.h b/include/kernel/yosys.h new file mode 100644 index 0000000..d7e904e --- /dev/null +++ b/include/kernel/yosys.h @@ -0,0 +1,43 @@ +/* + * From yosys -- Yosys Open SYnthesis Suite + * + * Copyright (C) 2012 Claire Xenia Wolf + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + */ +#ifndef _yosys_h +#define _yosys_h + +#if defined(__has_cpp_attribute) && __has_cpp_attribute(gnu::cold) +# define YS_COLD [[gnu::cold]] +#else +# define YS_COLD +#endif + + +#if defined(__GNUC__) || defined(__clang__) +# define YS_ATTRIBUTE(...) __attribute__((__VA_ARGS__)) +#elif defined(_MSC_VER) +# define YS_ATTRIBUTE(...) +#else +# define YS_ATTRIBUTE(...) +#endif + +#include +#include +#include + +#define FILTERLIB + +#endif // _yosys_h diff --git a/include/kernel/yosys_config.h b/include/kernel/yosys_config.h deleted file mode 100644 index 6f70f09..0000000 --- a/include/kernel/yosys_config.h +++ /dev/null @@ -1 +0,0 @@ -#pragma once diff --git a/setup.py b/setup.py index 367be2e..9e4a711 100644 --- a/setup.py +++ b/setup.py @@ -19,8 +19,7 @@ "libparse/wrapper.cpp", "yosys/passes/techmap/libparse.cc", ], - include_dirs=["yosys/passes/techmap", "yosys", "include"], - define_macros=[("FILTERLIB", "1"), ("_YOSYS_", "1")], + include_dirs=["include", "yosys/passes/techmap"], ) ext.cxx_std = 20 From af983c12685813947b67bdde5035b27e3d393adc Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Tue, 3 Nov 2026 04:31:11 +0200 Subject: [PATCH 3/6] bump requirement to python 3.10+ --- .github/workflows/ci.yml | 2 +- Readme.md | 3 ++- setup.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e5049aa..8ba86db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -79,9 +79,9 @@ jobs: with: output-dir: dist env: - CIBW_SKIP: pp* CIBW_ARCHS: ${{ matrix.os.archs }} CIBW_BUILD_VERBOSITY: "1" + CIBW_ENVIRONMENT_MAC: MACOSX_DEPLOYMENT_TARGET=11 CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28 # patchelf version installed by default creates a corrupt ELF binary diff --git a/Readme.md b/Readme.md index 7a69932..716352f 100644 --- a/Readme.md +++ b/Readme.md @@ -6,7 +6,8 @@ A pybind11-based Python wrapper around [Yosys](https://github.com/yosyshq/yosys) # Requirements * UNIX or UNIX-like operating system (Windows untested) -* Python 3.8+ (CPython or PyPy) with PIP + * Linux with Glibc 2.28 or later/macOS 11 or later for binary wheels +* Python 3.10+ (CPython or PyPy) with PIP * C++20 compiler # Building diff --git a/setup.py b/setup.py index 9e4a711..534bd87 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,7 @@ author="Mohamed Gaber", author_email="me@donn.website", install_requires=["wheel"], - python_requires=">=3.8", + python_requires=">=3.10", ext_modules=[ext], cmdclass={"build_ext": build_ext}, ) From f1b516ccd1af60def60881960bb0e185f5732bf6 Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Tue, 3 Nov 2026 04:34:28 +0200 Subject: [PATCH 4/6] fix testing in CI --- .github/workflows/ci.yml | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ba86db..a73dc85 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,10 +19,30 @@ name: Build Wheels for PyPI # Events that trigger workflow on: + # Runs on all pushes to branches push: branches: - - "*" + - "main" + tags-ignore: + - "**" + # Runs on all PRs pull_request: + # Manual Dispatch + workflow_dispatch: + +concurrency: + # Behavior: + # - Group all pull requests: latest push cancels previous ones + # - Group all branches: + # - If main/version- branches: run serially + # - Else, latest push cancels previous ones + group: > + ${{ + (github.event_name == 'pull_request' && format('pr-{0}', github.event.pull_request.number)) || + (github.event_name == 'push' && format('branch-{0}', github.ref_name)) || + '' + }} + cancel-in-progress: ${{ github.event_name == 'pull_request' || !(startsWith(github.ref_name, 'version-') || github.ref_name == 'main' || github.ref_name == 'dev') }} jobs: build_wheels: @@ -88,7 +108,7 @@ jobs: # sometimes CIBW_REPAIR_WHEEL_COMMAND_LINUX: pip3 install --upgrade patchelf && auditwheel repair -w {dest_dir} {wheel} CIBW_TEST_REQUIRES: pytest - CIBW_TEST_COMMAND: pytest + CIBW_TEST_COMMAND: pytest {project} - name: Build sdist if: ${{ matrix.os.family == 'linux' && matrix.os.archs == 'x86_64' }} run: pipx run build --sdist . --outdir ./dist From 19fb2c687c764d00935be25b466ac8a8c451d063 Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Tue, 3 Nov 2026 04:36:59 +0200 Subject: [PATCH 5/6] sigh --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a73dc85..39663be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -108,7 +108,7 @@ jobs: # sometimes CIBW_REPAIR_WHEEL_COMMAND_LINUX: pip3 install --upgrade patchelf && auditwheel repair -w {dest_dir} {wheel} CIBW_TEST_REQUIRES: pytest - CIBW_TEST_COMMAND: pytest {project} + CIBW_TEST_COMMAND: pytest {project}/test - name: Build sdist if: ${{ matrix.os.family == 'linux' && matrix.os.archs == 'x86_64' }} run: pipx run build --sdist . --outdir ./dist From d7b2cd1076e86adb04cc85e4c4ed6313bc87ce82 Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Tue, 3 Nov 2026 04:46:13 +0200 Subject: [PATCH 6/6] last set of small fixes --- .github/workflows/ci.yml | 6 +++--- Readme.md | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 39663be..369a571 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,7 @@ concurrency: (github.event_name == 'push' && format('branch-{0}', github.ref_name)) || '' }} - cancel-in-progress: ${{ github.event_name == 'pull_request' || !(startsWith(github.ref_name, 'version-') || github.ref_name == 'main' || github.ref_name == 'dev') }} + cancel-in-progress: ${{ github.event_name == 'pull_request' || !(github.ref_name == 'main') }} jobs: build_wheels: @@ -101,7 +101,7 @@ jobs: env: CIBW_ARCHS: ${{ matrix.os.archs }} CIBW_BUILD_VERBOSITY: "1" - CIBW_ENVIRONMENT_MAC: MACOSX_DEPLOYMENT_TARGET=11 + CIBW_ENVIRONMENT_MACOS: MACOSX_DEPLOYMENT_TARGET=11 CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 CIBW_MANYLINUX_AARCH64_IMAGE: manylinux_2_28 # patchelf version installed by default creates a corrupt ELF binary @@ -114,7 +114,7 @@ jobs: run: pipx run build --sdist . --outdir ./dist - uses: actions/upload-artifact@v7 with: - name: python-wheels-${{ matrix.os.runner }} + name: python-wheels-${{ matrix.os.runner }}-${{ matrix.os.archs }} path: ./dist/* upload_wheels: name: Upload Wheels diff --git a/Readme.md b/Readme.md index 716352f..7e034f5 100644 --- a/Readme.md +++ b/Readme.md @@ -6,9 +6,12 @@ A pybind11-based Python wrapper around [Yosys](https://github.com/yosyshq/yosys) # Requirements * UNIX or UNIX-like operating system (Windows untested) - * Linux with Glibc 2.28 or later/macOS 11 or later for binary wheels * Python 3.10+ (CPython or PyPy) with PIP * C++20 compiler +* For binary wheels, any of: + * GNU/Linux with Glibc 2.27 or later + * Linux with musl libc 1.2 or later + * macOS 11 "Big Sur" or later # Building