From 3af1f863fc393884fe7ae401231423063422b2fb Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Wed, 18 Dec 2024 23:01:28 +0200 Subject: [PATCH 1/5] nix: build klayout with `-with-qtbinding` --- Changelog.md | 7 +++++++ flake.nix | 3 +++ pyproject.toml | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 53e1d64c..2619b9fb 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,13 @@ ## Documentation --> +# 2.3.1 + +## Tool Updates + +* KLayout now compiled with `-qt-binding`, which increases distribution size but + allows for more features. + # 2.3.0 ## Steps diff --git a/flake.nix b/flake.nix index e3210fd6..0ea52691 100644 --- a/flake.nix +++ b/flake.nix @@ -56,6 +56,9 @@ (nix-eda.flakesToOverlay [libparse ioplace-parser volare]) (pkgs': pkgs: { yosys-sby = (pkgs.yosys-sby.override { sha256 = "sha256-Il2pXw2doaoZrVme2p0dSUUa8dCQtJJrmYitn1MkTD4="; }); + klayout = (pkgs.klayout.overrideAttrs(old: { + configurePhase = builtins.replaceStrings ["-without-qtbinding"] ["-with-qtbinding"] old.configurePhase; + })); }) ( pkgs': pkgs: let diff --git a/pyproject.toml b/pyproject.toml index 6eaf0881..467642ca 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openlane" -version = "2.3.0" +version = "2.3.1" description = "An infrastructure for implementing chip design flows" authors = ["Efabless Corporation and Contributors "] readme = "Readme.md" From fbc21917dfcefe8e0459aa2e215e3db32ba46f40 Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Sun, 5 Jan 2025 12:05:46 +0200 Subject: [PATCH 2/5] hotfix: crash when macro lib files are gzipped (#629) ## Steps * `Yosys.*` * Fixed blackbox Verilog and lib models causing a crash if they are gzipped and/or have the extension `.gz`. ## Tool Updates * Relaxed requirement on `httpx` to include `0.28.X`, which has no removals compared to `0.27.0`. --- Changelog.md | 17 +++++++++++++++++ docs/source/glossary.md | 18 ++++++++++++++++++ docs/source/usage/using_macros.md | 17 +++++++++++++++-- openlane/common/misc.py | 26 ++++++++++++++++++++++++++ openlane/common/toolbox.py | 8 ++++---- openlane/scripts/pyosys/synthesize.py | 4 +--- openlane/scripts/pyosys/ys_common.py | 16 +++++++++++----- openlane/steps/pyosys.py | 15 +++++++++++++++ pyproject.toml | 4 ++-- 9 files changed, 109 insertions(+), 16 deletions(-) diff --git a/Changelog.md b/Changelog.md index 2619b9fb..2e1cf055 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,23 @@ ## Documentation --> +# 2.3.2 + +## Steps + +* `Yosys.*` + * Fixed blackbox Verilog and lib models causing a crash if they are + gzipped and/or have the extension `.gz`. + +## Tool Updates + +* Relaxed requirement on `httpx` to include `0.28.X`, which has no removals + compared to `0.27.0`. + +## Documentation + +* Clarified support for gzipped files in the Classic flow. + # 2.3.1 ## Tool Updates diff --git a/docs/source/glossary.md b/docs/source/glossary.md index b17b9601..c1665093 100644 --- a/docs/source/glossary.md +++ b/docs/source/glossary.md @@ -397,5 +397,23 @@ MPW of a wafer to be spread across multiple projects. {term}`OpenMPW` and {term}`chipIgnite` are examples of MPW projects. + +dotlib + + Also `.lib`. + + A library format for macros including standard cells, modeling at an + abstract level the interface to and timing properties of a cell. + + Typically used for Synthesis and {term}`STA`. + +Gzip + A free and open-source compression format. A great many number of tools + support Gzipped inputs transparently, i.e., any file beginning with the + bytes `1f 8b` is automatically decompressed without any special input + from the user. + + Gzipping is popular for text-heavy formats such as {term}`dotlib` or + {term}`SPEF` formats. ``` diff --git a/docs/source/usage/using_macros.md b/docs/source/usage/using_macros.md index 37ffe5d2..bfdd1ee9 100644 --- a/docs/source/usage/using_macros.md +++ b/docs/source/usage/using_macros.md @@ -56,7 +56,7 @@ views- the former of which is used in PnR and the latter is used for tape-out. * Used as a fallback during synthesis if neither Verilog headers nor regular netlists (`.gl.v`/`.nl.v`) exist. It is not recommended for this use as synthesis checks may fail. -* Lib file (`.lib`): Optional +* {term}`dotlib` file (`.lib`): Optional * May be used during STA (see [relevant section](#sta)). * Used as a last resort for synthesis if no Verilog header (`.vh`) or any netlists (`.nl.v`/`.gl.v`/`.pnl.v`) are available. It is not recommended for @@ -83,13 +83,26 @@ thereof) and the values are a Python dataclass. You can find the API reference for the macros hashmap at {class}`openlane.common.Macro`, but a less mechanical explanation is as follows: +```{tip} +To save space in your repositories, {term}`Gzip`ped views may be supported +depending on the flow. The Classic flow generally supports gzipping the +following formats: + +* gds +* lef +* vh +* lib +* spef + +``` + * The keys contain the name of the Macro itself (not instances thereof.) * The values are: * A dictionary of instance names to instance objects * The instance objects in turn consist off: * `location`: A tuple of two numbers, in microns, indicating the location of the macro (optional) - * `orientation`: The orientation of the placed macro-- see page 250 of the + * `orientation`: The orientation of the placed macro-- see the {term}`LEFDEFREF` for a definition and visual. * `gds`: List of GDS files comprising the macro (usually only one) * `lef`: List of LEF files comprising the macro (usually only one) diff --git a/openlane/common/misc.py b/openlane/common/misc.py index 3fff93cf..57f084aa 100644 --- a/openlane/common/misc.py +++ b/openlane/common/misc.py @@ -14,6 +14,7 @@ import os import re import glob +import gzip import typing import fnmatch import pathlib @@ -29,6 +30,7 @@ SupportsFloat, Union, ) + import httpx from .types import AnyPath, Path @@ -374,3 +376,27 @@ def process_list_file(from_file: AnyPath) -> List[str]: def _get_process_limit() -> int: return int(os.getenv("_OPENLANE_MAX_CORES", os.cpu_count() or 1)) + + +def gzopen(filename, mode="rt"): + """ + This method (tries to?) emulate the gzopen from the Linux Standard Base, + specifically this part: + + If path refers to an uncompressed file, and mode refers to a read mode, + gzopen() shall attempt to open the file and return a gzFile object suitable + for reading directly from the file without any decompression. + + gzip.open does not have this behavior. + """ + try: + g = gzip.open(filename, mode=mode) + # Incredibly, it won't actually try to figure out if it's a gzipped + # file until you try to read from it. + if "r" in mode: + g.read(1) + g.seek(0) + return g + except gzip.BadGzipFile: + g.close() + return open(filename, mode=mode) diff --git a/openlane/common/toolbox.py b/openlane/common/toolbox.py index 019eb1cc..21ecc6f9 100644 --- a/openlane/common/toolbox.py +++ b/openlane/common/toolbox.py @@ -39,7 +39,7 @@ from deprecated.sphinx import deprecated -from .misc import mkdirp +from .misc import mkdirp, gzopen from .types import Path from .metrics import aggregate_metrics from .generic_dict import GenericImmutableDict, is_string @@ -388,9 +388,9 @@ class State(IntEnum): excluded_cells_filter = Filter(excluded_cells) for file in input_lib_files: - input_lib_stream = open(file) - out_filename = f"{uuid.uuid4().hex}.lib" - out_path = os.path.join(self.tmp_dir, out_filename) + input_lib_stream = gzopen(file) + # can't be gzip -- abc cannot read gzipped lib files + out_path = os.path.join(self.tmp_dir, f"{uuid.uuid4().hex}.lib") state = State.initial brace_count = 0 diff --git a/openlane/scripts/pyosys/synthesize.py b/openlane/scripts/pyosys/synthesize.py index 600dffed..317f09f5 100644 --- a/openlane/scripts/pyosys/synthesize.py +++ b/openlane/scripts/pyosys/synthesize.py @@ -32,7 +32,6 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. import os -import sys import json import shutil @@ -280,9 +279,8 @@ def synthesize( d.run_pass("plugin", "-i", "ghdl") d.run_pass("ghdl", *vhdl_files, "-e", config["DESIGN_NAME"]) else: - print( + ys.log_error( "Script called inappropriately: config must include either VERILOG_FILES or VHDL_FILES.", - file=sys.stderr, ) exit(1) diff --git a/openlane/scripts/pyosys/ys_common.py b/openlane/scripts/pyosys/ys_common.py index d83ddef2..0396102f 100644 --- a/openlane/scripts/pyosys/ys_common.py +++ b/openlane/scripts/pyosys/ys_common.py @@ -11,6 +11,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. +import os import sys from typing import Iterable, List, Union @@ -20,7 +21,7 @@ try: from pyosys import libyosys as ys except ImportError: - print( + ys.log_error( "Could not find pyosys in 'PYTHONPATH'-- make sure Yosys is compiled with ENABLE_PYTHON set to 1.", file=sys.stderr, ) @@ -122,11 +123,16 @@ def _Design_add_blackbox_models( define_args = [f"-D{define}" for define in defines] for model in models: - if model.endswith(".v") or model.endswith(".sv") or model.endswith(".vh"): + model_path, ext = os.path.splitext(model) + if ext == ".gz": + # Yosys transparently handles gzip compression + model_path, ext = os.path.splitext(model_path) + + if ext in [".v", ".sv", ".vh"]: self.run_pass( "read_verilog", "-sv", "-lib", *include_args, *define_args, model ) - elif model.endswith(".lib"): + elif ext in [".lib"]: self.run_pass( "read_liberty", "-lib", @@ -136,8 +142,8 @@ def _Design_add_blackbox_models( model, ) else: - print( - f"[ERROR] Black-box model '{model}' has an unrecognized file extension.", + ys.log_error( + f"Black-box model '{model}' has an unrecognized file extension: '{ext}'.", file=sys.stderr, ) sys.stderr.flush() diff --git a/openlane/steps/pyosys.py b/openlane/steps/pyosys.py index 353fbab1..3c2bccb3 100644 --- a/openlane/steps/pyosys.py +++ b/openlane/steps/pyosys.py @@ -557,6 +557,11 @@ class Synthesis(SynthesisCommon): * ``design__instance__count`` * ``design__instance_unmapped__count`` * ``design__instance__area`` + + Note that Yosys steps do not currently support gzipped standard cell dotlib + files. They are however supported for macros: + + https://github.com/YosysHQ/yosys/issues/4830 """ id = "Yosys.Synthesis" @@ -576,6 +581,11 @@ class Resynthesis(SynthesisCommon): * ``design__instance__count`` * ``design__instance_unmapped__count`` * ``design__instance__area`` + + Note that Yosys steps do not currently support gzipped standard cell dotlib + files. They are however supported for macros: + + https://github.com/YosysHQ/yosys/issues/4830 """ id = "Yosys.Resynthesis" @@ -600,6 +610,11 @@ class VHDLSynthesis(SynthesisCommon): * ``design__instance__count`` * ``design__instance_unmapped__count`` * ``design__instance__area`` + + Note that Yosys steps do not currently support gzipped standard cell dotlib + files. They are however supported for macros: + + https://github.com/YosysHQ/yosys/issues/4830 """ id = "Yosys.VHDLSynthesis" diff --git a/pyproject.toml b/pyproject.toml index 467642ca..cd028fd6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openlane" -version = "2.3.1" +version = "2.3.2" description = "An infrastructure for implementing chip design flows" authors = ["Efabless Corporation and Contributors "] readme = "Readme.md" @@ -21,7 +21,7 @@ lxml = ">=4.9.0" deprecated = ">=1.2.10,<2" libparse = ">=0.3.1,<1" psutil = ">=5.9.0" -httpx = ">=0.22.0,<0.28" +httpx = ">=0.22.0,<0.29" klayout = ">=0.29.0,<0.30.0" rapidfuzz = ">=3.9.0,<4" ioplace-parser = ">=0.3.0,<0.5.0" From f34d37d6860802d52a12c6d2c62b0105c2ce79e3 Mon Sep 17 00:00:00 2001 From: Kareem Farid Date: Mon, 13 Jan 2025 13:35:11 +0200 Subject: [PATCH 3/5] ci: update deprecated actions, pyproject.toml (#638) * ci: update deprecated actions * Updated upload-artifact to v4 * Updated download-artifact to v4 * Added new step to use actions/upload-artifact/merge@v4 as v4 no longer merges them * Added .sphinx.configuration to .readthedocs.yml * poetry: updated `[tool.poetry.dev-dependencies]` to `[tool.poetry.group.dev.dependencies]` in pyproject.toml * updated poetry.lock Signed-off-by: Kareem Farid --- .github/workflows/ci.yml | 27 +++++++++---- .readthedocs.yml | 3 ++ docs/source/conf.py | 4 +- poetry.lock | 83 ++++++++++++++++++++++++++++++++++++++-- pyproject.toml | 2 +- 5 files changed, 105 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b18bdb8a..6391aab9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -269,7 +269,7 @@ jobs: --pdk-root ./.volare-sky130\ --smoke-test - name: Upload Docker Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: docker-image-${{ matrix.arch }} path: ${{ env.IMAGE_PATH }} @@ -362,7 +362,7 @@ jobs: fi - name: Upload Run Folder if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.design.test_name }}-${{ matrix.design.pdk }}-${{ matrix.design.scl }} path: ${{ matrix.design.run_dir }} @@ -375,14 +375,25 @@ jobs: --extract-metrics-to ${{ matrix.design.pdk }}-${{ matrix.design.scl }}-${{ matrix.design.test_name }}.metrics.json - name: Upload Metrics if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: metrics + name: ${{ matrix.design.pdk }}-${{ matrix.design.scl }}-${{ matrix.design.test_name }}.metrics.json path: ${{ matrix.design.pdk }}-${{ matrix.design.scl }}-${{ matrix.design.test_name }}.metrics.json + merge_metrics: + name: Merge Metrics + runs-on: ubuntu-22.04 + needs: test + if: ${{ always() }} + steps: + - name: Merge Artifacts + uses: actions/upload-artifact/merge@v4 + with: + name: metrics + pattern: "*.metrics.json" upload_metrics: name: Upload Metrics runs-on: ubuntu-22.04 - needs: [test] + needs: [test, merge_metrics] if: ${{ always() }} steps: - name: Check out repo @@ -395,7 +406,7 @@ jobs: python3 -m pip install -e . echo "BRANCH_NAME=${GITHUB_REF##*/}" >> $GITHUB_ENV - name: Download Metrics - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: metrics path: current @@ -447,12 +458,12 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GH_TOKEN }} - name: Download Image (Docker/amd64) - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-image-amd64 path: /tmp/docker - name: Download Image (Docker/aarch64) - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: docker-image-aarch64 path: /tmp/docker diff --git a/.readthedocs.yml b/.readthedocs.yml index e925c123..df820725 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -5,6 +5,9 @@ # Required version: 2 +sphinx: + configuration: docs/source/conf.py + build: os: ubuntu-22.04 tools: diff --git a/docs/source/conf.py b/docs/source/conf.py index 57bb3823..1f3efc63 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2020 Efabless Corporation +# SPDX-FileCopyrightText: 2020-2025 Efabless Corporation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ # -- Project information ----------------------------------------------------- project = "OpenLane" -copyright = "2020-2023 Efabless Corporation and contributors" +copyright = "2020-2025 Efabless Corporation and contributors" author = "Efabless Corporation" repo = "https://github.com/efabless/openlane2" branch = "main" diff --git a/poetry.lock b/poetry.lock index 21ad76c6..2ab53444 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. [[package]] name = "antlr4-python3-runtime" @@ -6,6 +6,7 @@ version = "4.10" description = "ANTLR 4.10 runtime for Python 2.7.12" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "antlr4-python3-runtime-4.10.tar.gz", hash = "sha256:061a49bc72ae05a35d9b61c0ba0ac36c0397708819f02fbfb20a80e47d287a1b"}, ] @@ -16,6 +17,7 @@ version = "4.5.2" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "anyio-4.5.2-py3-none-any.whl", hash = "sha256:c011ee36bc1e8ba40e5a81cb9df91925c218fe9b778554e0b56a21e1b5d4716f"}, {file = "anyio-4.5.2.tar.gz", hash = "sha256:23009af4ed04ce05991845451e11ef02fc7c5ed29179ac9a420e5ad0ac7ddc5b"}, @@ -38,6 +40,7 @@ version = "24.8.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, @@ -84,6 +87,7 @@ version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, @@ -95,6 +99,8 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "platform_python_implementation == \"PyPy\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -174,6 +180,7 @@ version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, @@ -188,6 +195,7 @@ version = "3.0.5" description = "Adds features to Click: option groups, constraints, subcommand sections and help themes." optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "cloup-3.0.5-py2.py3-none-any.whl", hash = "sha256:bf122036066584eb0db113561167c29969cc015972b7b7ee03158d9bc7de87f8"}, {file = "cloup-3.0.5.tar.gz", hash = "sha256:c92b261c7bb7e13004930f3fb4b3edad8de2d1f12994dcddbe05bc21990443c5"}, @@ -203,10 +211,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "platform_system == \"Windows\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\""} [[package]] name = "coverage" @@ -214,6 +224,7 @@ version = "7.6.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, @@ -301,6 +312,7 @@ version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] files = [ {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, @@ -318,6 +330,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -332,6 +346,7 @@ version = "2.1.1" description = "execnet: rapid multi-Python deployment" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, @@ -346,6 +361,7 @@ version = "5.0.4" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.6.1" +groups = ["dev"] files = [ {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, @@ -362,6 +378,7 @@ version = "0.3.3" description = "Flake8 plugin that forbids implicit str/bytes literal concatenations" optional = false python-versions = ">=3.3" +groups = ["dev"] files = [ {file = "flake8-no-implicit-concat-0.3.3.tar.gz", hash = "sha256:b68ff39c5620b0c9fd412c22e6dd98e56ca255eb9cc007135dbc26033dc5e07d"}, {file = "flake8_no_implicit_concat-0.3.3-py3-none-any.whl", hash = "sha256:ae5c17d0bce1a1c5f1117786c111616ffe9f81bf4fe98bcdd715d44a7371b370"}, @@ -380,6 +397,7 @@ version = "1.3.3" description = "The package provides base classes and utils for flake8 plugin writing" optional = false python-versions = ">=3.6,<4.0" +groups = ["dev"] files = [ {file = "flake8-plugin-utils-1.3.3.tar.gz", hash = "sha256:39f6f338d038b301c6fd344b06f2e81e382b68fa03c0560dff0d9b1791a11a2c"}, {file = "flake8_plugin_utils-1.3.3-py3-none-any.whl", hash = "sha256:e4848c57d9d50f19100c2d75fa794b72df068666a9041b4b0409be923356a3ed"}, @@ -391,6 +409,7 @@ version = "1.7.2" description = "A flake8 plugin checking common style issues or inconsistencies with pytest-based tests." optional = false python-versions = ">=3.7.2,<4.0.0" +groups = ["dev"] files = [ {file = "flake8_pytest_style-1.7.2-py3-none-any.whl", hash = "sha256:f5d2aa3219163a052dd92226589d45fab8ea027a3269922f0c4029f548ea5cd1"}, {file = "flake8_pytest_style-1.7.2.tar.gz", hash = "sha256:b924197c99b951315949920b0e5547f34900b1844348432e67a44ab191582109"}, @@ -405,6 +424,7 @@ version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -416,6 +436,7 @@ version = "1.0.6" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, @@ -437,6 +458,7 @@ version = "0.27.2" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, @@ -462,6 +484,7 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -476,6 +499,7 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -487,6 +511,7 @@ version = "0.3.0" description = "Antlr4-based parser for the OpenLane I/O Placement script" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "ioplace_parser-0.3.0-py3-none-any.whl", hash = "sha256:841c82542de194390099d9ca787d44325fabb96cb529bea7aa7e09396ec1d3a1"}, {file = "ioplace_parser-0.3.0.tar.gz", hash = "sha256:068a0b6614fb73b3abd0702b8229d9b66f83a5ac73c8366dde4eba62a93c1dff"}, @@ -501,6 +526,7 @@ version = "0.29.7" description = "KLayout standalone Python package" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "klayout-0.29.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea0f4fd3b82054d23367032e34fd23604ca0e894641441d81de69aa6be802b3f"}, {file = "klayout-0.29.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:efb88ad7be4b90f202237f125bb31afdf6178684405a21319d1605e999aded0f"}, @@ -555,6 +581,7 @@ version = "0.3.1" description = "Python wrapper around Yosys' libparse module" optional = false python-versions = ">3.6" +groups = ["main"] files = [ {file = "libparse-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cf17bebe8b28d39f20170dee2c6e6f61868848a4ac05fcc2b6dfea2fcbdf01"}, {file = "libparse-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8b69ee74476b019e95390e7aafc7ad1005268e79e7435d20a818376948d62d4e"}, @@ -635,6 +662,7 @@ version = "5.3.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, @@ -789,6 +817,7 @@ version = "0.5.1" description = "Type annotations for the lxml package" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "lxml-stubs-0.5.1.tar.gz", hash = "sha256:e0ec2aa1ce92d91278b719091ce4515c12adc1d564359dfaf81efa7d4feab79d"}, {file = "lxml_stubs-0.5.1-py3-none-any.whl", hash = "sha256:1f689e5dbc4b9247cb09ae820c7d34daeb1fdbd1db06123814b856dae7787272"}, @@ -803,6 +832,7 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -827,6 +857,7 @@ version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -838,6 +869,7 @@ version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -849,6 +881,8 @@ version = "10.5.0" description = "More routines for operating on iterables, beyond itertools" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version < \"3.10\"" files = [ {file = "more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6"}, {file = "more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef"}, @@ -860,6 +894,7 @@ version = "1.9.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, @@ -907,6 +942,7 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -918,6 +954,7 @@ version = "24.1" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, @@ -929,6 +966,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -940,6 +978,7 @@ version = "1.30" description = "A C99 preprocessor written in pure Python" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "pcpp-1.30-py2.py3-none-any.whl", hash = "sha256:05fe08292b6da57f385001c891a87f40d6aa7f46787b03e8ba326d20a3297c6e"}, {file = "pcpp-1.30.tar.gz", hash = "sha256:5af9fbce55f136d7931ae915fae03c34030a3b36c496e72d9636cedc8e2543a1"}, @@ -951,6 +990,7 @@ version = "10.4.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, @@ -1048,6 +1088,7 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -1064,6 +1105,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1079,6 +1121,7 @@ version = "6.0.0" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main"] files = [ {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, @@ -1108,6 +1151,7 @@ version = "2.9.1" description = "Python style guide checker" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, @@ -1119,6 +1163,8 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "platform_python_implementation == \"PyPy\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -1130,6 +1176,7 @@ version = "5.7.1" description = "pyfakefs implements a fake file system that mocks the Python file system modules." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pyfakefs-5.7.1-py3-none-any.whl", hash = "sha256:6503ffe7f401701cf974b502311f926da2b0657a72244a6ba36e985ceb3dd783"}, {file = "pyfakefs-5.7.1.tar.gz", hash = "sha256:24774c632f3b67ea26fd56b08115ba7c339d5cd65655410bca8572d73a1ae9a4"}, @@ -1141,6 +1188,7 @@ version = "2.5.0" description = "passive checker of Python programs" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, @@ -1152,6 +1200,7 @@ version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, @@ -1166,6 +1215,7 @@ version = "8.3.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, @@ -1188,6 +1238,7 @@ version = "5.0.0" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, @@ -1206,6 +1257,7 @@ version = "3.6.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, @@ -1226,6 +1278,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -1288,6 +1341,7 @@ version = "3.9.7" description = "rapid fuzzy string matching" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "rapidfuzz-3.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ccf68e30b80e903f2309f90a438dbd640dd98e878eeb5ad361a288051ee5b75c"}, {file = "rapidfuzz-3.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:696a79018ef989bf1c9abd9005841cee18005ccad4748bad8a4c274c47b6241a"}, @@ -1408,6 +1462,7 @@ version = "13.9.2" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" +groups = ["main"] files = [ {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, @@ -1427,6 +1482,7 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -1438,6 +1494,8 @@ version = "2.0.2" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_full_version <= \"3.11.0a6\"" files = [ {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, @@ -1449,6 +1507,7 @@ version = "0.4.15.20240311" description = "Typing stubs for colorama" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-colorama-0.4.15.20240311.tar.gz", hash = "sha256:a28e7f98d17d2b14fb9565d32388e419f4108f557a7d939a66319969b2b99c7a"}, {file = "types_colorama-0.4.15.20240311-py3-none-any.whl", hash = "sha256:6391de60ddc0db3f147e31ecb230006a6823e81e380862ffca1e4695c13a0b8e"}, @@ -1460,6 +1519,7 @@ version = "0.9.2.20240106" description = "Typing stubs for commonmark" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-commonmark-0.9.2.20240106.tar.gz", hash = "sha256:52a062b71766d6ab258fca2d8e19fb0853796e25ca9afa9d0f67a1e42c93479f"}, {file = "types_commonmark-0.9.2.20240106-py3-none-any.whl", hash = "sha256:606d9de1e3a96cab0b1c0b6cccf4df099116148d1d864d115fde2e27ad6877c3"}, @@ -1471,6 +1531,7 @@ version = "5.1.8.20240310" description = "Typing stubs for decorator" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-decorator-5.1.8.20240310.tar.gz", hash = "sha256:52e316b03783886a8a2abdc228f7071680ba65894545cd2085ebe3cf88684a0e"}, {file = "types_decorator-5.1.8.20240310-py3-none-any.whl", hash = "sha256:3af75dc38f5baf65b9b53ea6661ce2056c5ca7d70d620d0b1f620285c1242757"}, @@ -1482,6 +1543,7 @@ version = "1.2.9.20240311" description = "Typing stubs for Deprecated" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-Deprecated-1.2.9.20240311.tar.gz", hash = "sha256:0680e89989a8142707de8103f15d182445a533c1047fd9b7e8c5459101e9b90a"}, {file = "types_Deprecated-1.2.9.20240311-py3-none-any.whl", hash = "sha256:d7793aaf32ff8f7e49a8ac781de4872248e0694c4b75a7a8a186c51167463f9d"}, @@ -1493,6 +1555,7 @@ version = "0.21.0.20241005" description = "Typing stubs for docutils" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-docutils-0.21.0.20241005.tar.gz", hash = "sha256:48f804a2b50da3a1b1681c4ca1b6184416a6e4129e302d15c44e9d97c59b3365"}, {file = "types_docutils-0.21.0.20241005-py3-none-any.whl", hash = "sha256:4d9021422f2f3fca8b0726fb8949395f66a06c0d951479eb3b1387d75b134430"}, @@ -1504,6 +1567,7 @@ version = "6.0.0.20241011" description = "Typing stubs for psutil" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-psutil-6.0.0.20241011.tar.gz", hash = "sha256:5f5c71d02f7a018249d457e080f85966a31a8200644c5459f63cf02be1d85c04"}, {file = "types_psutil-6.0.0.20241011-py3-none-any.whl", hash = "sha256:7ae5b398d6c0ae895ca3ca8a6a123ca05bb3b3d7297ff54981447300375a9c4e"}, @@ -1515,6 +1579,7 @@ version = "2.18.0.20240506" description = "Typing stubs for Pygments" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-Pygments-2.18.0.20240506.tar.gz", hash = "sha256:4b4c37812c87bbde687dbf27adf5bac593745a321e57f678dbc311571ba2ac9d"}, {file = "types_Pygments-2.18.0.20240506-py3-none-any.whl", hash = "sha256:11c90bc1737c9af55e5569558b88df7c2233e12325cb516215f722271444e91d"}, @@ -1530,6 +1595,7 @@ version = "6.0.12.20240917" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-PyYAML-6.0.12.20240917.tar.gz", hash = "sha256:d1405a86f9576682234ef83bcb4e6fff7c9305c8b1fbad5e0bcd4f7dbdc9c587"}, {file = "types_PyYAML-6.0.12.20240917-py3-none-any.whl", hash = "sha256:392b267f1c0fe6022952462bf5d6523f31e37f6cea49b14cee7ad634b6301570"}, @@ -1541,6 +1607,7 @@ version = "75.1.0.20241014" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-setuptools-75.1.0.20241014.tar.gz", hash = "sha256:29b0560a8d4b4a91174be085847002c69abfcb048e20b33fc663005aedf56804"}, {file = "types_setuptools-75.1.0.20241014-py3-none-any.whl", hash = "sha256:caab58366741fb99673d0138b6e2d760717f154cfb981b74fea5e8de40f0b703"}, @@ -1552,6 +1619,7 @@ version = "1.16.21.20241009" description = "Typing stubs for six" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-six-1.16.21.20241009.tar.gz", hash = "sha256:16d9e3ab37abb7339d98ea2ba857b7098ff2a1f8e9d89795876075cab34c6e67"}, {file = "types_six-1.16.21.20241009-py3-none-any.whl", hash = "sha256:8de8698195ec96370be175864555df5313e6d47f6342bd44e7d31e8d0c60fa01"}, @@ -1563,6 +1631,7 @@ version = "1.5.8.7" description = "Typing stubs for typed-ast" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "types-typed-ast-1.5.8.7.tar.gz", hash = "sha256:f7795f6f9d597b35212314040b993f6613b51d81738edce3c1e3a3e9ef655124"}, {file = "types_typed_ast-1.5.8.7-py3-none-any.whl", hash = "sha256:97bdd9b4228f96c6904a76e10a050305ddadb529bd35e4d8234711e09c41b543"}, @@ -1574,6 +1643,7 @@ version = "1.26.25.14" description = "Typing stubs for urllib3" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, @@ -1585,10 +1655,12 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] +markers = {main = "python_version < \"3.11\""} [[package]] name = "volare" @@ -1596,6 +1668,7 @@ version = "0.19.2" description = "An open_pdks PDK builder/version manager" optional = false python-versions = ">3.6" +groups = ["main"] files = [ {file = "volare-0.19.2-py3-none-any.whl", hash = "sha256:e96af47422fcaf0f6936a0869871c58651e5fb4f27bfa2176559752f6d3fb824"}, {file = "volare-0.19.2.tar.gz", hash = "sha256:214459ccfe4fe30535c5d3bb9881846cba4c73df13689d0626688b381abf370a"}, @@ -1618,6 +1691,7 @@ version = "0.44.0" description = "A built-package format for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "wheel-0.44.0-py3-none-any.whl", hash = "sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f"}, {file = "wheel-0.44.0.tar.gz", hash = "sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49"}, @@ -1632,6 +1706,7 @@ version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, @@ -1711,6 +1786,7 @@ version = "0.0.2" description = "YAML 1.2 Support for PyYAML" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "yamlcore-0.0.2-py3-none-any.whl", hash = "sha256:497006b7e7fccfaae564a40754eaf07969532321e21c8b77774dfd24492a6611"}, {file = "yamlcore-0.0.2.tar.gz", hash = "sha256:8b2eb9541cbe16af97b12cbdc36fab92a8c6f58fc898bd68651e959e7d8e926f"}, @@ -1722,6 +1798,7 @@ version = "0.23.0" description = "Zstandard bindings for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, @@ -1829,6 +1906,6 @@ cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\ cffi = ["cffi (>=1.11)"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = ">=3.8,<4" -content-hash = "d1ffe75eef125b098322583ba0c97a90041e55fa2a601c9c020eab14625272d4" +content-hash = "984fc60d764e75a0a3804f6207432e6c1e782758d0ce5b2af968613a71f8ae78" diff --git a/pyproject.toml b/pyproject.toml index cd028fd6..66b79974 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ ioplace-parser = ">=0.3.0,<0.5.0" yamlcore = "^0.0.2" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] wheel = "*" black = ">=24.4.0,<25" From d1cbcc26bac96b7d958e281000257547d0455ce2 Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Mon, 13 Jan 2025 14:56:08 +0200 Subject: [PATCH 4/5] chore: regenerate poetry lock --- poetry.lock | 542 ++++++++++++++++++++++++---------------------------- 1 file changed, 245 insertions(+), 297 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2ab53444..f4f8ff89 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,13 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "antlr4-python3-runtime" -version = "4.10" -description = "ANTLR 4.10 runtime for Python 2.7.12" +version = "4.9.3" +description = "ANTLR 4.9.3 runtime for Python 3.7" optional = false python-versions = "*" -groups = ["main"] files = [ - {file = "antlr4-python3-runtime-4.10.tar.gz", hash = "sha256:061a49bc72ae05a35d9b61c0ba0ac36c0397708819f02fbfb20a80e47d287a1b"}, + {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, ] [[package]] @@ -17,7 +16,6 @@ version = "4.5.2" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "anyio-4.5.2-py3-none-any.whl", hash = "sha256:c011ee36bc1e8ba40e5a81cb9df91925c218fe9b778554e0b56a21e1b5d4716f"}, {file = "anyio-4.5.2.tar.gz", hash = "sha256:23009af4ed04ce05991845451e11ef02fc7c5ed29179ac9a420e5ad0ac7ddc5b"}, @@ -40,7 +38,6 @@ version = "24.8.0" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "black-24.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6"}, {file = "black-24.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb"}, @@ -83,14 +80,13 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2024.8.30" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" -groups = ["main"] files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] [[package]] @@ -99,8 +95,6 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "platform_python_implementation == \"PyPy\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -176,14 +170,13 @@ pycparser = "*" [[package]] name = "click" -version = "8.1.7" +version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" -groups = ["main", "dev"] files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -195,7 +188,6 @@ version = "3.0.5" description = "Adds features to Click: option groups, constraints, subcommand sections and help themes." optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "cloup-3.0.5-py2.py3-none-any.whl", hash = "sha256:bf122036066584eb0db113561167c29969cc015972b7b7ee03158d9bc7de87f8"}, {file = "cloup-3.0.5.tar.gz", hash = "sha256:c92b261c7bb7e13004930f3fb4b3edad8de2d1f12994dcddbe05bc21990443c5"}, @@ -211,12 +203,10 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main", "dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {main = "platform_system == \"Windows\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\""} [[package]] name = "coverage" @@ -224,7 +214,6 @@ version = "7.6.1" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, @@ -308,21 +297,20 @@ toml = ["tomli"] [[package]] name = "deprecated" -version = "1.2.14" +version = "1.2.15" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, + {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, + {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, ] [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] [[package]] name = "exceptiongroup" @@ -330,8 +318,6 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" -groups = ["main", "dev"] -markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -346,7 +332,6 @@ version = "2.1.1" description = "execnet: rapid multi-Python deployment" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc"}, {file = "execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3"}, @@ -361,7 +346,6 @@ version = "5.0.4" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.6.1" -groups = ["dev"] files = [ {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, @@ -378,7 +362,6 @@ version = "0.3.3" description = "Flake8 plugin that forbids implicit str/bytes literal concatenations" optional = false python-versions = ">=3.3" -groups = ["dev"] files = [ {file = "flake8-no-implicit-concat-0.3.3.tar.gz", hash = "sha256:b68ff39c5620b0c9fd412c22e6dd98e56ca255eb9cc007135dbc26033dc5e07d"}, {file = "flake8_no_implicit_concat-0.3.3-py3-none-any.whl", hash = "sha256:ae5c17d0bce1a1c5f1117786c111616ffe9f81bf4fe98bcdd715d44a7371b370"}, @@ -397,7 +380,6 @@ version = "1.3.3" description = "The package provides base classes and utils for flake8 plugin writing" optional = false python-versions = ">=3.6,<4.0" -groups = ["dev"] files = [ {file = "flake8-plugin-utils-1.3.3.tar.gz", hash = "sha256:39f6f338d038b301c6fd344b06f2e81e382b68fa03c0560dff0d9b1791a11a2c"}, {file = "flake8_plugin_utils-1.3.3-py3-none-any.whl", hash = "sha256:e4848c57d9d50f19100c2d75fa794b72df068666a9041b4b0409be923356a3ed"}, @@ -409,7 +391,6 @@ version = "1.7.2" description = "A flake8 plugin checking common style issues or inconsistencies with pytest-based tests." optional = false python-versions = ">=3.7.2,<4.0.0" -groups = ["dev"] files = [ {file = "flake8_pytest_style-1.7.2-py3-none-any.whl", hash = "sha256:f5d2aa3219163a052dd92226589d45fab8ea027a3269922f0c4029f548ea5cd1"}, {file = "flake8_pytest_style-1.7.2.tar.gz", hash = "sha256:b924197c99b951315949920b0e5547f34900b1844348432e67a44ab191582109"}, @@ -424,7 +405,6 @@ version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -432,14 +412,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.6" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ - {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, - {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -454,14 +433,13 @@ trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" -version = "0.27.2" +version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ - {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, - {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, ] [package.dependencies] @@ -469,7 +447,6 @@ anyio = "*" certifi = "*" httpcore = "==1.*" idna = "*" -sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] @@ -484,7 +461,6 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" -groups = ["main"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -499,7 +475,6 @@ version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" -groups = ["dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -507,72 +482,66 @@ files = [ [[package]] name = "ioplace-parser" -version = "0.3.0" +version = "0.4.0" description = "Antlr4-based parser for the OpenLane I/O Placement script" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ - {file = "ioplace_parser-0.3.0-py3-none-any.whl", hash = "sha256:841c82542de194390099d9ca787d44325fabb96cb529bea7aa7e09396ec1d3a1"}, - {file = "ioplace_parser-0.3.0.tar.gz", hash = "sha256:068a0b6614fb73b3abd0702b8229d9b66f83a5ac73c8366dde4eba62a93c1dff"}, + {file = "ioplace_parser-0.4.0-py3-none-any.whl", hash = "sha256:23f78482497e6ee88eac4562382e76f1e03a01aafd10653c897db7782d7f591b"}, + {file = "ioplace_parser-0.4.0.tar.gz", hash = "sha256:73a399a9e871edff66d0248efbd8417cfbd4a02874102a1d1e01c03efe29a803"}, ] [package.dependencies] -antlr4-python3-runtime = ">=4.10.0,<4.11.0" +antlr4-python3-runtime = ">=4.9.0,<4.10.0" [[package]] name = "klayout" -version = "0.29.7" +version = "0.29.10" description = "KLayout standalone Python package" optional = false python-versions = "*" -groups = ["main"] -files = [ - {file = "klayout-0.29.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ea0f4fd3b82054d23367032e34fd23604ca0e894641441d81de69aa6be802b3f"}, - {file = "klayout-0.29.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:efb88ad7be4b90f202237f125bb31afdf6178684405a21319d1605e999aded0f"}, - {file = "klayout-0.29.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc54ee6b6e3a00c6644c5989159ad87814ee4b4e9638822f2fa61f8a9b00affb"}, - {file = "klayout-0.29.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0c8a245a29f110fb5cc73c78c4707401d197ed4f004450624a77592ec644542e"}, - {file = "klayout-0.29.7-cp310-cp310-win32.whl", hash = "sha256:5e15390236b3663d474a4e6b521eed2b112f8c72992fe3499548312fb0625119"}, - {file = "klayout-0.29.7-cp310-cp310-win_amd64.whl", hash = "sha256:deec18fb739c5c55b6b50802d77cfff745298ad37ba15a3064b234c2e5fc8ec6"}, - {file = "klayout-0.29.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5c99edc5a21f24f51865eca4b9c28b2adef35a0e2fe843624a1abb6fef28ed09"}, - {file = "klayout-0.29.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a4bb68015e38df0b3817aeef384a4443a007e61461985376927ab5eb63bcb959"}, - {file = "klayout-0.29.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3e548922f26e85843b2eea75f2644d6341a6db41cc5da313efba8e1fa507ed8"}, - {file = "klayout-0.29.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:69ef4cf74bc385c8d8087102b1ed88de7ce4efd77f90e1ebc1d4bfb232d191da"}, - {file = "klayout-0.29.7-cp311-cp311-win32.whl", hash = "sha256:4bf11fc223c07c0f698bea6a7b082962cbdd41aa6c1e082bfb067d968cc272d8"}, - {file = "klayout-0.29.7-cp311-cp311-win_amd64.whl", hash = "sha256:d5cf5b32a269ea29984c7bbf7549e8c1f11d83f3ba61e0f666e898efec6e6abf"}, - {file = "klayout-0.29.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4f06764b605f8e719a2ba53ee8709f6105efa0b2a7b28d31ef16a5df2ee26c98"}, - {file = "klayout-0.29.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4efdeeab5c3f743fd20c0eb5235ae3c2289680989533c765529246997d021f30"}, - {file = "klayout-0.29.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64387cfff6db624d85144d6afd5d68a3451a13342ebeff6bcb88426013db5de3"}, - {file = "klayout-0.29.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0b1eef3dfabee191dd879fa5b9aebed460281b19b153b81307f14294dd43b4d6"}, - {file = "klayout-0.29.7-cp312-cp312-win32.whl", hash = "sha256:b92d4ee6f4e59fdcb3b95de934204dfcdbc2808979051693c292d4ede7da1710"}, - {file = "klayout-0.29.7-cp312-cp312-win_amd64.whl", hash = "sha256:14080955802ce370466ca52324a2c2cf19a6d4d1feae6f935c4c7bcf2ac7b692"}, - {file = "klayout-0.29.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:735dfe671581584f3321db93ac8150b5c45f840c0ffe22366f3dc8796f1a0a36"}, - {file = "klayout-0.29.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:530ff59a4086bba9e92efc3da42eed18a92ad13deb9af0132d9faa2afa7ee5e5"}, - {file = "klayout-0.29.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bdfbb29129f9481b135993b738ed98791343de7663c68ffdbc931f4441657a5"}, - {file = "klayout-0.29.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca7f2622e0c0496b38a07d8433705e0c32e16e9e948c3ba104d19116e93a4dd7"}, - {file = "klayout-0.29.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8bf0b288cbf62b76ca3708926c3872c95a5a6198832c948f041ef739b7faaa49"}, - {file = "klayout-0.29.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4cbdb713afb973f097214ff5d2b884b38ba11c4a9cf1bfe4aeff1091e5ce998"}, - {file = "klayout-0.29.7-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:01886404f3246721fd5c0d5ed2c65c4b9d6fbe22e83f1025a1cee46f100bb8e9"}, - {file = "klayout-0.29.7-cp36-cp36m-win32.whl", hash = "sha256:06b8407a92194544e8c72b6b11275f11ad042da55c6f393e371779b3bd7227a6"}, - {file = "klayout-0.29.7-cp36-cp36m-win_amd64.whl", hash = "sha256:a3bb8740b30fbf814b95e2ca79f5d03503d16455c68e344b089794857972f351"}, - {file = "klayout-0.29.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5d6ae30329d45e2f8585d08d7eee719aadf64061210128d2bd1f642c1d38bec7"}, - {file = "klayout-0.29.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:117794587abd39b4a919a3262748488fdfa528aab30d74665031243bed08ca88"}, - {file = "klayout-0.29.7-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:d93450cadde6a151263665827793e5de09d0d28584b1b342af708ce431383cf8"}, - {file = "klayout-0.29.7-cp37-cp37m-win32.whl", hash = "sha256:7daff38f190e29232b48b2c565fbc59a2d7fa71cd2a66386a0f1415a71295300"}, - {file = "klayout-0.29.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b5e5cc54301b1b2b5e6ed7e3d518a9bb325408becd349996808d78e46e1aef4e"}, - {file = "klayout-0.29.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b4da8cd87cd4e7259fdc9ea7d63cdabcaaf3de9759cb29a7dedb0c34aaf185a3"}, - {file = "klayout-0.29.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:675b0315cf00ebce42e6e85587b339be9fe863f7cd7e22ec9b2f639f1be53f91"}, - {file = "klayout-0.29.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fea08769dd5423922cd352de8450cf977af3619b35eeaa5c601155b98ee0857a"}, - {file = "klayout-0.29.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:21d41efaa3774abba92174d649f66cf642ed9d63520c6ad0a4a9d498369bb04c"}, - {file = "klayout-0.29.7-cp38-cp38-win32.whl", hash = "sha256:7c932abe2315b73e20ceaa4c4c0fb97e00d9d895deec0ef4b6ba3bba7f35fb40"}, - {file = "klayout-0.29.7-cp38-cp38-win_amd64.whl", hash = "sha256:4eeaeff7503d2fccf36ac028e62a35d85991a6a762d0f99c0188f612571e9ef2"}, - {file = "klayout-0.29.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75ea1afc3ee4f37f76006dbef91b65eb2eb495f431e7f2493d92bb13481ae996"}, - {file = "klayout-0.29.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:875d03bb2aeb2c3aff0ddab040acb2d98c4ff7ad943b64c14411a6b8a9a3c6e9"}, - {file = "klayout-0.29.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e763e26e1a69bd76559788dc130d80859bbb1fbe07657150ab540644e5bf757c"}, - {file = "klayout-0.29.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:34e36b4a6178747b717e902f081e184e53d605338d9f38b4ac64708edd90ec06"}, - {file = "klayout-0.29.7-cp39-cp39-win32.whl", hash = "sha256:a9ab11db829b9e2e95dad32802f670f9e246875cf422b50858459c3e1aa25bef"}, - {file = "klayout-0.29.7-cp39-cp39-win_amd64.whl", hash = "sha256:91edd9347cb39a240dba4959f4fe839e2151a79824461cc98f309b67d546a8cf"}, - {file = "klayout-0.29.7.tar.gz", hash = "sha256:e974ab15dede0fcb63bd9aa1afde034b09ff8355a09f4c426088d7017a7d3e08"}, +files = [ + {file = "klayout-0.29.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e1c738fa365290e1d9824b09c6f187b0c850ce7884a15b08e91e44868000108b"}, + {file = "klayout-0.29.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83eebb6382593750a1330e8b1f4d67df5d1dfe0a2a177c3461906b68960df8e0"}, + {file = "klayout-0.29.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:442cdc16b16b804fbd32d7a303fc6d95d117d2cff841e61465d4403aa7e5843f"}, + {file = "klayout-0.29.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:049b778bb57520dc5ba1355e362845c5af525bf3dab4ce4bc110d5fb5ea5e938"}, + {file = "klayout-0.29.10-cp310-cp310-win32.whl", hash = "sha256:dfdf02864abab9a5ad0214c8f8febf1a835024f79b25b2e9a82a9532aa1a28bc"}, + {file = "klayout-0.29.10-cp310-cp310-win_amd64.whl", hash = "sha256:11f7d7072f05a36ac05451fe2f1c33b70d452c5f9df92deaa05fb0c7e0084e34"}, + {file = "klayout-0.29.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:babbeebea95542127518d8e4b4a7983aaff8a4d4c5484c3e45ba847a4a70712b"}, + {file = "klayout-0.29.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c3fe2000c7572ef5e71e2dd6a6d43bc15236a1445fa7ba7402afc5da45bc7e6d"}, + {file = "klayout-0.29.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d943384d80725ad11c466f48ec50df195decfc2dff1ce520f617675853a9af67"}, + {file = "klayout-0.29.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b7c409db8462a6c1e48d5a1c4e11d7809ce131f285ab48a0fcc76013a7d1715d"}, + {file = "klayout-0.29.10-cp311-cp311-win32.whl", hash = "sha256:a5764e67d56eff165f60c5016335e54dba62c4c98504c0c6d2e852aaa69828f7"}, + {file = "klayout-0.29.10-cp311-cp311-win_amd64.whl", hash = "sha256:1f5e4da8c3f7682461fa5167946039699df952371f82c0a5d390143e264ba9c2"}, + {file = "klayout-0.29.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ce4f7e167f6a9fb08dac1f72be64a3792637a5f74cc42e8ec10ccc450b4a210d"}, + {file = "klayout-0.29.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f422766e3eea67e0e2103f407b56b83ce5f828c1fa8ebd94599ea8d58b66c51"}, + {file = "klayout-0.29.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8405e62f431fe6f8d06d065057f00b8c261ec7c1640e555408a0b3834872c705"}, + {file = "klayout-0.29.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b3f175c1e92cf00eadb1c60310cae4567d06363c0c86b900ba0ea8d2483d79e2"}, + {file = "klayout-0.29.10-cp312-cp312-win32.whl", hash = "sha256:e3183352cc0fe8331e8a7dc8c88c97fd251120bf03cd85c2b91bc5e9bc995e62"}, + {file = "klayout-0.29.10-cp312-cp312-win_amd64.whl", hash = "sha256:cba0ba8eea3e62a906508e112295fe013fd90fea61a55cbcd4ccb2cf6f95b407"}, + {file = "klayout-0.29.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a20100375a5048f003cf010322a3b91f072fd5165592f1964d0dcd572e7078cd"}, + {file = "klayout-0.29.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d8631d1b4eccec93fa68c8ddde5b8f3b2b759c9ecf269b2bd80e545421f0c246"}, + {file = "klayout-0.29.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15d0cf4228599ff30587f864734828aeb5dfd1aa6c6c5b47895895b257b26ba2"}, + {file = "klayout-0.29.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a0921dfa84254950a5d8ff60c03542ed47d348f7bc05f4ee369f0666bcf7710b"}, + {file = "klayout-0.29.10-cp313-cp313-win32.whl", hash = "sha256:8006382f1a36e85563337258e9c20f4a11267bdb5c8eeff72b7d3746a4b4005e"}, + {file = "klayout-0.29.10-cp313-cp313-win_amd64.whl", hash = "sha256:07260d29b7c6d31fd16e795eb4b580cb24e230eb5b014160f929833e73e45de2"}, + {file = "klayout-0.29.10-cp36-cp36m-win32.whl", hash = "sha256:35fd685678468b98411d7d2c8b7a817990c7f108e40d83f4ed607c83f89ade2d"}, + {file = "klayout-0.29.10-cp36-cp36m-win_amd64.whl", hash = "sha256:c95076f782c9e447c8cedaf46db4263884c75faf08da0c606f24b6457543a474"}, + {file = "klayout-0.29.10-cp37-cp37m-win32.whl", hash = "sha256:b73dca91aaf0bf1dca8392859b5100a4850086174930482d346903f70b55a997"}, + {file = "klayout-0.29.10-cp37-cp37m-win_amd64.whl", hash = "sha256:14796b15cc022bd31f077e5fd4b98e92502e3fe7837086ceec964d20e13f1726"}, + {file = "klayout-0.29.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a219b785a961b5aace0a0d3109225bc32261ed2a794c7ea665b068cfae05d2"}, + {file = "klayout-0.29.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a9b71a42314ec65ca982bc1675d155c2a01355bbfa6ab7ab99112b2dbfa530d4"}, + {file = "klayout-0.29.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b61504de7de7e69364ca4b683f6cab63fa1d93a09369ae0792b7efc075853c0c"}, + {file = "klayout-0.29.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a1f043acd4de084465e6e7c2716fa5b5f1cc171720cfdfb5f8054a925c96a5f5"}, + {file = "klayout-0.29.10-cp38-cp38-win32.whl", hash = "sha256:66a896699a85a4c4cbded773a3490363db1c9c834adaa91b694a066f37b27f53"}, + {file = "klayout-0.29.10-cp38-cp38-win_amd64.whl", hash = "sha256:c84aec93c5f6fac5c62d4dac360118985f494e57745bc708177019222fe4630a"}, + {file = "klayout-0.29.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de9518eb6f3331d9d7b9682cb54e1ecb327a41699fd6d008996e5ff46f13105b"}, + {file = "klayout-0.29.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6a2b95ef177130446a91a006c54ebff1eab461077e6444de7505760dc58a8913"}, + {file = "klayout-0.29.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dcab6d883a751920dc8fbd7acdbc31646a5555df627308098970d9296fe1afe"}, + {file = "klayout-0.29.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ecf47d7de2a1fb7d541c566c853d4c6f0920d0d7606231b210053dc51df3f11e"}, + {file = "klayout-0.29.10-cp39-cp39-win32.whl", hash = "sha256:15cb64d63eae6b286a7e0eaca2e121351e69aa805b2b3d132f39c5fe5d94f231"}, + {file = "klayout-0.29.10-cp39-cp39-win_amd64.whl", hash = "sha256:845918c91c6c86cb31296886f57b4a147067341f5518f0f788de625888e21400"}, + {file = "klayout-0.29.10.tar.gz", hash = "sha256:bc7d036199d37358d59d69c6c1d0ae49b740ab589717f24cbd11f276aba48058"}, ] [[package]] @@ -581,7 +550,6 @@ version = "0.3.1" description = "Python wrapper around Yosys' libparse module" optional = false python-versions = ">3.6" -groups = ["main"] files = [ {file = "libparse-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cf17bebe8b28d39f20170dee2c6e6f61868848a4ac05fcc2b6dfea2fcbdf01"}, {file = "libparse-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8b69ee74476b019e95390e7aafc7ad1005268e79e7435d20a818376948d62d4e"}, @@ -662,7 +630,6 @@ version = "5.3.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=3.6" -groups = ["main"] files = [ {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, @@ -817,7 +784,6 @@ version = "0.5.1" description = "Type annotations for the lxml package" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "lxml-stubs-0.5.1.tar.gz", hash = "sha256:e0ec2aa1ce92d91278b719091ce4515c12adc1d564359dfaf81efa7d4feab79d"}, {file = "lxml_stubs-0.5.1-py3-none-any.whl", hash = "sha256:1f689e5dbc4b9247cb09ae820c7d34daeb1fdbd1db06123814b856dae7787272"}, @@ -832,7 +798,6 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -857,7 +822,6 @@ version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" -groups = ["dev"] files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -869,7 +833,6 @@ version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -881,8 +844,6 @@ version = "10.5.0" description = "More routines for operating on iterables, beyond itertools" optional = false python-versions = ">=3.8" -groups = ["dev"] -markers = "python_version < \"3.10\"" files = [ {file = "more-itertools-10.5.0.tar.gz", hash = "sha256:5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6"}, {file = "more_itertools-10.5.0-py3-none-any.whl", hash = "sha256:037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef"}, @@ -894,7 +855,6 @@ version = "1.9.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, @@ -942,7 +902,6 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" -groups = ["dev"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -950,14 +909,13 @@ files = [ [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -966,7 +924,6 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -978,7 +935,6 @@ version = "1.30" description = "A C99 preprocessor written in pure Python" optional = false python-versions = "*" -groups = ["main"] files = [ {file = "pcpp-1.30-py2.py3-none-any.whl", hash = "sha256:05fe08292b6da57f385001c891a87f40d6aa7f46787b03e8ba326d20a3297c6e"}, {file = "pcpp-1.30.tar.gz", hash = "sha256:5af9fbce55f136d7931ae915fae03c34030a3b36c496e72d9636cedc8e2543a1"}, @@ -990,7 +946,6 @@ version = "10.4.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"}, {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"}, @@ -1088,7 +1043,6 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -1105,7 +1059,6 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1117,33 +1070,33 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "psutil" -version = "6.0.0" +version = "6.1.1" description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -groups = ["main"] -files = [ - {file = "psutil-6.0.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6"}, - {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0"}, - {file = "psutil-6.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c"}, - {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3"}, - {file = "psutil-6.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c"}, - {file = "psutil-6.0.0-cp27-none-win32.whl", hash = "sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35"}, - {file = "psutil-6.0.0-cp27-none-win_amd64.whl", hash = "sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1"}, - {file = "psutil-6.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0"}, - {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0"}, - {file = "psutil-6.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd"}, - {file = "psutil-6.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132"}, - {file = "psutil-6.0.0-cp36-cp36m-win32.whl", hash = "sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14"}, - {file = "psutil-6.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c"}, - {file = "psutil-6.0.0-cp37-abi3-win32.whl", hash = "sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d"}, - {file = "psutil-6.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3"}, - {file = "psutil-6.0.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0"}, - {file = "psutil-6.0.0.tar.gz", hash = "sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2"}, +files = [ + {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"}, + {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"}, + {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:8df0178ba8a9e5bc84fed9cfa61d54601b371fbec5c8eebad27575f1e105c0d4"}, + {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:1924e659d6c19c647e763e78670a05dbb7feaf44a0e9c94bf9e14dfc6ba50468"}, + {file = "psutil-6.1.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:018aeae2af92d943fdf1da6b58665124897cfc94faa2ca92098838f83e1b1bca"}, + {file = "psutil-6.1.1-cp27-none-win32.whl", hash = "sha256:6d4281f5bbca041e2292be3380ec56a9413b790579b8e593b1784499d0005dac"}, + {file = "psutil-6.1.1-cp27-none-win_amd64.whl", hash = "sha256:c777eb75bb33c47377c9af68f30e9f11bc78e0f07fbf907be4a5d70b2fe5f030"}, + {file = "psutil-6.1.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed7fe2231a444fc219b9c42d0376e0a9a1a72f16c5cfa0f68d19f1a0663e8"}, + {file = "psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6e06c20c05fe95a3d7302d74e7097756d4ba1247975ad6905441ae1b5b66003"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97f7cb9921fbec4904f522d972f0c0e1f4fabbdd4e0287813b21215074a0f160"}, + {file = "psutil-6.1.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33431e84fee02bc84ea36d9e2c4a6d395d479c9dd9bba2376c1f6ee8f3a4e0b3"}, + {file = "psutil-6.1.1-cp36-cp36m-win32.whl", hash = "sha256:384636b1a64b47814437d1173be1427a7c83681b17a450bfc309a1953e329603"}, + {file = "psutil-6.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8be07491f6ebe1a693f17d4f11e69d0dc1811fa082736500f649f79df7735303"}, + {file = "psutil-6.1.1-cp37-abi3-win32.whl", hash = "sha256:eaa912e0b11848c4d9279a93d7e2783df352b082f40111e078388701fd479e53"}, + {file = "psutil-6.1.1-cp37-abi3-win_amd64.whl", hash = "sha256:f35cfccb065fff93529d2afb4a2e89e363fe63ca1e4a5da22b603a85833c2649"}, + {file = "psutil-6.1.1.tar.gz", hash = "sha256:cf8496728c18f2d0b45198f06895be52f36611711746b7f30c464b422b50e2f5"}, ] [package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] +dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest-cov", "requests", "rstcheck", "ruff", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] +test = ["pytest", "pytest-xdist", "setuptools"] [[package]] name = "pycodestyle" @@ -1151,7 +1104,6 @@ version = "2.9.1" description = "Python style guide checker" optional = false python-versions = ">=3.6" -groups = ["dev"] files = [ {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, @@ -1163,8 +1115,6 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" -groups = ["main"] -markers = "platform_python_implementation == \"PyPy\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -1172,14 +1122,13 @@ files = [ [[package]] name = "pyfakefs" -version = "5.7.1" +version = "5.7.3" description = "pyfakefs implements a fake file system that mocks the Python file system modules." optional = false python-versions = ">=3.7" -groups = ["dev"] files = [ - {file = "pyfakefs-5.7.1-py3-none-any.whl", hash = "sha256:6503ffe7f401701cf974b502311f926da2b0657a72244a6ba36e985ceb3dd783"}, - {file = "pyfakefs-5.7.1.tar.gz", hash = "sha256:24774c632f3b67ea26fd56b08115ba7c339d5cd65655410bca8572d73a1ae9a4"}, + {file = "pyfakefs-5.7.3-py3-none-any.whl", hash = "sha256:53702780b38b24a48a9b8481c971abf1675f5abfd7d44653c2bcdd90b9751224"}, + {file = "pyfakefs-5.7.3.tar.gz", hash = "sha256:cd53790761d0fc030a9cf41fd541bfd28c1ea681b1a7c5df8834f3c9e511ac5f"}, ] [[package]] @@ -1188,7 +1137,6 @@ version = "2.5.0" description = "passive checker of Python programs" optional = false python-versions = ">=3.6" -groups = ["dev"] files = [ {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, @@ -1196,14 +1144,13 @@ files = [ [[package]] name = "pygments" -version = "2.18.0" +version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" -groups = ["main"] files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] [package.extras] @@ -1211,14 +1158,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pytest" -version = "8.3.3" +version = "8.3.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, - {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, + {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, + {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, ] [package.dependencies] @@ -1238,7 +1184,6 @@ version = "5.0.0" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, @@ -1257,7 +1202,6 @@ version = "3.6.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7"}, {file = "pytest_xdist-3.6.1.tar.gz", hash = "sha256:ead156a4db231eec769737f57668ef58a2084a34b2e55c4a8fa20d861107300d"}, @@ -1278,7 +1222,6 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -1341,7 +1284,6 @@ version = "3.9.7" description = "rapid fuzzy string matching" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "rapidfuzz-3.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ccf68e30b80e903f2309f90a438dbd640dd98e878eeb5ad361a288051ee5b75c"}, {file = "rapidfuzz-3.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:696a79018ef989bf1c9abd9005841cee18005ccad4748bad8a4c274c47b6241a"}, @@ -1458,14 +1400,13 @@ full = ["numpy"] [[package]] name = "rich" -version = "13.9.2" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" -groups = ["main"] files = [ - {file = "rich-13.9.2-py3-none-any.whl", hash = "sha256:8c82a3d3f8dcfe9e734771313e606b39d8247bb6b826e196f4914b333b743cf1"}, - {file = "rich-13.9.2.tar.gz", hash = "sha256:51a2c62057461aaf7152b4d611168f93a9fc73068f8ded2790f29fe2b5366d0c"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] @@ -1482,7 +1423,6 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" -groups = ["main"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -1490,15 +1430,43 @@ files = [ [[package]] name = "tomli" -version = "2.0.2" +version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" -groups = ["dev"] -markers = "python_full_version <= \"3.11.0a6\"" files = [ - {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, - {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] @@ -1507,7 +1475,6 @@ version = "0.4.15.20240311" description = "Typing stubs for colorama" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "types-colorama-0.4.15.20240311.tar.gz", hash = "sha256:a28e7f98d17d2b14fb9565d32388e419f4108f557a7d939a66319969b2b99c7a"}, {file = "types_colorama-0.4.15.20240311-py3-none-any.whl", hash = "sha256:6391de60ddc0db3f147e31ecb230006a6823e81e380862ffca1e4695c13a0b8e"}, @@ -1519,7 +1486,6 @@ version = "0.9.2.20240106" description = "Typing stubs for commonmark" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "types-commonmark-0.9.2.20240106.tar.gz", hash = "sha256:52a062b71766d6ab258fca2d8e19fb0853796e25ca9afa9d0f67a1e42c93479f"}, {file = "types_commonmark-0.9.2.20240106-py3-none-any.whl", hash = "sha256:606d9de1e3a96cab0b1c0b6cccf4df099116148d1d864d115fde2e27ad6877c3"}, @@ -1531,7 +1497,6 @@ version = "5.1.8.20240310" description = "Typing stubs for decorator" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ {file = "types-decorator-5.1.8.20240310.tar.gz", hash = "sha256:52e316b03783886a8a2abdc228f7071680ba65894545cd2085ebe3cf88684a0e"}, {file = "types_decorator-5.1.8.20240310-py3-none-any.whl", hash = "sha256:3af75dc38f5baf65b9b53ea6661ce2056c5ca7d70d620d0b1f620285c1242757"}, @@ -1539,50 +1504,46 @@ files = [ [[package]] name = "types-deprecated" -version = "1.2.9.20240311" +version = "1.2.15.20241117" description = "Typing stubs for Deprecated" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "types-Deprecated-1.2.9.20240311.tar.gz", hash = "sha256:0680e89989a8142707de8103f15d182445a533c1047fd9b7e8c5459101e9b90a"}, - {file = "types_Deprecated-1.2.9.20240311-py3-none-any.whl", hash = "sha256:d7793aaf32ff8f7e49a8ac781de4872248e0694c4b75a7a8a186c51167463f9d"}, + {file = "types-Deprecated-1.2.15.20241117.tar.gz", hash = "sha256:924002c8b7fddec51ba4949788a702411a2e3636cd9b2a33abd8ee119701d77e"}, + {file = "types_Deprecated-1.2.15.20241117-py3-none-any.whl", hash = "sha256:a0cc5e39f769fc54089fd8e005416b55d74aa03f6964d2ed1a0b0b2e28751884"}, ] [[package]] name = "types-docutils" -version = "0.21.0.20241005" +version = "0.21.0.20241128" description = "Typing stubs for docutils" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "types-docutils-0.21.0.20241005.tar.gz", hash = "sha256:48f804a2b50da3a1b1681c4ca1b6184416a6e4129e302d15c44e9d97c59b3365"}, - {file = "types_docutils-0.21.0.20241005-py3-none-any.whl", hash = "sha256:4d9021422f2f3fca8b0726fb8949395f66a06c0d951479eb3b1387d75b134430"}, + {file = "types_docutils-0.21.0.20241128-py3-none-any.whl", hash = "sha256:e0409204009639e9b0bf4521eeabe58b5e574ce9c0db08421c2ac26c32be0039"}, + {file = "types_docutils-0.21.0.20241128.tar.gz", hash = "sha256:4dd059805b83ac6ec5a223699195c4e9eeb0446a4f7f2aeff1759a4a7cc17473"}, ] [[package]] name = "types-psutil" -version = "6.0.0.20241011" +version = "6.1.0.20241221" description = "Typing stubs for psutil" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "types-psutil-6.0.0.20241011.tar.gz", hash = "sha256:5f5c71d02f7a018249d457e080f85966a31a8200644c5459f63cf02be1d85c04"}, - {file = "types_psutil-6.0.0.20241011-py3-none-any.whl", hash = "sha256:7ae5b398d6c0ae895ca3ca8a6a123ca05bb3b3d7297ff54981447300375a9c4e"}, + {file = "types_psutil-6.1.0.20241221-py3-none-any.whl", hash = "sha256:8498dbe13285a9ba7d4b2fa934c569cc380efc74e3dacdb34ae16d2cdf389ec3"}, + {file = "types_psutil-6.1.0.20241221.tar.gz", hash = "sha256:600f5a36bd5e0eb8887f0e3f3ff2cf154d90690ad8123c8a707bba4ab94d3185"}, ] [[package]] name = "types-pygments" -version = "2.18.0.20240506" +version = "2.19.0.20250107" description = "Typing stubs for Pygments" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "types-Pygments-2.18.0.20240506.tar.gz", hash = "sha256:4b4c37812c87bbde687dbf27adf5bac593745a321e57f678dbc311571ba2ac9d"}, - {file = "types_Pygments-2.18.0.20240506-py3-none-any.whl", hash = "sha256:11c90bc1737c9af55e5569558b88df7c2233e12325cb516215f722271444e91d"}, + {file = "types_Pygments-2.19.0.20250107-py3-none-any.whl", hash = "sha256:34a555ed327f249daed18c6309e6e62770cdb8b9c321029ba7fd852d10b16f10"}, + {file = "types_pygments-2.19.0.20250107.tar.gz", hash = "sha256:94de72c7f09b956c518f566e056812c698272a7a03a9cd81f0065576c6bd3219"}, ] [package.dependencies] @@ -1591,38 +1552,35 @@ types-setuptools = "*" [[package]] name = "types-pyyaml" -version = "6.0.12.20240917" +version = "6.0.12.20241230" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "types-PyYAML-6.0.12.20240917.tar.gz", hash = "sha256:d1405a86f9576682234ef83bcb4e6fff7c9305c8b1fbad5e0bcd4f7dbdc9c587"}, - {file = "types_PyYAML-6.0.12.20240917-py3-none-any.whl", hash = "sha256:392b267f1c0fe6022952462bf5d6523f31e37f6cea49b14cee7ad634b6301570"}, + {file = "types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6"}, + {file = "types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c"}, ] [[package]] name = "types-setuptools" -version = "75.1.0.20241014" +version = "75.8.0.20250110" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "types-setuptools-75.1.0.20241014.tar.gz", hash = "sha256:29b0560a8d4b4a91174be085847002c69abfcb048e20b33fc663005aedf56804"}, - {file = "types_setuptools-75.1.0.20241014-py3-none-any.whl", hash = "sha256:caab58366741fb99673d0138b6e2d760717f154cfb981b74fea5e8de40f0b703"}, + {file = "types_setuptools-75.8.0.20250110-py3-none-any.whl", hash = "sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480"}, + {file = "types_setuptools-75.8.0.20250110.tar.gz", hash = "sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271"}, ] [[package]] name = "types-six" -version = "1.16.21.20241009" +version = "1.17.0.20241205" description = "Typing stubs for six" optional = false python-versions = ">=3.8" -groups = ["dev"] files = [ - {file = "types-six-1.16.21.20241009.tar.gz", hash = "sha256:16d9e3ab37abb7339d98ea2ba857b7098ff2a1f8e9d89795876075cab34c6e67"}, - {file = "types_six-1.16.21.20241009-py3-none-any.whl", hash = "sha256:8de8698195ec96370be175864555df5313e6d47f6342bd44e7d31e8d0c60fa01"}, + {file = "types_six-1.17.0.20241205-py3-none-any.whl", hash = "sha256:a4947c2bdcd9ab69d44466a533a15839ff48ddc27223615cb8145d73ab805bc2"}, + {file = "types_six-1.17.0.20241205.tar.gz", hash = "sha256:1f662347a8f3b2bf30517d629d82f591420df29811794b0bf3804e14d716f6e0"}, ] [[package]] @@ -1631,7 +1589,6 @@ version = "1.5.8.7" description = "Typing stubs for typed-ast" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "types-typed-ast-1.5.8.7.tar.gz", hash = "sha256:f7795f6f9d597b35212314040b993f6613b51d81738edce3c1e3a3e9ef655124"}, {file = "types_typed_ast-1.5.8.7-py3-none-any.whl", hash = "sha256:97bdd9b4228f96c6904a76e10a050305ddadb529bd35e4d8234711e09c41b543"}, @@ -1643,7 +1600,6 @@ version = "1.26.25.14" description = "Typing stubs for urllib3" optional = false python-versions = "*" -groups = ["dev"] files = [ {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, @@ -1655,46 +1611,39 @@ version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] -markers = {main = "python_version < \"3.11\""} [[package]] name = "volare" -version = "0.19.2" -description = "An open_pdks PDK builder/version manager" +version = "0.20.5" +description = "An PDK builder/version manager for PDKs in the open_pdks format" optional = false -python-versions = ">3.6" -groups = ["main"] +python-versions = ">=3.8" files = [ - {file = "volare-0.19.2-py3-none-any.whl", hash = "sha256:e96af47422fcaf0f6936a0869871c58651e5fb4f27bfa2176559752f6d3fb824"}, - {file = "volare-0.19.2.tar.gz", hash = "sha256:214459ccfe4fe30535c5d3bb9881846cba4c73df13689d0626688b381abf370a"}, + {file = "volare-0.20.5-py3-none-any.whl", hash = "sha256:b4948914b1253e2e95fa6d4eb782fda5b0d133feb232bab856402c4699b7be1a"}, + {file = "volare-0.20.5.tar.gz", hash = "sha256:bf426922c8979f7063b54a248592a23d9ae9d0aa51a1ad1c5f69bda3eb7565ed"}, ] [package.dependencies] -click = ">=8.0.0,<9" -httpx = ">=0.22.0" +click = ">=8,<9" +httpx = ">=0.22.0,<0.29" pcpp = ">=1.2,<2" pyyaml = ">=5,<7" rich = ">=12,<14" zstandard = ">=0.19.0,<1" -[package.extras] -truststore = ["truststore"] - [[package]] name = "wheel" -version = "0.44.0" +version = "0.45.1" description = "A built-package format for Python" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] files = [ - {file = "wheel-0.44.0-py3-none-any.whl", hash = "sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f"}, - {file = "wheel-0.44.0.tar.gz", hash = "sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49"}, + {file = "wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248"}, + {file = "wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729"}, ] [package.extras] @@ -1702,82 +1651,83 @@ test = ["pytest (>=6.0.0)", "setuptools (>=65)"] [[package]] name = "wrapt" -version = "1.16.0" +version = "1.17.1" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, +python-versions = ">=3.8" +files = [ + {file = "wrapt-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9176057c60438c2ce2284cdefc2b3ee5eddc8c87cd6e24c558d9f5c64298fa4a"}, + {file = "wrapt-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e0f0e731e0ca1583befd3af71b9f90d64ded1535da7b80181cb9e907cc10bbae"}, + {file = "wrapt-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:144ed42a4ec3aca5d6f1524f99ee49493bbd0d9c66c24da7ec44b4661dca4dcc"}, + {file = "wrapt-1.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8a7b0699a381226d81d75b48ea58414beb5891ba8982bdc8e42912f766de074"}, + {file = "wrapt-1.17.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b20fcef5a3ee410671a5a59472e1ff9dda21cfbe5dfd15e23ee4b99ac455c8e"}, + {file = "wrapt-1.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b9a58a1cbdc0588ed4c8ab0c191002d5d831a58c3bad88523fe471ea97eaf57d"}, + {file = "wrapt-1.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:50bbfa7a92da7540426c774e09d6901e44d8f9b513b276ebae03ae244f0c6dbf"}, + {file = "wrapt-1.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:09f5141599eaf36d6cc0b760ad87c2ab6b8618d009b2922639266676775a73a6"}, + {file = "wrapt-1.17.1-cp310-cp310-win32.whl", hash = "sha256:589f24449fd58508533c4a69b2a0f45e9e3419b86b43a0607e2fdb989c6f2552"}, + {file = "wrapt-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:7eca3a1afa9820785b79cb137c68ca38c2f77cfedc3120115da42e1d5800907e"}, + {file = "wrapt-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:da0d0c1c4bd55f9ace919454776dbf0821f537b9a77f739f0c3e34b14728b3b3"}, + {file = "wrapt-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cd7649f0c493d35f9aad9790bbecd7b6fd2e2f7141f6cb1e1e9bb7a681d6d0a4"}, + {file = "wrapt-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0aad4f54b3155d673a5c4706a71a0a84f3d415b2fc8a2a399a964d70f18846a2"}, + {file = "wrapt-1.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ebea3ebb6a394f50f150a52e279508e91c8770625ac8fcb5d8cf35995a320f2"}, + {file = "wrapt-1.17.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53e2986a65eba7c399d7ad1ccd204562d4ffe6e937344fe5a49eb5a83858f797"}, + {file = "wrapt-1.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:67c30d3fe245adb0eb1061a0e526905970a0dabe7c5fba5078e0ee9d19f28167"}, + {file = "wrapt-1.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6fd88935b12b59a933ef45facb57575095f205d30d0ae8dd1a3b485bc4fa2fbd"}, + {file = "wrapt-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec3e763e7ca8dcba0792fc3e8ff7061186f59e9aafe4438e6bb1f635a6ab0901"}, + {file = "wrapt-1.17.1-cp311-cp311-win32.whl", hash = "sha256:d792631942a102d6d4f71e4948aceb307310ac0a0af054be6d28b4f79583e0f1"}, + {file = "wrapt-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:3dfd4738a630eddfcb7ff6c8e9fe863df3821f9c991dec73821e05450074ae09"}, + {file = "wrapt-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b1a4c8edd038fee0ce67bf119b16eaa45d22a52bbaf7d0a17d2312eb0003b1bb"}, + {file = "wrapt-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:181a844005c9818792212a32e004cb4c6bd8e35cae8e97b1a39a1918d95cef58"}, + {file = "wrapt-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21ffcf16f5c243a626b0f8da637948e3d5984e3bc0c1bc500ad990e88e974e3b"}, + {file = "wrapt-1.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0eb33799b7582bb73787b9903b70595f8eff67eecc9455f668ed01adf53f9eea"}, + {file = "wrapt-1.17.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57e932ad1908b53e9ad67a746432f02bc8473a9ee16e26a47645a2b224fba5fd"}, + {file = "wrapt-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b8bd35c15bc82c5cbe397e8196fa57a17ce5d3f30e925a6fd39e4c5bb02fdcff"}, + {file = "wrapt-1.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:93018dbb956e0ad99ea2fa2c3c22f033549dcb1f56ad9f4555dfe25e49688c5d"}, + {file = "wrapt-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5bd9186d52cf3d36bf1823be0e85297e4dbad909bc6dd495ce0d272806d84a7"}, + {file = "wrapt-1.17.1-cp312-cp312-win32.whl", hash = "sha256:d609f0ab0603bbcbf2de906b366b9f9bec75c32b4493550a940de658cc2ce512"}, + {file = "wrapt-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:2c160bb8815787646b27a0c8575a26a4d6bf6abd7c5eb250ad3f2d38b29cb2cb"}, + {file = "wrapt-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:99e544e6ce26f89ad5acc6f407bc4daf7c1d42321e836f5c768f834100bdf35c"}, + {file = "wrapt-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:78da796b74f2c8e0af021ee99feb3bff7cb46f8e658fe25c20e66be1080db4a2"}, + {file = "wrapt-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f1bc359f6c52e53565e7af24b423e7a1eea97d155f38ac9e90e95303514710b"}, + {file = "wrapt-1.17.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cbead724daa13cae46e8ab3bb24938d8514d123f34345535b184f3eb1b7ad717"}, + {file = "wrapt-1.17.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdf7b0e3d3713331c0bb9daac47cd10e5aa60d060e53696f50de4e560bd5617f"}, + {file = "wrapt-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f17e8d926f63aed65ff949682c922f96d00f65c2e852c24272232313fa7823d5"}, + {file = "wrapt-1.17.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9e04f3bd30e0b23c0ca7e1d4084e7d28b6d7d2feb8b7bc69b496fe881280579b"}, + {file = "wrapt-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5660e470edfa15ae7ef407272c642d29e9962777a6b30bfa8fc0da2173dc9afd"}, + {file = "wrapt-1.17.1-cp313-cp313-win32.whl", hash = "sha256:a992f9e019145e84616048556546edeaba68e05e1c1ffbe8391067a63cdadb0c"}, + {file = "wrapt-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:5c2e24ba455af4b0a237a890ea6ed9bafd01fac2c47095f87c53ea3344215d43"}, + {file = "wrapt-1.17.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88623fd957ba500d8bb0f7427a76496d99313ca2f9e932481c0882e034cf1add"}, + {file = "wrapt-1.17.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:162d5f15bdd3b8037e06540902227ef9e0f298496c0afaadd9e2875851446693"}, + {file = "wrapt-1.17.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb82447ddae4e3d9b51f40c494f66e6cbd8fb0e8e8b993678416535c67f9a0d"}, + {file = "wrapt-1.17.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ce4cff3922707048d754e365c4ebf41a3bcbf29b329349bf85d51873c7c7e9e"}, + {file = "wrapt-1.17.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fdc4e73a3fa0c25eed4d836d9732226f0326957cb075044a7f252b465299433"}, + {file = "wrapt-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bca1c0824f824bcd97b4b179dd55dcad1dab419252be2b2faebbcacefa3b27b2"}, + {file = "wrapt-1.17.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6d44b14f3a2f6343a07c90344850b7af5515538ce3a5d01f9c87d8bae9bd8724"}, + {file = "wrapt-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:169033329022739c6f0d8cd3031a113953b0ba500f3d5978904bdd40baec4568"}, + {file = "wrapt-1.17.1-cp313-cp313t-win32.whl", hash = "sha256:52f0907287d9104112dbebda46af4db0793fcc4c64c8a867099212d116b6db64"}, + {file = "wrapt-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:7966f98fa36933333d8a1c3d8552aa3d0735001901a4aabcfbd5a502b4ef14fe"}, + {file = "wrapt-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:27a49f217839bf559d436308bae8fc4a9dd0ac98ffdb9d6aeb3f00385b0fb72c"}, + {file = "wrapt-1.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:50a4e3b45e62b1ccb96b3fc0e427f1b458ff2e0def34ae084de88418157a09d1"}, + {file = "wrapt-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30c0c08434fe2af6e40c5c75c036d7e3c7e7f499079fc479e740d9586b09fb0d"}, + {file = "wrapt-1.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15f96fe5e2efdc613983327240ae89cf6368c07eeb0f194d240e9549aa1ea739"}, + {file = "wrapt-1.17.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14f78f8c313884f889c6696af62aa881af302a989a7c0df398d2b541fa53e8a9"}, + {file = "wrapt-1.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d87334b521ab0e2564902c0b10039dee8670485e9d397fe97c34b88801f474f7"}, + {file = "wrapt-1.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97eaff096fcb467e0f486f3bf354c1072245c2045859d71ba71158717ec97dcc"}, + {file = "wrapt-1.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:13887d1415dc0e213a9adeb9026ae1f427023f77110d988fbd478643490aa40c"}, + {file = "wrapt-1.17.1-cp38-cp38-win32.whl", hash = "sha256:823a262d967cbdf835787039b873ff551e36c14658bdc2e43267968b67f61f88"}, + {file = "wrapt-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:889587664d245dae75c752b643061f922e8a590d43a4cd088eca415ca83f2d13"}, + {file = "wrapt-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:997e8f9b984e4263993d3baf3329367e7c7673b63789bc761718a6f9ed68653d"}, + {file = "wrapt-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bac64f57a5a7926ebc9ab519fb9eba1fc6dcd1f65d7f45937b2ce38da65c2270"}, + {file = "wrapt-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7aa07603d67007c15b33d20095cc9276f3e127bfb1b8106b3e84ec6907d137e"}, + {file = "wrapt-1.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c53ef8936c4d587cb96bb1cf0d076e822fa38266c2b646837ef60465da8db22e"}, + {file = "wrapt-1.17.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72053cc4706dac537d5a772135dc3e1de5aff52883f49994c1757c1b2dc9db2"}, + {file = "wrapt-1.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0ee037e4cc9d039efe712b13c483f4efa2c3499642369e01570b3bb1842eea3f"}, + {file = "wrapt-1.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:20888d886186d19eab53816db2e615950b1ce7dbd5c239107daf2c8a6a4a03c6"}, + {file = "wrapt-1.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1c119802ae432b8c5d55dd5253825d09c1dca1c97ffc7b32c53ecdb348712f64"}, + {file = "wrapt-1.17.1-cp39-cp39-win32.whl", hash = "sha256:3260178f3bc006acae93378bfd6dbf33c9249de93cc1b78d8cc7b7416f4ea99a"}, + {file = "wrapt-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:18fb16fb6bb75f4ec6272829007f3129a9a5264d0230372f9651e5f75cfec552"}, + {file = "wrapt-1.17.1-py3-none-any.whl", hash = "sha256:f3117feb1fc479eaf84b549d3f229d5d2abdb823f003bc2a1c6dd70072912fa0"}, + {file = "wrapt-1.17.1.tar.gz", hash = "sha256:16b2fdfa09a74a3930175b6d9d7d008022aa72a4f02de2b3eecafcc1adfd3cfe"}, ] [[package]] @@ -1786,7 +1736,6 @@ version = "0.0.2" description = "YAML 1.2 Support for PyYAML" optional = false python-versions = ">=3.6" -groups = ["main"] files = [ {file = "yamlcore-0.0.2-py3-none-any.whl", hash = "sha256:497006b7e7fccfaae564a40754eaf07969532321e21c8b77774dfd24492a6611"}, {file = "yamlcore-0.0.2.tar.gz", hash = "sha256:8b2eb9541cbe16af97b12cbdc36fab92a8c6f58fc898bd68651e959e7d8e926f"}, @@ -1798,7 +1747,6 @@ version = "0.23.0" description = "Zstandard bindings for Python" optional = false python-versions = ">=3.8" -groups = ["main"] files = [ {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, @@ -1906,6 +1854,6 @@ cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\ cffi = ["cffi (>=1.11)"] [metadata] -lock-version = "2.1" +lock-version = "2.0" python-versions = ">=3.8,<4" -content-hash = "984fc60d764e75a0a3804f6207432e6c1e782758d0ce5b2af968613a71f8ae78" +content-hash = "cfe943c799998d90621b244a5ba5da4db7449551498584dddbd76f027f4d18fb" From dffc4423325a238e8dd7e478d6be368d9fe1ab5f Mon Sep 17 00:00:00 2001 From: Mohamed Gaber Date: Mon, 13 Jan 2025 15:51:23 +0200 Subject: [PATCH 5/5] feat!: openroad enhancements, variable renames (#608) Exposes a number of new OpenROAD flags and features as configuration variables. Also performs some variable names that are considered API breaks. See Changelog.md for a total list of changes. Co-authored-by: Kareem Farid --- Changelog.md | 119 ++++++++++-- openlane/config/flow.py | 89 ++++----- openlane/config/preprocessor.py | 2 +- openlane/scripts/magic/common/read.tcl | 4 +- openlane/scripts/magic/gds/extras_mag.tcl | 4 +- openlane/scripts/openroad/common/dpl.tcl | 2 +- openlane/scripts/openroad/common/grt.tcl | 6 +- openlane/scripts/openroad/common/io.tcl | 158 +++++++++++++++- .../common/set_global_connections.tcl | 4 +- .../openroad/common/set_power_nets.tcl | 2 +- openlane/scripts/openroad/cts.tcl | 5 +- openlane/scripts/openroad/cut_rows.tcl | 25 ++- openlane/scripts/openroad/drt.tcl | 2 +- openlane/scripts/openroad/fill.tcl | 4 +- openlane/scripts/openroad/floorplan.tcl | 6 +- openlane/scripts/openroad/gpl.tcl | 14 +- openlane/scripts/openroad/insert_buffer.tcl | 4 +- openlane/scripts/openroad/ioplacer.tcl | 3 +- openlane/scripts/openroad/irdrop.tcl | 6 +- openlane/scripts/openroad/pdn.tcl | 33 ++-- openlane/scripts/openroad/rcx.tcl | 2 +- openlane/scripts/openroad/repair_design.tcl | 20 +- .../openroad/repair_design_postgrt.tcl | 18 +- .../scripts/openroad/rsz_timing_postcts.tcl | 24 +-- .../scripts/openroad/rsz_timing_postgrt.tcl | 24 +-- .../openroad/sta/check_macro_instances.tcl | 2 +- openlane/scripts/openroad/tapcell.tcl | 2 +- openlane/scripts/openroad/ungpl.tcl | 23 +++ openlane/steps/checker.py | 11 +- openlane/steps/klayout.py | 2 +- openlane/steps/misc.py | 2 +- openlane/steps/odb.py | 10 +- openlane/steps/openroad.py | 173 ++++++++++++++---- pyproject.toml | 2 +- test/steps/all | 2 +- test/steps/excluded_step_tests | 2 - 36 files changed, 596 insertions(+), 215 deletions(-) create mode 100644 openlane/scripts/openroad/ungpl.tcl diff --git a/Changelog.md b/Changelog.md index eb15b272..5a8ecdbc 100644 --- a/Changelog.md +++ b/Changelog.md @@ -18,26 +18,92 @@ ## Steps -* `Yosys.*` - * Added `SYNTH_CORNER` +* `Odb.AddPDNObstructions`, `Odb.AddRoutingObstructions` + + * `PDN_OBSTRUCTIONS` and `ROUTING_OBSTRUCTIONS` are now lists of tuples + instead of variable-length Tcl-style lists (AKA: strings). + +* `OpenROAD.*` + + * Added `log_cmd` from OpenROAD-flow-scripts -- neat idea for consistency + * New convenience methods to append flags to calls based on environment + variables + * **Internal**: Steps now sensitive to `_OPENROAD_GUI` environment variable -- + coupled with `--only`, it runs a step in OpenROAD then doesn't quit so you + may inspect the result. + * This is not part of the OpenLane stable API and may be broken at any + moment. * `OpenROAD.CTS` + * Added flags `CTS_OBSTRUCTION_AWARE` and `CTS_BALANCE_LEVELS` * Added `CTS_SINK_BUFFER_MAX_CAP_DERATE_PCT` * Added `CTS_DELAY_BUFFER_DERATE_PCT` +* `OpenROAD.CutRows` + + * Added `FP_PRUNE_THRESHOLD` to prune rows not meeting the threshold after + cutting. + * `OpenROAD.DetailedRouting` - * Added `DRT_SAVE_SNAPSHOTS` which enables saving snapshots of the layout each detalied routing iteration. + + * Added `DRT_SAVE_SNAPSHOTS` which enables saving snapshots of the layout each + detalied routing iteration. * Added `DRT_SAVE_DRC_REPORT_ITERS` - +* `OpenROAD.GlobalPlacement` + + * Added optional variable `PL_ROUTABILITY_MAX_DENSITY_PCT` + +* `OpenROAD.RepairDesignPostGPL` + + * Added optional variable `DESIGN_REPAIR_MAX_UTIL_PCT` + +* `OpenROAD.ResizerTimingPostCTS` + + * Renamed `PL_RESIZER_GATE_CLONING` to `PL_RESIZER_SETUP_GATE_CLONING` + + * Fixed `PL_RESIZER_SETUP_GATE_CLONING` incorrectly applied to hold fixing + + * Added the following optional variables + + * `PL_RESIZER_SETUP_BUFFERING` + * `PL_RESIZER_SETUP_BUFFER_REMOVAL` + * `PL_RESIZER_SETUP_REPAIR_TNS_PCT` + * `PL_RESIZER_SETUP_MAX_UTIL_PCT` + * `PL_RESIZER_HOLD_REPAIR_TNS_PCT` + * `PL_RESIZER_HOLD_MAX_UTIL_PCT` + +* `OpenROAD.RepairDesignPostGRT` + + * Renamed `GRT_RESIZER_GATE_CLONING` to `GRT_RESIZER_SETUP_GATE_CLONING` + + * Fixed `GRT_RESIZER_SETUP_GATE_CLONING` incorrectly applied to hold fixing + + * Added the following optional variables + + * `GRT_RESIZER_SETUP_BUFFERING` + * `GRT_RESIZER_SETUP_BUFFER_REMOVAL` + * `GRT_RESIZER_SETUP_REPAIR_TNS_PCT` + * `GRT_RESIZER_SETUP_MAX_UTIL_PCT` + * `GRT_RESIZER_HOLD_REPAIR_TNS_PCT` + * `GRT_RESIZER_HOLD_MAX_UTIL_PCT` + +* Created `OpenROAD.UnplaceAll` + + * Removes the placement status of all instances. + +* `Yosys.*Synthesis` + + * Added `SYNTH_CORNER`: a step-specific override for `DEFAULT_CORNER`. + ## Tool Updates * Updated nix-eda - * Updated nixpkgs to nixos-24.11 (@ `3c53b4b`) - * Updated KLayout to `0.29.9` - * Updated Magic to `8.3.503` - * Updated Netgen to `1.5.287` + * Updated nixpkgs to nixos-24.11 (@ `3c53b4b`) + * Updated KLayout to `0.29.9` + * Updated Magic to `8.3.503` + * Updated Netgen to `1.5.287` * Updated ioplace-parser to`0.4.0` * Updated OpenROAD to `1d61007` * Updated OpenSTA to `aa598a2` @@ -45,6 +111,7 @@ ## Misc. Enhancements/Bugfixes * `openlane.state` + * `DesignFormat` * Now a dataclass encapsulating the information about the DesignFormat directly. @@ -60,8 +127,28 @@ * States initialized with keys that have values that are `None` now remove said keys. +* `openlane.config` + + * Moved a number of global variables: + * `WIRE_LENGTH_THRESHOLD` moved from global variables to + `Checker.WireLength` + * `GPIO_PAD_*` removed- no step currently uses them + * `FP_TRACKS_INFO`, `FP_TAPCELL_DIST` moved to relevant steps + * `FILL_CELL` and `DECAP_CELL` renamed to `FILL_CELLS` and `DECAP_CELLS` as + they are both lists + * `EXTRA_GDS_FILES` and `FALLBACK_SDC_FILE` renamed to `EXTRA_GDS` and + `FALLBACK_SDC`: information can be obtained from their typing + * Changed some `decimal.Decimal` initializations to use integers or strings + instead of floats. + ## API Breaks +* `Odb.AddRoutingObstructions`, `Odb.AddPDNObstructions` + + * Typing for representation of obstructions has been changed. Designs with a + meta version of 2 or higher must update their variables from strings to + tuples. + * `openlane.steps` * `TclStep` now uses the IDs uppercased for `CURRENT_` and `SAVE_`. @@ -79,19 +166,27 @@ to `full_name`. The enumeration's name has been added to `alts`, while `.name` is now an alias for `.id`. +* `openlane.config` + + * `WIRE_LENGTH_THRESHOLD`, `GPIO_PAD_*`, `FP_TRACKS_INFO`, `FP_TAPCELL_DIST` + are no longer global variables. + + * `FILL_CELL`, `DECAP_CELL`, `EXTRA_GDS_FILES`, `FALLBACK_SDC_FILE` were all + renamed, see Misc. Enhancements/Bugfixes. + # 2.3.2 ## Steps * `Yosys.*` - * Fixed blackbox Verilog and lib models causing a crash if they are - gzipped and/or have the extension `.gz`. - + * Fixed blackbox Verilog and lib models causing a crash if they are gzipped + and/or have the extension `.gz`. + ## Tool Updates * Relaxed requirement on `httpx` to include `0.28.X`, which has no removals compared to `0.27.0`. - + ## Documentation * Clarified support for gzipped files in the Classic flow. diff --git a/openlane/config/flow.py b/openlane/config/flow.py index b595913b..bb2f2ae2 100644 --- a/openlane/config/flow.py +++ b/openlane/config/flow.py @@ -53,44 +53,12 @@ def _prefix_to_wildcard(prefixes_raw: Union[str, Sequence[str]]): "The ground pin for the cells.", pdk=True, ), - Variable( - "WIRE_LENGTH_THRESHOLD", - Optional[Decimal], - "A value above which wire lengths generate warnings.", - units="µm", - pdk=True, - ), Variable( "TECH_LEFS", Dict[str, Path], "Map of corner patterns to to technology LEF files. A corner not matched here will not be supported by OpenRCX in the default flow.", pdk=True, ), - Variable( - "GPIO_PADS_LEF", - Optional[List[Path]], - "Path(s) to GPIO pad LEF file(s).", - pdk=True, - ), - Variable( - "GPIO_PADS_LEF_CORE_SIDE", - Optional[List[Path]], - "Path(s) to GPIO pad LEF file(s) as used for routing (?).", - pdk=True, - ), - Variable( - "GPIO_PADS_VERILOG", - Optional[List[Path]], - "Path(s) to GPIO pad Verilog models.", - pdk=True, - ), - Variable( - "GPIO_PAD_CELLS", - Optional[List[str]], - "A list of pad cell name prefixes.", - deprecated_names=[("GPIO_PADS_PREFIX", _prefix_to_wildcard)], - pdk=True, - ), Variable( "PRIMARY_GDSII_STREAMOUT_TOOL", str, @@ -136,20 +104,6 @@ def _prefix_to_wildcard(prefixes_raw: Union[str, Sequence[str]]): pdk=True, ), # Floorplanning - Variable( - "FP_TRACKS_INFO", - Path, - "A path to the a classic OpenROAD `.tracks` file. Used by the floorplanner to generate tracks.", - deprecated_names=["TRACKS_INFO_FILE"], - pdk=True, - ), - Variable( - "FP_TAPCELL_DIST", - Decimal, - "The distance between tap cell columns.", - units="µm", - pdk=True, - ), Variable( "FP_IO_HLAYER", str, @@ -190,16 +144,18 @@ def _prefix_to_wildcard(prefixes_raw: Union[str, Sequence[str]]): pdk=True, ), Variable( - "FILL_CELL", + "FILL_CELLS", List[str], "A list of cell names or wildcards of fill cells to be used in fill insertion.", pdk=True, + deprecated_names=["FILL_CELL"], ), Variable( - "DECAP_CELL", + "DECAP_CELLS", List[str], "A list of cell names or wildcards of decap cells to be used in fill insertion.", pdk=True, + deprecated_names=["DECAP_CELL"], ), Variable( "LIB", @@ -358,7 +314,7 @@ def _prefix_to_wildcard(prefixes_raw: Union[str, Sequence[str]]): Variable( "ENDCAP_CELL", str, - "Defines so-called 'end-cap' cells- decap cells placed at either sides of a design.", + "Defines the so-called 'end-cap' cell- class of decap cells placed at either sides of a design.", pdk=True, deprecated_names=["FP_ENDCAP_CELL"], ), @@ -474,17 +430,46 @@ def _prefix_to_wildcard(prefixes_raw: Union[str, Sequence[str]]): "Specifies LIB files of pre-hardened macros used in the current design, used during timing analyses (and during parasitics-based STA as a fallback). These are loaded indiscriminately for all timing corners.", ), Variable( - "EXTRA_GDS_FILES", + "EXTRA_GDS", Optional[List[Path]], "Specifies GDS files of pre-hardened macros used in the current design, used during tape-out.", + deprecated_names=["EXTRA_GDS_FILES"], ), Variable( - "FALLBACK_SDC_FILE", + "FALLBACK_SDC", Path, "A fallback SDC file for when a step-specific SDC file is not defined.", - deprecated_names=["BASE_SDC_FILE", "SDC_FILE"], + deprecated_names=["FALLBACK_SDC_FILE", "BASE_SDC_FILE", "SDC_FILE"], default=Path(os.path.join(get_script_dir(), "base.sdc")), ), ] +__for_whenever_we_implement_padring = [ + Variable( + "GPIO_PADS_LEF", + Optional[List[Path]], + "Path(s) to GPIO pad LEF file(s).", + pdk=True, + ), + Variable( + "GPIO_PADS_LEF_CORE_SIDE", + Optional[List[Path]], + "Path(s) to GPIO pad LEF file(s) as used for routing (?).", + pdk=True, + ), + Variable( + "GPIO_PADS_VERILOG", + Optional[List[Path]], + "Path(s) to GPIO pad Verilog models.", + pdk=True, + ), + Variable( + "GPIO_PAD_CELLS", + Optional[List[str]], + "A list of pad cell name prefixes.", + deprecated_names=[("GPIO_PADS_PREFIX", _prefix_to_wildcard)], + pdk=True, + ), +] + flow_common_variables = pdk_variables + scl_variables + option_variables diff --git a/openlane/config/preprocessor.py b/openlane/config/preprocessor.py index 1051b7ab..7d9b121a 100644 --- a/openlane/config/preprocessor.py +++ b/openlane/config/preprocessor.py @@ -180,7 +180,7 @@ def evaluate(expression: str, symbols: Mapping[str, Any]) -> Decimal: eval_stack.pop() eval_stack.pop() - result = Decimal(0.0) + result = Decimal("0") if token.value == "**": result = number1**number2 elif token.value == "*": diff --git a/openlane/scripts/magic/common/read.tcl b/openlane/scripts/magic/common/read.tcl index 83e753de..cad9990e 100644 --- a/openlane/scripts/magic/common/read.tcl +++ b/openlane/scripts/magic/common/read.tcl @@ -55,8 +55,8 @@ proc read_extra_gds {} { set old_readonly [gds readonly] gds rescale false gds readonly true - if { [info exist ::env(EXTRA_GDS_FILES)] } { - set gds_files_in $::env(EXTRA_GDS_FILES) + if { [info exist ::env(EXTRA_GDS)] } { + set gds_files_in $::env(EXTRA_GDS) foreach gds_file $gds_files_in { puts "> gds read $gds_file" gds read $gds_file diff --git a/openlane/scripts/magic/gds/extras_mag.tcl b/openlane/scripts/magic/gds/extras_mag.tcl index 3865a704..cb61fad1 100755 --- a/openlane/scripts/magic/gds/extras_mag.tcl +++ b/openlane/scripts/magic/gds/extras_mag.tcl @@ -25,8 +25,8 @@ if { $::env(MAGIC_GDS_POLYGON_SUBCELLS) } { gds polygon subcells true } -if { [info exist ::env(EXTRA_GDS_FILES)] } { - set gds_files_in $::env(EXTRA_GDS_FILES) +if { [info exist ::env(EXTRA_GDS)] } { + set gds_files_in $::env(EXTRA_GDS) foreach gds_file $gds_files_in { gds read $gds_file diff --git a/openlane/scripts/openroad/common/dpl.tcl b/openlane/scripts/openroad/common/dpl.tcl index cf815858..66dec005 100644 --- a/openlane/scripts/openroad/common/dpl.tcl +++ b/openlane/scripts/openroad/common/dpl.tcl @@ -15,7 +15,7 @@ source $::env(SCRIPTS_DIR)/openroad/common/dpl_cell_pad.tcl remove_fillers -detailed_placement\ +log_cmd detailed_placement\ -max_displacement [subst { $::env(PL_MAX_DISPLACEMENT_X) $::env(PL_MAX_DISPLACEMENT_Y) }] if { [info exists ::env(PL_OPTIMIZE_MIRRORING)] && $::env(PL_OPTIMIZE_MIRRORING) } { diff --git a/openlane/scripts/openroad/common/grt.tcl b/openlane/scripts/openroad/common/grt.tcl index 12ba85f7..96bc2442 100644 --- a/openlane/scripts/openroad/common/grt.tcl +++ b/openlane/scripts/openroad/common/grt.tcl @@ -26,7 +26,7 @@ lappend arg_list -verbose if { $::env(GRT_ALLOW_CONGESTION) == 1 } { lappend arg_list -allow_congestion } -puts $arg_list -global_route {*}$arg_list -write_guide $::env(STEP_DIR)/after_grt.guide \ No newline at end of file +log_cmd global_route {*}$arg_list + +write_guide $::env(STEP_DIR)/after_grt.guide diff --git a/openlane/scripts/openroad/common/io.tcl b/openlane/scripts/openroad/common/io.tcl index 48621108..6f37c5ea 100644 --- a/openlane/scripts/openroad/common/io.tcl +++ b/openlane/scripts/openroad/common/io.tcl @@ -316,6 +316,70 @@ proc read_current_odb {args} { set_dont_use_cells } +proc _populate_cells_by_class {} { + if { [info exists ::_cells_by_class(physical)] } { + return + } + + set ::_cells_by_class(physical) [list] + set ::_cells_by_class(non_timing) [list] + set _comment_ { + We naïvely assume anything not in these classes is not a cell with a + logical function. This may not be comprehensive, but is good enough. + + CORE just means a macro used in the core area (i.e. a standard cell.) + + Thing is, it has a lot of subclasses for physical cells: + + `FEEDTHRU`,`SPACER`,`ANTENNACELL`,`WELLTAP` + + Only `TIEHIGH`, `TIELOW` are for logical cells. Thus, the inclusion + list allows them as well. `BLOCKS` are macros, which we cannot discern + whether they have a logical function or not, so we include them + regardless. + + We do make one exception for `ANTENNACELL`s. These are not counted as + logical cells but they are not exempt from the so-called SDF-friendly + netlist as they do affect timing ever so slightly. + } + set logical_classes { + BLOCK + BUMP + CORE + CORE_TIEHIGH + CORE_TIELOW + COVER + PAD + PAD_AREAIO + PAD_INOUT + PAD_INPUT + PAD_OUTPUT + PAD_POWER + PAD_SPACER + } + + foreach lib $::libs { + foreach master [$lib getMasters] { + if { [lsearch -exact $logical_classes [$master getType]] == -1 } { + lappend ::_cells_by_class(physical) [$master getName] + if { "[$master getType]" != "CORE_ANTENNACELL" } { + lappend ::_cells_by_class(non_timing) [$master getName] + } + } + } + } +} + +proc get_timing_excluded_cells {args} { + _populate_cells_by_class + return $::_cells_by_class(non_timing) +} + +proc get_physical_cells {args} { + _populate_cells_by_class + return $::_cells_by_class(physical) +} + proc write_views {args} { # This script will attempt to write views based on existing "SAVE_" # environment variables. If the SAVE_ variable exists, the script will @@ -349,20 +413,16 @@ proc write_views {args} { } if { [info exists ::env(SAVE_SDF_PNL)] } { - set exclude_cells "[join $::env(FILL_CELL)] [join $::env(DECAP_CELL)] [join $::env(WELLTAP_CELL)] [join $::env(ENDCAP_CELL)]" - puts "Writing nofill powered netlist to '$::env(SAVE_SDF_PNL)'…" - puts "Excluding $exclude_cells" + puts "Writing timing powered netlist to '$::env(SAVE_SDF_PNL)'…" write_verilog -include_pwr_gnd \ - -remove_cells "$exclude_cells"\ + -remove_cells "[get_timing_excluded_cells]"\ $::env(SAVE_SDF_PNL) } if { [info exists ::env(SAVE_LOGICAL_PNL)] } { - set exclude_cells "[join [lindex [split $::env(DIODE_CELL) "/"] 0]] [join $::env(FILL_CELL)] [join $::env(DECAP_CELL)] [join $::env(WELLTAP_CELL)] [join $::env(ENDCAP_CELL)]" - puts "Writing nofilldiode powered netlist to '$::env(SAVE_LOGICAL_PNL)'…" - puts "Excluding $exclude_cells" + puts "Writing logic-only powered netlist to '$::env(SAVE_LOGICAL_PNL)'…" write_verilog -include_pwr_gnd \ - -remove_cells "$exclude_cells"\ + -remove_cells "[get_physical_cells]"\ $::env(SAVE_LOGICAL_PNL) } @@ -474,3 +534,85 @@ if { [namespace exists utl] } { puts "%OL_METRIC $metric $value" } } + +proc exit_unless_gui {{status 0}} { + if { ![info exists ::env(_OPENROAD_GUI)] || !$::env(_OPENROAD_GUI) } { + exit $status + } +} + +proc find_unfixed_macros {} { + set macros [list] + + foreach inst [$::block getInsts] { + set inst_master [$inst getMaster] + + # BLOCK means MACRO cells + if { ![string match [$inst_master getType] "BLOCK"] } { + continue + } + + if { [$inst isFixed] } { + continue + } + + lappend macros $inst + } + return $macros +} + +proc append_if_exists_argument {list_arg glob_variable_name option} { + upvar $list_arg local_array + if [info exists ::env($glob_variable_name) ] { + lappend local_array $option $::env($glob_variable_name) + } +} + +proc append_if_flag {list_arg glob_variable_name flag} { + upvar $list_arg local_array + if { [info exists ::env($glob_variable_name)] && $::env($glob_variable_name) } { + lappend local_array $flag + } +} +proc append_if_not_flag {list_arg glob_variable_name flag} { + upvar $list_arg local_array + if { [info exists ::env($glob_variable_name)] && !$::env($glob_variable_name) } { + lappend local_array $flag + } +} + +# Code below adapted from OpenROAD Flow Scripts under the following license: +# +# BSD 3-Clause License +# +# Copyright (c) 2018-2023, The Regents of the University of California +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: + +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# * Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +proc log_cmd {cmd args} { + puts "+ $cmd [join $args " "]" + $cmd {*}$args +} diff --git a/openlane/scripts/openroad/common/set_global_connections.tcl b/openlane/scripts/openroad/common/set_global_connections.tcl index 13a48b43..cf5dd762 100644 --- a/openlane/scripts/openroad/common/set_global_connections.tcl +++ b/openlane/scripts/openroad/common/set_global_connections.tcl @@ -45,7 +45,7 @@ proc set_global_connections {} { if { $power_pin == "" || $ground_pin == "" } { puts "PDN_MACRO_CONNECTIONS missing power and ground pin names" - exit -1 + exit_unless_gui 1 } set matched 0 @@ -57,7 +57,7 @@ proc set_global_connections {} { } if { $matched != 1 } { puts "\[ERROR\] No match found for regular expression '$instance_name' defined in PDN_MACRO_CONNECTIONS." - exit 1 + exit_unless_gui 1 } add_global_connection \ diff --git a/openlane/scripts/openroad/common/set_power_nets.tcl b/openlane/scripts/openroad/common/set_power_nets.tcl index 951b5f74..b8b623a7 100644 --- a/openlane/scripts/openroad/common/set_power_nets.tcl +++ b/openlane/scripts/openroad/common/set_power_nets.tcl @@ -17,7 +17,7 @@ if { [info exists ::env(VDD_NETS)] || [info exists ::env(GND_NETS)] } { # current assumption: they cannot have a common ground if { ! [info exists ::env(VDD_NETS)] || ! [info exists ::env(GND_NETS)] } { puts stderr "\[ERROR\] VDD_NETS and GND_NETS must *both* either be defined or undefined" - exit -1 + exit_unless_gui 1 } set ::env(VDD_NET) [lindex $::env(VDD_NETS) 0] set ::env(GND_NET) [lindex $::env(GND_NETS) 0] diff --git a/openlane/scripts/openroad/cts.tcl b/openlane/scripts/openroad/cts.tcl index 81fcf05d..2a8147fc 100755 --- a/openlane/scripts/openroad/cts.tcl +++ b/openlane/scripts/openroad/cts.tcl @@ -33,7 +33,7 @@ if { [info exists ::env(CTS_MAX_CAP)] } { if { [info exists ::env(CTS_MAX_SLEW)] } { lappend cts_characterization_args -max_slew [expr {$::env(CTS_MAX_SLEW) * 1e-9}]; # ns -> S } -configure_cts_characterization {*}$cts_characterization_args +log_cmd configure_cts_characterization {*}$cts_characterization_args puts "\[INFO\] Performing clock tree synthesis…" puts "\[INFO\] Looking for the following net(s): $::env(CLOCK_NET)" @@ -66,8 +66,7 @@ if { [info exists ::env(CTS_BALANCE_LEVELS)] && $::env(CTS_BALANCE_LEVELS) } { lappend arg_list -balance_levels } -puts "clock_tree_synthesis {*}$arg_list" -clock_tree_synthesis {*}$arg_list +log_cmd clock_tree_synthesis {*}$arg_list set_propagated_clock [all_clocks] diff --git a/openlane/scripts/openroad/cut_rows.tcl b/openlane/scripts/openroad/cut_rows.tcl index 076e37a6..0167ee7c 100644 --- a/openlane/scripts/openroad/cut_rows.tcl +++ b/openlane/scripts/openroad/cut_rows.tcl @@ -14,10 +14,27 @@ source $::env(SCRIPTS_DIR)/openroad/common/io.tcl read_current_odb -cut_rows\ - -endcap_master $::env(ENDCAP_CELL)\ - -halo_width_x $::env(FP_MACRO_HORIZONTAL_HALO)\ - -halo_width_y $::env(FP_MACRO_VERTICAL_HALO) +set arg_list [list] +lappend arg_list -endcap_master $::env(ENDCAP_CELL) +lappend arg_list -halo_width_x $::env(FP_MACRO_HORIZONTAL_HALO) +lappend arg_list -halo_width_y $::env(FP_MACRO_VERTICAL_HALO) +if { [info exists ::env(FP_PRUNE_THRESHOLD)] } { + lappend arg_list -row_min_width $::env(FP_PRUNE_THRESHOLD) +} +log_cmd cut_rows {*}$arg_list + +# # verify -row_min_width worked +# if { [info exists ::env(FP_PRUNE_THRESHOLD)] } { +# foreach row [$::block getRows] { +# set bbox [$row getBBox] +# set width [expr ([$bbox xMax] - [$bbox xMin])] +# set width_um [expr $width / $::dbu] +# if { $width < $::env(FP_PRUNE_THRESHOLD) } { +# exit -1 +# # odb::dbRow_destroy $row +# } +# } +# } write_views diff --git a/openlane/scripts/openroad/drt.tcl b/openlane/scripts/openroad/drt.tcl index fa5a0077..61b9c8d8 100755 --- a/openlane/scripts/openroad/drt.tcl +++ b/openlane/scripts/openroad/drt.tcl @@ -36,7 +36,7 @@ if { $::env(DRT_SAVE_SNAPSHOTS) } { if { [info exists ::env(DRT_SAVE_DRC_REPORT_ITERS)] } { set drc_report_iter_step_arg "-drc_report_iter_step $::env(DRT_SAVE_DRC_REPORT_ITERS)" } -detailed_route\ +log_cmd detailed_route\ -bottom_routing_layer $min_layer\ -top_routing_layer $max_layer\ -output_drc $::env(STEP_DIR)/$::env(DESIGN_NAME).drc\ diff --git a/openlane/scripts/openroad/fill.tcl b/openlane/scripts/openroad/fill.tcl index 3575e15e..2f60001c 100755 --- a/openlane/scripts/openroad/fill.tcl +++ b/openlane/scripts/openroad/fill.tcl @@ -15,11 +15,11 @@ source $::env(SCRIPTS_DIR)/openroad/common/io.tcl read_current_odb set fill_list [list] -foreach {pattern} $::env(DECAP_CELL) { +foreach {pattern} $::env(DECAP_CELLS) { set stripped [string map {' {}} $pattern] lappend fill_list $stripped } -foreach {pattern} $::env(FILL_CELL) { +foreach {pattern} $::env(FILL_CELLS) { set stripped [string map {' {}} $pattern] lappend fill_list $stripped } diff --git a/openlane/scripts/openroad/floorplan.tcl b/openlane/scripts/openroad/floorplan.tcl index f3e750f4..aa1c0e91 100755 --- a/openlane/scripts/openroad/floorplan.tcl +++ b/openlane/scripts/openroad/floorplan.tcl @@ -53,7 +53,7 @@ puts "\[INFO\] Using $::env(FP_SIZING) sizing for the floorplan." if {$::env(FP_SIZING) == "absolute"} { if { [llength $::env(DIE_AREA)] != 4 } { puts stderr "Invalid die area string '$::env(DIE_AREA)'." - exit -1 + exit_unless_gui 1 } if { ! [info exists ::env(CORE_AREA)] } { set die_ll_x [lindex $::env(DIE_AREA) 0] @@ -70,7 +70,7 @@ if {$::env(FP_SIZING) == "absolute"} { } else { if { [llength $::env(CORE_AREA)] != 4 } { puts stderr "Invalid core area string '$::env(CORE_AREA)'." - exit -1 + exit_unless_gui 1 } puts "\[INFO\] Using the set CORE_AREA; ignoring core margin parameters" } @@ -94,7 +94,7 @@ if { [info exists ::env(FP_OBSTRUCTIONS)] } { } } -initialize_floorplan {*}$arg_list +log_cmd initialize_floorplan {*}$arg_list insert_tiecells $::env(SYNTH_TIELO_CELL) -prefix "TIE_ZERO_" insert_tiecells $::env(SYNTH_TIEHI_CELL) -prefix "TIE_ONE_" diff --git a/openlane/scripts/openroad/gpl.tcl b/openlane/scripts/openroad/gpl.tcl index ad1015e6..241d0d07 100755 --- a/openlane/scripts/openroad/gpl.tcl +++ b/openlane/scripts/openroad/gpl.tcl @@ -26,11 +26,11 @@ foreach inst $::insts { } if { !$placement_needed } { - puts stderr "\[WARNING\] All instances are FIXED/FIRM." - puts stderr "\[WARNING\] No need to perform global placement." - puts stderr "\[WARNING\] Skipping…" + puts "\[INFO\] All instances are FIXED/FIRM." + puts "\[INFO\] No need to perform global placement." + puts "\[INFO\] Skipping…" write_views - exit 0 + exit_unless_gui } set arg_list [list] @@ -56,8 +56,7 @@ if { $::env(PL_SKIP_INITIAL_PLACEMENT) } { lappend arg_list -skip_initial_place } - -if { [info exists ::env(__PL_SKIP_IO)] } { +if { [info exists ::env(__PL_SKIP_IO)] && $::env(__PL_SKIP_IO) == "1" } { lappend arg_list -skip_io } @@ -75,8 +74,7 @@ lappend arg_list -pad_right $cell_pad_side lappend arg_list -pad_left $cell_pad_side lappend arg_list -init_wirelength_coef $::env(PL_WIRE_LENGTH_COEF) -puts "+ global_placement $arg_list" -global_placement {*}$arg_list +log_cmd global_placement {*}$arg_list source $::env(SCRIPTS_DIR)/openroad/common/set_rc.tcl diff --git a/openlane/scripts/openroad/insert_buffer.tcl b/openlane/scripts/openroad/insert_buffer.tcl index e0e41b7b..032d2118 100644 --- a/openlane/scripts/openroad/insert_buffer.tcl +++ b/openlane/scripts/openroad/insert_buffer.tcl @@ -121,7 +121,7 @@ if { [info exists ::env(INSERT_BUFFER_COMMAND) ]} { read_current_odb set arg_list [split $::env(INSERT_BUFFER_COMMAND) " "] - insert_buffer {*}$arg_list + log_cmd insert_buffer {*}$arg_list write_views -} \ No newline at end of file +} diff --git a/openlane/scripts/openroad/ioplacer.tcl b/openlane/scripts/openroad/ioplacer.tcl index 6e0aa2ab..6a8d45a8 100755 --- a/openlane/scripts/openroad/ioplacer.tcl +++ b/openlane/scripts/openroad/ioplacer.tcl @@ -55,8 +55,7 @@ if { $::env(FP_PPL_MODE) == "annealing" } { set HMETAL $::env(FP_IO_HLAYER) set VMETAL $::env(FP_IO_VLAYER) -puts "\[INFO\] place_pins args: $arg_list" -place_pins {*}$arg_list \ +log_cmd place_pins {*}$arg_list \ -random_seed 42 \ -hor_layers $HMETAL \ -ver_layers $VMETAL diff --git a/openlane/scripts/openroad/irdrop.tcl b/openlane/scripts/openroad/irdrop.tcl index f5545707..60fbeec7 100644 --- a/openlane/scripts/openroad/irdrop.tcl +++ b/openlane/scripts/openroad/irdrop.tcl @@ -27,7 +27,7 @@ if { [info exists ::env(VSRC_LOC_FILES)] } { lappend arg_list -net $net lappend arg_list -voltage_file $::env(STEP_DIR)/net-$net.csv lappend arg_list -vsrc $vsrc_file - analyze_power_grid {*}$arg_list + log_cmd analyze_power_grid {*}$arg_list } puts "%OL_END_REPORT" } else { @@ -38,14 +38,14 @@ if { [info exists ::env(VSRC_LOC_FILES)] } { lappend arg_list -net $net lappend arg_list -voltage_file $::env(STEP_DIR)/net-$net.csv set_pdnsim_net_voltage -net $net -voltage $::env(LIB_VOLTAGE) - analyze_power_grid {*}$arg_list + log_cmd analyze_power_grid {*}$arg_list } foreach net "$::env(GND_NETS)" { set arg_list [list] lappend arg_list -net $net lappend arg_list -voltage_file $::env(STEP_DIR)/net-$net.csv set_pdnsim_net_voltage -net $net -voltage 0 - analyze_power_grid {*}$arg_list + log_cmd analyze_power_grid {*}$arg_list } puts "%OL_END_REPORT" } diff --git a/openlane/scripts/openroad/pdn.tcl b/openlane/scripts/openroad/pdn.tcl index 59e8af62..900eeb9e 100644 --- a/openlane/scripts/openroad/pdn.tcl +++ b/openlane/scripts/openroad/pdn.tcl @@ -23,28 +23,29 @@ read_pdn_cfg set arg_list [list] if { $::env(FP_PDN_SKIPTRIM) } { lappend arg_list -skip_trim - puts "adding -skip_trim to pdngen" } # run PDNGEN -if {[catch {pdngen {*}$arg_list} errmsg]} { +if {[catch {log_cmd pdngen {*}$arg_list} errmsg]} { puts stderr $errmsg - exit 1 -} + exit_unless_gui 1 +} else { + write_views + report_design_area_metrics -write_views -report_design_area_metrics + foreach {net} "$::env(VDD_NETS) $::env(GND_NETS)" { + set report_file $::env(STEP_DIR)/$net-grid-errors.rpt -foreach {net} "$::env(VDD_NETS) $::env(GND_NETS)" { - set report_file $::env(STEP_DIR)/$net-grid-errors.rpt + # For some reason, check_power_grid is… totally okay if no nodes are found + # at all. i.e. PDN generation has completely failed. + # This is a fallback file. + set f [open $report_file "w"] + puts $f "" + close $f - # For some reason, check_power_grid is… totally okay if no nodes are found - # at all. i.e. PDN generation has completely failed. - # This is a fallback file. - set f [open $report_file "w"] - puts $f "" - close $f + if { [catch {check_power_grid -net $net -error_file $report_file} err] } { + puts stderr "\[WARNING\] Grid check for $net failed: $err" + } - if { [catch {check_power_grid -net $net -error_file $report_file} err] } { - puts stderr "\[WARNING\] Grid check for $net failed: $err" } + } diff --git a/openlane/scripts/openroad/rcx.tcl b/openlane/scripts/openroad/rcx.tcl index 57350679..53411978 100644 --- a/openlane/scripts/openroad/rcx.tcl +++ b/openlane/scripts/openroad/rcx.tcl @@ -26,7 +26,7 @@ if { !$::env(RCX_MERGE_VIA_WIRE_RES) } { # RCX puts "Using RCX ruleset '$::env(RCX_RULESET)'…" define_process_corner -ext_model_index 0 CURRENT_CORNER -extract_parasitics $rcx_flags\ +log_cmd extract_parasitics $rcx_flags\ -ext_model_file $::env(RCX_RULESET)\ -lef_res write_views diff --git a/openlane/scripts/openroad/repair_design.tcl b/openlane/scripts/openroad/repair_design.tcl index ef457ae1..cbd5c6ad 100644 --- a/openlane/scripts/openroad/repair_design.tcl +++ b/openlane/scripts/openroad/repair_design.tcl @@ -42,17 +42,25 @@ if { $::env(DESIGN_REPAIR_BUFFER_OUTPUT_PORTS) } { buffer_ports -outputs } +set arg_list [list] +lappend arg_list -verbose +lappend arg_list -max_wire_length $::env(DESIGN_REPAIR_MAX_WIRE_LENGTH) +lappend arg_list -slew_margin $::env(DESIGN_REPAIR_MAX_SLEW_PCT) +lappend arg_list -cap_margin $::env(DESIGN_REPAIR_MAX_CAP_PCT) +if { [info exists ::env(DESIGN_REPAIR_MAX_UTILIZATION)] } { + lappend arg_list -max_utilization $::env(DESIGN_REPAIR_MAX_UTILIZATION) +} +if { [info exists ::env(DESIGN_REPAIR_BUFFER_GAIN)] } { + lappend arg_list -buffer_gain $::env(DESIGN_REPAIR_BUFFER_GAIN) +} # Repair Design -repair_design -verbose \ - -max_wire_length $::env(DESIGN_REPAIR_MAX_WIRE_LENGTH) \ - -slew_margin $::env(DESIGN_REPAIR_MAX_SLEW_PCT) \ - -cap_margin $::env(DESIGN_REPAIR_MAX_CAP_PCT) +log_cmd repair_design {*}$arg_list if { $::env(DESIGN_REPAIR_TIE_FANOUT) } { # repair tie lo fanout - repair_tie_fanout -separation $::env(DESIGN_REPAIR_TIE_SEPARATION) $::env(SYNTH_TIELO_CELL) + repair_tie_fanout -verbose -separation $::env(DESIGN_REPAIR_TIE_SEPARATION) $::env(SYNTH_TIELO_CELL) # repair tie hi fanout - repair_tie_fanout -separation $::env(DESIGN_REPAIR_TIE_SEPARATION) $::env(SYNTH_TIEHI_CELL) + repair_tie_fanout -verbose -separation $::env(DESIGN_REPAIR_TIE_SEPARATION) $::env(SYNTH_TIEHI_CELL) } report_floating_nets -verbose diff --git a/openlane/scripts/openroad/repair_design_postgrt.tcl b/openlane/scripts/openroad/repair_design_postgrt.tcl index 54e9ec5f..e0404305 100644 --- a/openlane/scripts/openroad/repair_design_postgrt.tcl +++ b/openlane/scripts/openroad/repair_design_postgrt.tcl @@ -31,11 +31,19 @@ source $::env(SCRIPTS_DIR)/openroad/common/grt.tcl #} estimate_parasitics -global_routing -# Repair design -repair_design -verbose \ - -max_wire_length $::env(GRT_DESIGN_REPAIR_MAX_WIRE_LENGTH) \ - -slew_margin $::env(GRT_DESIGN_REPAIR_MAX_SLEW_PCT) \ - -cap_margin $::env(GRT_DESIGN_REPAIR_MAX_CAP_PCT) +# Repair Design +set arg_list [list] +lappend arg_list -verbose +lappend arg_list -max_wire_length $::env(GRT_DESIGN_REPAIR_MAX_WIRE_LENGTH) +lappend arg_list -slew_margin $::env(GRT_DESIGN_REPAIR_MAX_SLEW_PCT) +lappend arg_list -cap_margin $::env(GRT_DESIGN_REPAIR_MAX_CAP_PCT) +if { [info exists ::env(GRT_DESIGN_REPAIR_MAX_UTILIZATION)] } { + lappend arg_list -max_utilization $::env(GRT_DESIGN_REPAIR_MAX_UTILIZATION) +} +if { [info exists ::env(GRT_DESIGN_REPAIR_BUFFER_GAIN)] } { + lappend arg_list -buffer_gain $::env(GRT_DESIGN_REPAIR_BUFFER_GAIN) +} +log_cmd repair_design {*}$arg_list # Re-DPL and GRT source $::env(SCRIPTS_DIR)/openroad/common/dpl.tcl diff --git a/openlane/scripts/openroad/rsz_timing_postcts.tcl b/openlane/scripts/openroad/rsz_timing_postcts.tcl index be22825e..a3c2dd4e 100644 --- a/openlane/scripts/openroad/rsz_timing_postcts.tcl +++ b/openlane/scripts/openroad/rsz_timing_postcts.tcl @@ -1,4 +1,4 @@ -# Copyright 2020-2023 Efabless Corporation +# Copyright 2020-2024 Efabless Corporation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -34,9 +34,11 @@ lappend setup_args -verbose lappend setup_args -setup lappend setup_args -setup_margin $::env(PL_RESIZER_SETUP_SLACK_MARGIN) lappend setup_args -max_buffer_percent $::env(PL_RESIZER_SETUP_MAX_BUFFER_PCT) -if { $::env(PL_RESIZER_GATE_CLONING) != 1 } { - lappend setup_args -skip_gate_cloning -} +append_if_not_flag setup_args PL_RESIZER_SETUP_BUFFERING -skip_buffering +append_if_not_flag setup_args PL_RESIZER_SETUP_BUFFER_REMOVAL -skip_buffer_removal +append_if_not_flag setup_args PL_RESIZER_SETUP_GATE_CLONING -skip_gate_cloning +append_if_exists_argument setup_args PL_RESIZER_SETUP_REPAIR_TNS_PCT -repair_tns +append_if_exists_argument setup_args PL_RESIZER_SETUP_MAX_UTIL_PCT -max_utilization set hold_args [list] lappend hold_args -verbose @@ -44,16 +46,16 @@ lappend hold_args -hold lappend hold_args -setup_margin $::env(PL_RESIZER_SETUP_SLACK_MARGIN) lappend hold_args -hold_margin $::env(PL_RESIZER_HOLD_SLACK_MARGIN) lappend hold_args -max_buffer_percent $::env(PL_RESIZER_HOLD_MAX_BUFFER_PCT) -if { $::env(PL_RESIZER_ALLOW_SETUP_VIOS) == 1 } { - lappend hold_args -allow_setup_violations -} +append_if_flag hold_args PL_RESIZER_ALLOW_SETUP_VIOS -allow_setup_violations +append_if_exists_argument hold_args PL_RESIZER_HOLD_REPAIR_TNS_PCT -repair_tns +append_if_exists_argument hold_args PL_RESIZER_HOLD_MAX_UTIL_PCT -max_utilization if { $::env(PL_RESIZER_FIX_HOLD_FIRST) == 1 } { - repair_timing {*}$hold_args - repair_timing {*}$setup_args + log_cmd repair_timing {*}$hold_args + log_cmd repair_timing {*}$setup_args } else { - repair_timing {*}$setup_args - repair_timing {*}$hold_args + log_cmd repair_timing {*}$setup_args + log_cmd repair_timing {*}$hold_args } # Legalize diff --git a/openlane/scripts/openroad/rsz_timing_postgrt.tcl b/openlane/scripts/openroad/rsz_timing_postgrt.tcl index 2ad62928..897163c0 100644 --- a/openlane/scripts/openroad/rsz_timing_postgrt.tcl +++ b/openlane/scripts/openroad/rsz_timing_postgrt.tcl @@ -1,4 +1,4 @@ -# Copyright 2020-2023 Efabless Corporation +# Copyright 2020-2024 Efabless Corporation # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -37,9 +37,11 @@ lappend setup_args -verbose lappend setup_args -setup lappend setup_args -setup_margin $::env(GRT_RESIZER_SETUP_SLACK_MARGIN) lappend setup_args -max_buffer_percent $::env(GRT_RESIZER_SETUP_MAX_BUFFER_PCT) -if { $::env(GRT_RESIZER_GATE_CLONING) != 1 } { - lappend setup_args -skip_gate_cloning -} +append_if_not_flag setup_args GRT_RESIZER_SETUP_BUFFERING -skip_buffering +append_if_not_flag setup_args GRT_RESIZER_SETUP_BUFFER_REMOVAL -skip_buffer_removal +append_if_not_flag setup_args GRT_RESIZER_SETUP_GATE_CLONING -skip_gate_cloning +append_if_exists_argument setup_args GRT_RESIZER_SETUP_REPAIR_TNS_PCT -repair_tns +append_if_exists_argument setup_args GRT_RESIZER_SETUP_MAX_UTIL_PCT -max_utilization set hold_args [list] lappend hold_args -verbose @@ -47,16 +49,16 @@ lappend hold_args -hold lappend hold_args -setup_margin $::env(GRT_RESIZER_SETUP_SLACK_MARGIN) lappend hold_args -hold_margin $::env(GRT_RESIZER_HOLD_SLACK_MARGIN) lappend hold_args -max_buffer_percent $::env(GRT_RESIZER_HOLD_MAX_BUFFER_PCT) -if { $::env(GRT_RESIZER_ALLOW_SETUP_VIOS) == 1 } { - lappend hold_args -allow_setup_violations -} +append_if_flag hold_args GRT_RESIZER_ALLOW_SETUP_VIOS -allow_setup_violations +append_if_exists_argument hold_args GRT_RESIZER_HOLD_REPAIR_TNS_PCT -repair_tns +append_if_exists_argument hold_args GRT_RESIZER_HOLD_MAX_UTIL_PCT -max_utilization if { $::env(GRT_RESIZER_FIX_HOLD_FIRST) == 1 } { - repair_timing {*}$hold_args - repair_timing {*}$setup_args + log_cmd repair_timing {*}$hold_args + log_cmd repair_timing {*}$setup_args } else { - repair_timing {*}$setup_args - repair_timing {*}$hold_args + log_cmd repair_timing {*}$setup_args + log_cmd repair_timing {*}$hold_args } # Re-DPL and GRT diff --git a/openlane/scripts/openroad/sta/check_macro_instances.tcl b/openlane/scripts/openroad/sta/check_macro_instances.tcl index d6aa2044..057da8c2 100644 --- a/openlane/scripts/openroad/sta/check_macro_instances.tcl +++ b/openlane/scripts/openroad/sta/check_macro_instances.tcl @@ -49,5 +49,5 @@ foreach {instance_name macro_name} $::env(_check_macro_instances) { } if { $error_count != 0 } { - exit -1 + exit_unless_gui 1 } diff --git a/openlane/scripts/openroad/tapcell.tcl b/openlane/scripts/openroad/tapcell.tcl index 355e1635..8e921df9 100755 --- a/openlane/scripts/openroad/tapcell.tcl +++ b/openlane/scripts/openroad/tapcell.tcl @@ -14,7 +14,7 @@ source $::env(SCRIPTS_DIR)/openroad/common/io.tcl read_current_odb -tapcell\ +log_cmd tapcell\ -distance $::env(FP_TAPCELL_DIST)\ -tapcell_master "$::env(WELLTAP_CELL)"\ -endcap_master "$::env(ENDCAP_CELL)"\ diff --git a/openlane/scripts/openroad/ungpl.tcl b/openlane/scripts/openroad/ungpl.tcl new file mode 100644 index 00000000..a44c301d --- /dev/null +++ b/openlane/scripts/openroad/ungpl.tcl @@ -0,0 +1,23 @@ +# Copyright 2024 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. +source $::env(SCRIPTS_DIR)/openroad/common/io.tcl +read_current_odb + +set ::insts [$::block getInsts] + +foreach inst $::insts { + $inst setPlacementStatus "NONE" +} + +write_views diff --git a/openlane/steps/checker.py b/openlane/steps/checker.py index cab542e0..a0fe3cc5 100644 --- a/openlane/steps/checker.py +++ b/openlane/steps/checker.py @@ -266,7 +266,16 @@ class WireLength(MetricChecker): default=True, deprecated_names=["QUIT_ON_LONG_WIRE"], ) - config_vars = [error_on_var] + config_vars = [ + error_on_var, + Variable( + "WIRE_LENGTH_THRESHOLD", + Optional[Decimal], + "A value above which wire lengths generate warnings.", + units="µm", + pdk=True, + ), + ] def get_threshold(self) -> Optional[Decimal]: threshold = self.config["WIRE_LENGTH_THRESHOLD"] diff --git a/openlane/steps/klayout.py b/openlane/steps/klayout.py index 52777563..1e4d4e83 100644 --- a/openlane/steps/klayout.py +++ b/openlane/steps/klayout.py @@ -131,7 +131,7 @@ def get_cli_args( for gds in self.toolbox.get_macro_views(self.config, DesignFormat.GDS): gds_args.append("--with-gds-file") gds_args.append(gds) - if extra_gds := self.config["EXTRA_GDS_FILES"]: + if extra_gds := self.config["EXTRA_GDS"]: for gds in extra_gds: gds_args.append("--with-gds-file") gds_args.append(gds) diff --git a/openlane/steps/misc.py b/openlane/steps/misc.py index 4d54a8d4..cd855afb 100644 --- a/openlane/steps/misc.py +++ b/openlane/steps/misc.py @@ -39,7 +39,7 @@ class LoadBaseSDC(Step): outputs = [DesignFormat.SDC] def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]: - path = self.config["FALLBACK_SDC_FILE"] + path = self.config["FALLBACK_SDC"] target = os.path.join(self.step_dir, f"{self.config['DESIGN_NAME']}.sdc") diff --git a/openlane/steps/odb.py b/openlane/steps/odb.py index 71ea6b77..3c24211d 100644 --- a/openlane/steps/odb.py +++ b/openlane/steps/odb.py @@ -502,9 +502,9 @@ class AddRoutingObstructions(OdbpyStep): config_vars = [ Variable( "ROUTING_OBSTRUCTIONS", - Optional[List[str]], + Optional[List[Tuple[str, Decimal, Decimal, Decimal, Decimal]]], "Add routing obstructions to the design. If set to `None`, this step is skipped." - + " Format of each obstruction item is: layer llx lly urx ury.", + + " Format of each obstruction item is a tuple of: layer name, llx, lly, urx, ury.", units="µm", default=None, deprecated_names=["GRT_OBS"], @@ -525,7 +525,7 @@ def get_command(self) -> List[str]: if obstructions := self.config[self.config_vars[0].name]: for obstruction in obstructions: command.append("--obstructions") - command.append(obstruction) + command.append(" ".join([str(o) for o in obstruction])) return command def run(self, state_in, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]: @@ -554,9 +554,9 @@ class AddPDNObstructions(AddRoutingObstructions): config_vars = [ Variable( "PDN_OBSTRUCTIONS", - Optional[List[str]], + Optional[List[Tuple[str, Decimal, Decimal, Decimal, Decimal]]], "Add routing obstructions to the design before PDN stage. If set to `None`, this step is skipped." - + " Format of each obstruction item is: layer llx lly urx ury.", + + " Format of each obstruction item is a tuple of: layer name, llx, lly, urx, ury,.", units="µm", default=None, ), diff --git a/openlane/steps/openroad.py b/openlane/steps/openroad.py index cc5230d3..900f526f 100644 --- a/openlane/steps/openroad.py +++ b/openlane/steps/openroad.py @@ -173,7 +173,7 @@ class CheckSDCFiles(Step): def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]: default_sdc_file = [ - var for var in option_variables if var.name == "FALLBACK_SDC_FILE" + var for var in option_variables if var.name == "FALLBACK_SDC" ][0] assert default_sdc_file is not None @@ -258,7 +258,7 @@ def prepare_env(self, env: dict, state: State) -> dict: lib_list = self.toolbox.filter_views(self.config, self.config["LIB"]) lib_list += self.toolbox.get_macro_views(self.config, DesignFormat.LIB) - env["_SDC_IN"] = self.config["PNR_SDC_FILE"] or self.config["FALLBACK_SDC_FILE"] + env["_SDC_IN"] = self.config["PNR_SDC_FILE"] or self.config["FALLBACK_SDC"] env["_PNR_LIBS"] = TclStep.value_to_tcl(lib_list) env["_MACRO_LIBS"] = TclStep.value_to_tcl( self.toolbox.get_macro_views(self.config, DesignFormat.LIB) @@ -342,7 +342,7 @@ def get_command(self) -> List[str]: metrics_path = os.path.join(self.step_dir, "or_metrics_out.json") return [ "openroad", - "-exit", + ("-gui" if os.getenv("_OPENROAD_GUI", "0") == "1" else "-exit"), "-no_splash", "-metrics", metrics_path, @@ -912,6 +912,13 @@ class Floorplan(OpenROADStep): inputs = [DesignFormat.NETLIST] config_vars = OpenROADStep.config_vars + [ + Variable( + "FP_TRACKS_INFO", + Path, + "A path to the a classic OpenROAD `.tracks` file. Used by the floorplanner to generate tracks.", + deprecated_names=["TRACKS_INFO_FILE"], + pdk=True, + ), Variable( "FP_SIZING", Literal["absolute", "relative"], @@ -1106,7 +1113,7 @@ def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]: @Step.factory.register() class TapEndcapInsertion(OpenROADStep): """ - Places well TAP cells across a floorplan, as well as end-cap cells at the + Places welltap cells across a floorplan, as well as endcap cells at the edges of the floorplan. """ @@ -1117,7 +1124,7 @@ class TapEndcapInsertion(OpenROADStep): Variable( "FP_MACRO_HORIZONTAL_HALO", Decimal, - "Specify the horizontal halo size around macros while cutting rows.", + "Specify the horizontal halo size around macros.", default=10, units="µm", deprecated_names=["FP_TAP_HORIZONTAL_HALO"], @@ -1125,17 +1132,40 @@ class TapEndcapInsertion(OpenROADStep): Variable( "FP_MACRO_VERTICAL_HALO", Decimal, - "Specify the vertical halo size around macros while cutting rows.", + "Specify the vertical halo size around macros.", default=10, units="µm", deprecated_names=["FP_TAP_VERTICAL_HALO"], ), + Variable( + "FP_TAPCELL_DIST", + Decimal, + "The distance between tap cell columns.", + units="µm", + pdk=True, + ), ] def get_script_path(self): return os.path.join(get_script_dir(), "openroad", "tapcell.tcl") +@Step.factory.register() +class UnplaceAll(OpenROADStep): + """ + Sets placement status of *all* instances to NONE. + + Useful in flows where a preliminary placement is needed as a pre-requisite + to something else but that placement must be discarded. + """ + + id = "OpenROAD.UnplaceAll" + name = "Unplace All" + + def get_script_path(self): + return os.path.join(get_script_dir(), "openroad", "ungpl.tcl") + + def get_psm_error_count(rpt: io.TextIOWrapper) -> int: sio = io.StringIO() @@ -1217,7 +1247,7 @@ class _GlobalPlacement(OpenROADStep): "The desired placement density of cells. If not specified, the value will be equal to (`FP_CORE_UTIL` + 5 * `GPL_CELL_PADDING` + 10).", units="%", deprecated_names=[ - ("PL_TARGET_DENSITY", lambda d: Decimal(d) * Decimal(100.0)) + ("PL_TARGET_DENSITY", lambda d: Decimal(d) * Decimal("100")) ], ), Variable( @@ -1316,7 +1346,7 @@ class GlobalPlacement(_GlobalPlacement): @Step.factory.register() class GlobalPlacementSkipIO(_GlobalPlacement): """ - Performs global placement without taking I/O into consideration. + Performs preliminary global placement as a basis for pin placement. This is useful for flows where the: * Cells are placed @@ -1335,6 +1365,11 @@ class GlobalPlacementSkipIO(_GlobalPlacement): default="matching", deprecated_names=[("FP_IO_MODE", _migrate_ppl_mode)], ), + Variable( + "FP_PIN_ORDER_CFG", + Optional[Path], + "Path to a custom pin configuration file.", + ), Variable( "FP_DEF_TEMPLATE", Optional[Path], @@ -1346,39 +1381,18 @@ def run(self, state_in: State, **kwargs) -> Tuple[ViewsUpdate, MetricsUpdate]: kwargs, env = self.extract_env(kwargs) if self.config["FP_DEF_TEMPLATE"] is not None: info( - f"I/O pins were loaded from {self.config['FP_DEF_TEMPLATE']}. Skipping the first global placement iteration…" + f"I/O pins were loaded from {self.config['FP_DEF_TEMPLATE']}. Returning state unaltered…" + ) + return {}, {} + if self.config["FP_PIN_ORDER_CFG"] is not None: + info( + f"I/O pins to be placed from {self.config['FP_PIN_ORDER_CFG']}. Returning state unaltered…" ) return {}, {} env["__PL_SKIP_IO"] = "1" return super().run(state_in, env=env, **kwargs) -@Step.factory.register() -class BasicMacroPlacement(OpenROADStep): - id = "OpenROAD.BasicMacroPlacement" - name = "Basic Macro Placement" - - config_vars = OpenROADStep.config_vars + [ - Variable( - "PL_MACRO_HALO", - str, - "Macro placement halo. Format: `{Horizontal} {Vertical}`.", - default="0 0", - units="µm", - ), - Variable( - "PL_MACRO_CHANNEL", - str, - "Channel widths between macros. Format: `{Horizontal} {Vertical}`.", - default="0 0", - units="µm", - ), - ] - - def get_script_path(self): - raise NotImplementedError() - - @Step.factory.register() class DetailedPlacement(OpenROADStep): """ @@ -1946,7 +1960,7 @@ class CutRows(OpenROADStep): Variable( "FP_MACRO_HORIZONTAL_HALO", Decimal, - "Specify the horizontal halo size around macros while cutting rows.", + "Specify the horizontal halo size around macros.", default=10, units="µm", deprecated_names=["FP_TAP_HORIZONTAL_HALO"], @@ -1954,11 +1968,18 @@ class CutRows(OpenROADStep): Variable( "FP_MACRO_VERTICAL_HALO", Decimal, - "Specify the vertical halo size around macros while cutting rows.", + "Specify the vertical halo size around macros.", default=10, units="µm", deprecated_names=["FP_TAP_VERTICAL_HALO"], ), + Variable( + "FP_PRUNE_THRESHOLD", + Optional[Decimal], + 'If specified, all rows smaller in width than this value will be removed. This helps avoid "islets" of cells that are hard to route and connect to PDNs.', + pdk=True, + units="µm", + ), ] def get_script_path(self): @@ -2342,10 +2363,47 @@ class ResizerTimingPostCTS(ResizerStep): default=False, ), Variable( - "PL_RESIZER_GATE_CLONING", + "PL_RESIZER_SETUP_GATE_CLONING", bool, "Enables gate cloning when attempting to fix setup violations", default=True, + deprecated_names=["PL_RESIZER_GATE_CLONING"], + ), + Variable( + "PL_RESIZER_SETUP_BUFFERING", + bool, + "Rebuffering and load splitting during setup fixing.", + default=True, + ), + Variable( + "PL_RESIZER_SETUP_BUFFER_REMOVAL", + bool, + "Buffer removal transform during setup fixing.", + default=True, + ), + Variable( + "PL_RESIZER_SETUP_REPAIR_TNS_PCT", + Optional[Decimal], + "Percentage of violating endpoints to repair during setup fixing.", + units="%", + ), + Variable( + "PL_RESIZER_SETUP_MAX_UTIL_PCT", + Optional[Decimal], + "Defines the percentage of core area used during setup fixing.", + units="%", + ), + Variable( + "PL_RESIZER_HOLD_REPAIR_TNS_PCT", + Optional[Decimal], + "Percentage of violating endpoints to repair during hold fixing.", + units="%", + ), + Variable( + "PL_RESIZER_HOLD_MAX_UTIL_PCT", + Optional[Decimal], + "Defines the percentage of core area used during hold fixing.", + units="%", ), Variable( "PL_RESIZER_FIX_HOLD_FIRST", @@ -2415,10 +2473,11 @@ class ResizerTimingPostGRT(ResizerStep): deprecated_names=["GLB_RESIZER_ALLOW_SETUP_VIOS"], ), Variable( - "GRT_RESIZER_GATE_CLONING", + "GRT_RESIZER_SETUP_GATE_CLONING", bool, "Enables gate cloning when attempting to fix setup violations", default=True, + deprecated_names=["GRT_RESIZER_GATE_CLONING"], ), Variable( "GRT_RESIZER_RUN_GRT", @@ -2426,6 +2485,42 @@ class ResizerTimingPostGRT(ResizerStep): "Gates running global routing after resizer steps. May be useful to disable for designs where global routing takes non-trivial time.", default=True, ), + Variable( + "GRT_RESIZER_SETUP_BUFFERING", + bool, + "Rebuffering and load splitting during setup fixing.", + default=True, + ), + Variable( + "GRT_RESIZER_SETUP_BUFFER_REMOVAL", + bool, + "Buffer removal transform during setup fixing.", + default=True, + ), + Variable( + "GRT_RESIZER_SETUP_REPAIR_TNS_PCT", + Optional[Decimal], + "Percentage of violating endpoints to repair during setup fixing.", + units="%", + ), + Variable( + "GRT_RESIZER_SETUP_MAX_UTIL_PCT", + Optional[Decimal], + "Defines the percentage of core area used during setup fixing.", + units="%", + ), + Variable( + "GRT_RESIZER_HOLD_REPAIR_TNS_PCT", + Optional[Decimal], + "Percentage of violating endpoints to repair during hold fixing.", + units="%", + ), + Variable( + "GRT_RESIZER_HOLD_MAX_UTIL_PCT", + Optional[Decimal], + "Defines the percentage of core area used during hold fixing.", + units="%", + ), Variable( "GRT_RESIZER_FIX_HOLD_FIRST", bool, diff --git a/pyproject.toml b/pyproject.toml index b010f3c1..fd36212c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "openlane" -version = "3.0.0.dev7" +version = "3.0.0.dev8" description = "An infrastructure for implementing chip design flows" authors = ["Efabless Corporation and Contributors "] readme = "Readme.md" diff --git a/test/steps/all b/test/steps/all index acfad006..f6f0faeb 160000 --- a/test/steps/all +++ b/test/steps/all @@ -1 +1 @@ -Subproject commit acfad0066ba462962c03ff2234db0ef23f90f649 +Subproject commit f6f0faeb55f38b29c59be30f8b1cde139699796e diff --git a/test/steps/excluded_step_tests b/test/steps/excluded_step_tests index 1ea9c89e..e69de29b 100644 --- a/test/steps/excluded_step_tests +++ b/test/steps/excluded_step_tests @@ -1,2 +0,0 @@ -checker.holdviolations/004-success-hold-overwrite -checker.holdviolations/005-fail-different-corner