diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3554812..7363075 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,6 +33,5 @@ jobs: run: uv run pytest working-directory: rdlexporter - - name: Build rdlexporter package - run: uv run python -m build - working-directory: rdlexporter + - name: Build packages + run: uv build --all diff --git a/README.md b/README.md index d59a1e1..6d13b62 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ nix develop ## rdl2ot cli tool A PeakRDL extension to generate Opentitan style source files from SystemRDL files. +For more details, refer to [rdl2ot](./rdl2ot) + ### How to run tests ```sh cd rdl2ot @@ -33,6 +35,8 @@ python src/rdl2ot export-rtl tests/snapshots/lc_ctrl.rdl /tmp/ ## Rdl-exporter A library to generate SystemRDL files from the Hierarchical Register Model. +For more details, refer to [rdlexporter](./rdlexporter) + ### How to run tests ```sh cd rdl-exporter @@ -46,8 +50,7 @@ uv sync --all-extras ``` Build package ```sh -cd rdl-exporter -uv run python -m build +uv build --all ``` Install the package locally ```sh diff --git a/pyproject.toml b/pyproject.toml index 082fdef..1485f52 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,29 +1,22 @@ [project] name = "benevisrdl" -version = "0.0.0" +version = "0.1.0" description = "Houses PeakRDL pluggins." requires-python = ">=3.10" -readme = "README.md" # Path to your README file -license = { file = "LICENSE" } # Path to your LICENSE file +readme = "README.md" +license = { file = "LICENSE" } dependencies = [ - "uv==0.6.1", - "isort==5.10.1", - "yapf==0.32.0", - "click>=8.2.1", - "jinja2>=3.1.6", - "peakrdl>=1.4.0", ] + [project.optional-dependencies] linting = [ + "pyright>=1.1.403", "ruff>=0.9.6", - "mypy==0.971", - "flake8 ~= 7.1", ] dev = [ "pytest>=8.4.1", - "hatch>=1.4.1", "twine>=6.1.0", - "build>=1.2.2", + "uv-build>=0.8.4", ] ci = ["benevisrdl[linting,dev]"] @@ -33,11 +26,25 @@ py-modules = [] [tool.ruff] target-version = "py310" line-length = 100 +extend-exclude = [ +] [tool.ruff.lint] preview = true explicit-preview-rules = true -extend-select = ["E", "E303", "W391"] +select = ["ALL"] +extend-select = ["W391", "E303"] +allowed-confusables = ["−"] +ignore = [ + "D203", "D213", "COM812", "ISC001", "FIX", "TD", "T201", "S101", "C901", "D401", + "PLR0911", "PLR0915", "INP001", "RUF012", "EXE001", "S701" +] [tool.uv.workspace] members = [ "rdl2ot", "rdlexporter"] + +[[tool.uv.index]] +name = "testpypi" +url = "https://test.pypi.org/simple/" +publish-url = "https://test.pypi.org/legacy/" +explicit = true diff --git a/rdl2ot/README.md b/rdl2ot/README.md new file mode 100644 index 0000000..7f82002 --- /dev/null +++ b/rdl2ot/README.md @@ -0,0 +1,21 @@ +# rdl2ot cli tool +A PeakRDL extension to generate Opentitan style source files from SystemRDL files. + +## How to generate the Opentitan register interfaces from a RDL file +```sh +rdl2ot export-rtl +``` + +Example: +```sh +mkdir -p /tmp/lc_ctrl +rdl2ot export-rtl tests/snapshots/lc_ctrl.rdl /tmp/lc_ctrl/ +``` + +## Contributing +### How to run tests +```sh +cd rdl2ot +pytest +``` + diff --git a/rdl2ot/pyproject.toml b/rdl2ot/pyproject.toml index 4dbb87d..fbf78cd 100644 --- a/rdl2ot/pyproject.toml +++ b/rdl2ot/pyproject.toml @@ -3,9 +3,38 @@ name = "rdl2ot" version = "0.1.0" description = "An extension of PeakRDL to generate Opentitan RTL." requires-python = ">=3.10" +keywords = ["SystemRDL", "Opentitan", "Codegen"] +readme = "README.md" dependencies = [ + "click>=8.2.1", + "jinja2>=3.1.6", + "peakrdl>=1.4.0", ] +authors = [ + { name = "lowRISC contributors"}, +] + +[project.scripts] +rdl2ot = "rdl2ot.cli:main" + +[project.urls] +Homepage = "https://github.com/lowrisc/benevisrdl" +Issues = "https://github.com/lowrisc/benevisrdl/issues" +Documentation = "https://github.com/lowrisc/benevisrdl" + [build-system] requires = ["hatchling"] build-backend = "hatchling.build" + +[tool.pyright] +include = ["src"] +reportMissingImports = "error" +reportMissingTypeStubs = false +venv = ".venv" +executionEnvironments = [ + { root = "src" }, +] + +[tool.hatch.build.targets.wheel] +packages = ["src/rdl2ot", "src/templates"] diff --git a/rdl2ot/src/rdl2ot/__init__.py b/rdl2ot/src/rdl2ot/__init__.py index 3e8bb41..d532460 100644 --- a/rdl2ot/src/rdl2ot/__init__.py +++ b/rdl2ot/src/rdl2ot/__init__.py @@ -1,3 +1,5 @@ # Copyright lowRISC contributors (OpenTitan project). # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 + +"""Init.""" diff --git a/rdl2ot/src/rdl2ot/__main__.py b/rdl2ot/src/rdl2ot/__main__.py index de9d849..fef943a 100644 --- a/rdl2ot/src/rdl2ot/__main__.py +++ b/rdl2ot/src/rdl2ot/__main__.py @@ -2,6 +2,8 @@ # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 +"""Main.""" + from cli import main if __name__ == "__main__": diff --git a/rdl2ot/src/rdl2ot/cli.py b/rdl2ot/src/rdl2ot/cli.py index 40ff2ec..34f2b56 100644 --- a/rdl2ot/src/rdl2ot/cli.py +++ b/rdl2ot/src/rdl2ot/cli.py @@ -3,42 +3,44 @@ # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 -import click + +"""Cli.""" + from pathlib import Path +import click +from systemrdl import RDLCompiler + +from rdl2ot import rtl_exporter + @click.group() -def main(): - pass +def main() -> None: + """Cli.""" @main.command() @click.argument( "input_file", type=click.Path(writable=True), - # help="The input RDL.", ) @click.argument( "out_dir", default="./result", type=click.Path(writable=True), - # help="The destination dir to generate the output.", ) -def export_rtl(input_file: str, out_dir: str): - from systemrdl import RDLCompiler +def export_rtl(input_file: str, out_dir: str) -> None: + """Export opentitan rtl. + INPUT_FILE: The input RDL + OUT_DIR: The destination dir to generate the output + + """ + print("Compiling file: {input_file}...") rdlc = RDLCompiler() - try: - rdlc.compile_file(input_file) - root = rdlc.elaborate() - except Exception as e: - raise RuntimeError(f"In file {input_file}") from e - - import export_rtl - - try: - export_rtl.run(rdlc, root, Path(out_dir)) - except Exception as e: - raise RuntimeError(f"In file {input_file}") from e + rdlc.compile_file(input_file) + root = rdlc.elaborate() + + rtl_exporter.run(rdlc, root, Path(out_dir)) print("Successfully finished!\n") diff --git a/rdl2ot/src/rdl2ot/opentitan.py b/rdl2ot/src/rdl2ot/opentitan.py index b551696..eb526fe 100644 --- a/rdl2ot/src/rdl2ot/opentitan.py +++ b/rdl2ot/src/rdl2ot/opentitan.py @@ -2,27 +2,28 @@ # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 -from systemrdl.rdltypes import OnReadType, OnWriteType, AccessType -from systemrdl import node +"""Functions with opentitan specific logic.""" + import re +from systemrdl import node +from systemrdl.rdltypes import AccessType, OnReadType, OnWriteType + def register_permit_mask(reg: dict) -> int: - """ - One bit presents one byte in the register, so in total 4 bits are used. - """ + """One bit presents one byte in the register, so in total 4 bits are used.""" w = reg["msb"] + 1 - if w > 24: + if w > 24: # noqa: PLR2004 return 0b1111 - if w > 16: + if w > 16: # noqa: PLR2004 return 0b0111 - if w > 8: + if w > 8: # noqa: PLR2004 return 0b0011 return 0b0001 -def needs_read_en(reg: dict()) -> bool: - """Return true if at least one field needs a read-enable +def needs_read_en(reg: dict) -> bool: + """Return true if at least one field needs a read-enable. This is true if any of the following are true: @@ -40,43 +41,42 @@ def needs_read_en(reg: dict()) -> bool: side might need the re signal) """ return reg["shadowed"] or any( - [ - (field["clear_onread"] or (reg["external"] and field["sw_readable"])) - for field in reg["fields"] - ] + (field["clear_onread"] or (reg["external"] and field["sw_readable"])) + for field in reg["fields"] ) -def needs_write_en(reg: dict()) -> bool: - """Should the register for this field have a write-enable signal? +def needs_write_en(reg: dict) -> bool: + """Return register for this field should have a write-enable signal. This is almost the same as allows_write(), but doesn't return true for RC registers, which should use a read-enable signal (connected to their prim_subreg's we port). """ - return any([(not field["clear_onread"] and field["sw_writable"]) for field in reg["fields"]]) + return any((not field["clear_onread"] and field["sw_writable"]) for field in reg["fields"]) + +def needs_qe(reg: dict) -> bool: + """Return true if the register or at least one field needs a q-enable.""" + return any(field["swmod"] for field in reg["fields"]) -def needs_qe(reg: dict()) -> bool: - """Return true if the register or at least one field needs a q-enable""" - return any([field["swmod"] for field in reg["fields"]]) +def needs_int_qe(reg: dict) -> bool: + """Return true if the register or at least one field needs an internal q-enable. -def needs_int_qe(reg: dict()) -> bool: - """Return true if the register or at least one field needs an - internal q-enable. An internal q-enable means the net - may be consumed by other reg logic but will not be exposed - in the package file.""" + An internal q-enable means the net may be consumed by other reg logic but will + not be exposed in the package file. + """ return (bool(reg["async_clk"]) and reg["hw_writable"]) or needs_qe(reg) def get_bit_width(offset: int) -> int: - """Calculate the number of bits to address every byte of the block""" + """Calculate the number of bits to address every byte of the block.""" return (offset - 1).bit_length() def get_sw_access_enum(field: node.FieldNode) -> str: - """Map the rdl access permissions to reggen SwAccess enum""" + """Map the rdl access permissions to reggen SwAccess enum.""" sw = field.get_property("sw") onwrite = field.get_property("onwrite") onread = field.get_property("onread") @@ -98,7 +98,8 @@ def get_sw_access_enum(field: node.FieldNode) -> str: return "NONE" -def fields_no_write_en(reg: dict()) -> int: +def fields_no_write_en(reg: dict) -> int: + """Count how many fields has write enable.""" res = 0 for idx, field in enumerate(reg["fields"]): res |= (not needs_we(field)) << idx @@ -106,7 +107,8 @@ def fields_no_write_en(reg: dict()) -> int: def needs_we(field: dict) -> bool: - """Should the register for this field have a write-enable signal? + """True if the register for this field should have a write-enable signal. + This is almost the same as allows_write(), but doesn't return true for RC registers, which should use a read-enable signal (connected to their prim_subreg's we port). @@ -115,8 +117,9 @@ def needs_we(field: dict) -> bool: def is_homogeneous(reg: dict) -> bool: - """Return true if all fields of a register are equal. The offset are excluded from - the comparison. + """Return true if all fields of a register are equal. + + The offset are excluded from the comparison. """ exclude = ["name", "msb", "lsb", "bitmask", "type"] unamed_fields = [ diff --git a/rdl2ot/src/rdl2ot/export_rtl.py b/rdl2ot/src/rdl2ot/rtl_exporter.py similarity index 85% rename from rdl2ot/src/rdl2ot/export_rtl.py rename to rdl2ot/src/rdl2ot/rtl_exporter.py index 5fc206a..deac8eb 100644 --- a/rdl2ot/src/rdl2ot/export_rtl.py +++ b/rdl2ot/src/rdl2ot/rtl_exporter.py @@ -2,30 +2,33 @@ # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 +"""Export RDL to opentitan RTL.""" + import json from pathlib import Path -from systemrdl import RDLCompiler -from systemrdl import node -from systemrdl.rdltypes import OnReadType + from jinja2 import Environment, FileSystemLoader -import opentitan +from systemrdl import RDLCompiler, node +from systemrdl.rdltypes import OnReadType + +from rdl2ot import opentitan -TEMPLATES_DIR = "./src/templates" +TEMPLATES_DIR = Path(__file__).parent.parent / "templates" DEFAULT_INTERFACE_NAME = "regs" -def run(rdlc: RDLCompiler, obj: node.RootNode, out_dir: Path): +def run(rdlc: RDLCompiler, obj: node.RootNode, out_dir: Path) -> None: + """Export RDL to opentitan RTL.""" factory = OtInterfaceBuilder(rdlc) data = factory.parse_root(obj.top) - with open("/tmp/reg.json", "w", encoding="utf-8") as f: - json.dump(data, f, indent=2) + + Path(out_dir / "rdl.json").write_text(json.dumps(data, indent=2), encoding="utf-8") file_loader = FileSystemLoader(TEMPLATES_DIR) env = Environment(loader=file_loader) ip_name = data["ip_name"] reg_pkg_tpl = env.get_template("reg_pkg.sv.tpl") - # stream = reg_pkg_tpl.stream(data) stream = reg_pkg_tpl.render(data) path = out_dir / f"{ip_name}_reg_pkg.sv" path.open("w").write(stream) @@ -35,7 +38,6 @@ def run(rdlc: RDLCompiler, obj: node.RootNode, out_dir: Path): for interface in data["interfaces"]: name = "_{}".format(interface["name"].lower()) if "name" in interface else "" data_ = {"ip_name": ip_name, "interface": interface} - # stream = reg_top_tpl.stream(data_) stream = reg_top_tpl.render(data_).replace(" \n", "\n") path = out_dir / f"{ip_name}{name}_reg_top.sv" path.open("w").write(stream) @@ -43,6 +45,8 @@ def run(rdlc: RDLCompiler, obj: node.RootNode, out_dir: Path): class OtInterfaceBuilder: + """Opentitan Interface Builder.""" + num_regs: int = 0 # The number of registers of an interface num_windows: int = 0 # The number of registers of an interface any_async_clk: bool = False # Whether is there any register with async clock in the interface @@ -52,14 +56,13 @@ class OtInterfaceBuilder: reg_index: int = 0 rdlc: RDLCompiler - def __init__(self, rdlc: RDLCompiler): + def __init__(self, rdlc: RDLCompiler) -> None: + """Constructor.""" self.rdlc = rdlc def get_field(self, field: node.FieldNode) -> dict: - """ - Parse a field and return a dictionary. - """ - obj = dict() + """Parse a field and return a dictionary.""" + obj = {} obj["name"] = field.inst_name obj["type"] = "field" obj["desc"] = field.get_property("desc", default="") @@ -92,10 +95,8 @@ def get_field(self, field: node.FieldNode) -> dict: return obj def get_mem(self, mem: node.FieldNode) -> dict: - """ - Parse a memory and return a dictionary representing a window. - """ - obj = dict() + """Parse a memory and return a dictionary representing a window.""" + obj = {} obj["name"] = mem.inst_name obj["entries"] = mem.get_property("mementries") obj["sw_writable"] = mem.is_sw_writable @@ -109,10 +110,8 @@ def get_mem(self, mem: node.FieldNode) -> dict: return obj def get_reg(self, reg: node.RegNode) -> dict: - """ - Parse a register and return a dictionary. - """ - obj = dict() + """Parse a register and return a dictionary.""" + obj = {} obj["name"] = reg.inst_name obj["type"] = "reg" obj["width"] = reg.get_property("regwidth") @@ -131,7 +130,7 @@ def get_reg(self, reg: node.RegNode) -> dict: obj["is_multireg"] = True self.num_regs += reg.array_dimensions[0] offset = reg.raw_address_offset - for _idx in range(0, reg.array_dimensions[0]): + for _idx in range(reg.array_dimensions[0]): obj["offsets"].append(offset) offset += reg.array_stride else: @@ -143,8 +142,8 @@ def get_reg(self, reg: node.RegNode) -> dict: msb = 0 reset_val = 0 bitmask = 0 - for field in reg.fields(): - field = self.get_field(field) + for f in reg.fields(): + field = self.get_field(f) obj["fields"].append(field) sw_write_en |= field["sw_write_en"] msb = max(msb, field["msb"]) @@ -171,27 +170,21 @@ def get_reg(self, reg: node.RegNode) -> dict: array_size = len(obj["offsets"]) if bool(obj["async_clk"]): - for index in range(0, array_size): + for index in range(array_size): reg_name = reg.inst_name + (f"_{index}" if array_size > 1 else "") self.async_registers.append((self.reg_index + index, reg_name)) self.reg_index += array_size return obj def get_paramesters(self, obj: node.AddrmapNode | node.RegfileNode) -> [dict]: - """ - Parse the custom property localparams and return a list of dictionaries. - """ - - res = [ + """Parse the custom property localparams and return a list of dictionaries.""" + return [ {"name": param.name, "type": "int", "value": param.get_value()} for param in obj.inst.parameters ] - return res def get_interface(self, addrmap: node.AddrmapNode, defalt_name: None | str = None) -> dict: - """ - Parse an interface and return a dictionary. - """ + """Parse an interface and return a dictionary.""" self.num_regs = 0 self.num_windows = 0 self.any_async_clk = False @@ -202,7 +195,7 @@ def get_interface(self, addrmap: node.AddrmapNode, defalt_name: None | str = Non if addrmap.is_array: print(f"WARNING: Unsupported array type: {type(addrmap)}, skiping...") - interface = dict() + interface = {} if defalt_name: interface["name"] = addrmap.inst_name or defalt_name @@ -213,6 +206,10 @@ def get_interface(self, addrmap: node.AddrmapNode, defalt_name: None | str = Non if isinstance(child, node.RegNode): child_obj = self.get_reg(child) interface["regs"].append(child_obj) + elif isinstance(child, node.RegfileNode): + for reg in child.children(): + child_obj = self.get_reg(reg) + interface["regs"].append(child_obj) elif isinstance(child, node.MemNode): child_obj = self.get_mem(child) interface["windows"].append(child_obj) @@ -239,22 +236,20 @@ def get_interface(self, addrmap: node.AddrmapNode, defalt_name: None | str = Non interface["all_async_clk"] = self.all_async_clk interface["any_shadowed_reg"] = self.any_shadowed_reg interface["any_integrity_bypass"] = any( - [win["integrity_bypass"] for win in interface["windows"]] + win["integrity_bypass"] for win in interface["windows"] ) return interface def parse_root(self, root: node.AddrmapNode) -> dict: - """ - Parse the root node and return a dictionary representing a window. - """ + """Parse the root node and return a dictionary representing a window.""" if root.is_array: print("Error: Unsupported array type on the top") raise RuntimeError if not isinstance(root, node.AddrmapNode): print("Error: Top level must be an addrmap") - raise RuntimeError + raise TypeError - obj = dict() + obj = {} params = self.get_paramesters(root) if params: obj["parameters"] = params @@ -266,14 +261,14 @@ def parse_root(self, root: node.AddrmapNode) -> dict: if isinstance(child, node.AddrmapNode): child_obj = self.get_interface(child, DEFAULT_INTERFACE_NAME) obj["interfaces"].append(child_obj) - elif isinstance(child, node.RegNode | node.MemNode): + elif isinstance(child, node.RegNode | node.MemNode | node.RegfileNode): continue else: print( - f"""Error: Unsupported type: {type(child)}, top level only supports + f"""Error: Unsupported type: {type(child)}, top level only supports addrmap and reg components.""" ) - raise RuntimeError + raise TypeError # If the root contain imediate registers, use a default interface name if len(root.registers()) > 0: diff --git a/rdl2ot/tests/snapshots/uart.rdl b/rdl2ot/tests/snapshots/uart.rdl index 4588269..b290198 100644 --- a/rdl2ot/tests/snapshots/uart.rdl +++ b/rdl2ot/tests/snapshots/uart.rdl @@ -1,129 +1,116 @@ addrmap uart { - reg { - field { - sw = rw; - onwrite = woclr; - desc = "raised if the transmit FIFO is past the high-water mark."; - } TX_WATERMARK[0:0]; - field { - sw = rw; - onwrite = woclr; - desc = "raised if the receive FIFO is past the high-water mark."; - } RX_WATERMARK[1:1]; - field { - sw = rw; - onwrite = woclr; - desc = "raised if the transmit FIFO has emptied and no transmit is ongoing."; - } TX_EMPTY[2:2]; - field { - sw = rw; - onwrite = woclr; - desc = "raised if the receive FIFO has overflowed."; - } RX_OVERFLOW[3:3]; - field { - sw = rw; - onwrite = woclr; - desc = "raised if a framing error has been detected on receive."; - } RX_FRAME_ERR[4:4]; - field { - sw = rw; - onwrite = woclr; - desc = "raised if break condition has been detected on receive."; - } RX_BREAK_ERR[5:5]; - field { - sw = rw; - onwrite = woclr; - desc = "raised if RX FIFO has characters remaining in the FIFO without being - retrieved for the programmed time period."; - } RX_TIMEOUT[6:6]; - field { - sw = rw; - onwrite = woclr; - desc = "raised if the receiver has detected a parity error."; - } RX_PARITY_ERR[7:7]; - } INTERRUPT_STATE @ 0x0; - reg { - field { - sw = rw; - onwrite = woclr; - desc = "Enable interrupt when tx_watermark is set."; - } TX_WATERMARK[0:0]; - field { - sw = rw; - onwrite = woclr; - desc = "Enable interrupt when rx_watermark is set."; - } RX_WATERMARK[1:1]; - field { - sw = rw; - onwrite = woclr; - desc = "Enable interrupt when tx_empty is set."; - } TX_EMPTY[2:2]; - field { - sw = rw; - onwrite = woclr; - desc = "Enable interrupt when rx_overflow is set."; - } RX_OVERFLOW[3:3]; - field { - sw = rw; - onwrite = woclr; - desc = "Enable interrupt when rx_frame_err is set."; - } RX_FRAME_ERR[4:4]; - field { - sw = rw; - onwrite = woclr; - desc = "Enable interrupt when rx_break_err is set."; - } RX_BREAK_ERR[5:5]; - field { - sw = rw; - onwrite = woclr; - desc = "Enable interrupt when rx_timeout is set."; - } RX_TIMEOUT[6:6]; - field { - sw = rw; - onwrite = woclr; - desc = "Enable interrupt when rx_parity_err is set."; - } RX_PARITY_ERR[7:7]; - } INTERRUPT_ENABLE @ 0x4; - reg { - field { - sw = w; - desc = "Write 1 to force tx_watermark to 1."; - } TX_WATERMARK[0:0]; - field { - sw = w; - desc = "Write 1 to force rx_watermark to 1."; - } RX_WATERMARK[1:1]; - field { - sw = w; - desc = "Write 1 to force tx_empty to 1."; - } TX_EMPTY[2:2]; - field { - sw = w; - desc = "Write 1 to force rx_overflow to 1."; - } RX_OVERFLOW[3:3]; - field { - sw = w; - desc = "Write 1 to force rx_frame_err to 1."; - } RX_FRAME_ERR[4:4]; - field { - sw = w; - desc = "Write 1 to force rx_break_err to 1."; - } RX_BREAK_ERR[5:5]; - field { - sw = w; - desc = "Write 1 to force rx_timeout to 1."; - } RX_TIMEOUT[6:6]; - field { - sw = w; - desc = "Write 1 to force rx_parity_err to 1."; - } RX_PARITY_ERR[7:7]; - } INTERRUPT_TEST @ 0x8; - reg { - field { - sw = w; - desc = "Write 1 to trigger one alert event of this kind."; - } FATAL_FAULT[0:0]; - } ALERT_TEST @ 0xC; + regfile signals { + default sw = rw; + reg { + field { + onwrite = woclr; + desc = "raised if the transmit FIFO is past the high-water mark."; + } TX_WATERMARK[0:0]; + field { + onwrite = woclr; + desc = "raised if the receive FIFO is past the high-water mark."; + } RX_WATERMARK[1:1]; + field { + onwrite = woclr; + desc = "raised if the transmit FIFO has emptied and no transmit is ongoing."; + } TX_EMPTY[2:2]; + field { + onwrite = woclr; + desc = "raised if the receive FIFO has overflowed."; + } RX_OVERFLOW[3:3]; + field { + onwrite = woclr; + desc = "raised if a framing error has been detected on receive."; + } RX_FRAME_ERR[4:4]; + field { + onwrite = woclr; + desc = "raised if break condition has been detected on receive."; + } RX_BREAK_ERR[5:5]; + field { + onwrite = woclr; + desc = "raised if RX FIFO has characters remaining in the FIFO without being + retrieved for the programmed time period."; + } RX_TIMEOUT[6:6]; + field { + onwrite = woclr; + desc = "raised if the receiver has detected a parity error."; + } RX_PARITY_ERR[7:7]; + } INTERRUPT_STATE @ 0x0; + reg { + field { + onwrite = woclr; + desc = "Enable interrupt when tx_watermark is set."; + } TX_WATERMARK[0:0]; + field { + onwrite = woclr; + desc = "Enable interrupt when rx_watermark is set."; + } RX_WATERMARK[1:1]; + field { + onwrite = woclr; + desc = "Enable interrupt when tx_empty is set."; + } TX_EMPTY[2:2]; + field { + onwrite = woclr; + desc = "Enable interrupt when rx_overflow is set."; + } RX_OVERFLOW[3:3]; + field { + onwrite = woclr; + desc = "Enable interrupt when rx_frame_err is set."; + } RX_FRAME_ERR[4:4]; + field { + onwrite = woclr; + desc = "Enable interrupt when rx_break_err is set."; + } RX_BREAK_ERR[5:5]; + field { + onwrite = woclr; + desc = "Enable interrupt when rx_timeout is set."; + } RX_TIMEOUT[6:6]; + field { + onwrite = woclr; + desc = "Enable interrupt when rx_parity_err is set."; + } RX_PARITY_ERR[7:7]; + } INTERRUPT_ENABLE @ 0x4; + reg { + field { + sw = w; + desc = "Write 1 to force tx_watermark to 1."; + } TX_WATERMARK[0:0]; + field { + sw = w; + desc = "Write 1 to force rx_watermark to 1."; + } RX_WATERMARK[1:1]; + field { + sw = w; + desc = "Write 1 to force tx_empty to 1."; + } TX_EMPTY[2:2]; + field { + sw = w; + desc = "Write 1 to force rx_overflow to 1."; + } RX_OVERFLOW[3:3]; + field { + sw = w; + desc = "Write 1 to force rx_frame_err to 1."; + } RX_FRAME_ERR[4:4]; + field { + sw = w; + desc = "Write 1 to force rx_break_err to 1."; + } RX_BREAK_ERR[5:5]; + field { + sw = w; + desc = "Write 1 to force rx_timeout to 1."; + } RX_TIMEOUT[6:6]; + field { + sw = w; + desc = "Write 1 to force rx_parity_err to 1."; + } RX_PARITY_ERR[7:7]; + } INTERRUPT_TEST @ 0x8; + reg { + field { + sw = w; + desc = "Write 1 to trigger one alert event of this kind."; + } FATAL_FAULT[0:0]; + } ALERT_TEST @ 0xC; + }sig; reg { field { desc = "TX enable"; @@ -266,4 +253,4 @@ addrmap uart { sw = rw; } EN[31:31]; } TIMEOUT_CTRL @ 0x30; -}; \ No newline at end of file +}; diff --git a/rdl2ot/tests/test_rdl2ot.py b/rdl2ot/tests/test_rdl2ot.py index f2b4361..11f496e 100644 --- a/rdl2ot/tests/test_rdl2ot.py +++ b/rdl2ot/tests/test_rdl2ot.py @@ -2,15 +2,19 @@ # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 -from pathlib import Path -import sys +"""Tests.""" + import subprocess +import sys +from pathlib import Path + +import pytest CLI_TOOL_PATH = Path(__file__).parent.parent / "src/rdl2ot" SNAPSHOTS_DIR = Path(__file__).parent / "snapshots" -def run_cli_tool(input_file_path: Path, output_dir_path: Path): +def _run_cli_tool(input_file_path: Path, output_dir_path: Path) -> subprocess.CompletedProcess: command = [ sys.executable, # Use the current Python interpreter str(CLI_TOOL_PATH), @@ -18,13 +22,14 @@ def run_cli_tool(input_file_path: Path, output_dir_path: Path): str(input_file_path), str(output_dir_path), ] - result = subprocess.run(command, capture_output=True, text=True, check=False) - return result + return subprocess.run(command, capture_output=True, text=True, check=False) # noqa: S603 - -def run_ip_test(tmp_path: Path, ip_block: str): +test_ips = ["lc_ctrl", "uart"] +@pytest.mark.parametrize("ip_block", test_ips) +def test_export_ip(tmp_path: Path, ip_block: str) -> None: + """Test an given ip block.""" input_rdl = SNAPSHOTS_DIR / f"{ip_block}.rdl" - cli_result = run_cli_tool(input_rdl, tmp_path) + cli_result = _run_cli_tool(input_rdl, tmp_path) assert cli_result.returncode == 0, f"CLI exited with error: {cli_result.stderr}" assert "Successfully finished!" in cli_result.stdout # Check for success message @@ -36,11 +41,3 @@ def run_ip_test(tmp_path: Path, ip_block: str): assert actual_output_content == snapshot_content, ( f"Output mismatch, to debug, run:\nmeld {outfile} {snapshot_file}\n" ) - - -def test_cli_lc_ctrl(tmp_path: Path): - run_ip_test(tmp_path, "lc_ctrl") - - -def test_cli_uart(tmp_path: Path): - run_ip_test(tmp_path, "uart") diff --git a/rdlexporter/README.md b/rdlexporter/README.md new file mode 100644 index 0000000..7f6cd15 --- /dev/null +++ b/rdlexporter/README.md @@ -0,0 +1,61 @@ +# rdl-exporter +A library to generate SystemRDL files from the Hierarchical Register Model. + +How to use it: +```sh +uv pip install rdlexporter +``` +Example: +```python +from rdlexporter import RdlExporter +from systemrdl import RDLCompiler, RDLImporter +from systemrdl.rdltypes import AccessType + +rdlc = RDLCompiler() + +imp = RDLImporter(rdlc) +imp.default_src_ref = None + +addrmap = imp.create_addrmap_definition("generic") + +field_en = imp.create_field_definition("EN") +field_en = imp.instantiate_field(field_en, "EN", 0, 1) +imp.assign_property(field_en, "reset", 0x00) +imp.assign_property(field_en, "swmod", value=True) +imp.assign_property(field_en, "desc", "Enable the ip") + +imp.assign_property(field_mode, "reset", 0x7) +imp.assign_property(field_mode, "desc", "Define the mode.") +imp.assign_property(field_mode, "sw", AccessType.rw) + +reg = imp.create_reg_definition("CTRL") +imp.add_child(reg, field_en) +imp.add_child(reg, field_mode) + +reg = imp.instantiate_reg(reg, "CTRL", 0x04, [4], 0x04) +imp.add_child(addrmap, reg) + +imp.register_root_component(addrmap) +RdlExporter(rdlc).export("./generic.rdl") +``` + +## Contributing +### How to run tests +```sh +cd rdlexporter +uv run pytest +``` + +### How to build the package and install it locally +Install dev dependencies +```sh +uv sync --all-extras +``` +Build package +```sh +uv build --all +``` +Install the package locally +```sh +uv pip install dist/rdlexporter-0.1.0-py3-none-any.whl +``` diff --git a/rdlexporter/pyproject.toml b/rdlexporter/pyproject.toml index f3454b2..dba1f48 100644 --- a/rdlexporter/pyproject.toml +++ b/rdlexporter/pyproject.toml @@ -4,30 +4,33 @@ version = "0.1.0" description = "Library to export rdl files" requires-python = ">=3.10" keywords = ["SystemRDL", "library", "exporter"] -dependencies = [] +readme = "README.md" +dependencies = [ + "peakrdl>=1.4.0", +] authors = [ { name = "lowRISC contributors"}, ] [project.urls] -Homepage = "https://github.com/lowrisc/benevisrdl/rdlexporter" -Issues = "https://github.com/lowrisc/benevisrdl/rdlexporter/issues" -Documentation = "https://github.com/lowrisc/benevisrdl/rdlexporter" +Homepage = "https://github.com/lowrisc/benevisrdl" +Issues = "https://github.com/lowrisc/benevisrdl/issues" +Documentation = "https://github.com/lowrisc/benevisrdl" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" -[tool.hatch.build.targets.wheel] -packages = ["src/rdlexporter"] -[tool.hatch.build.targets.sdist] -exclude = [ - "/.github", - "/tests", - "/*.pyc", - "/.pytest_cache", - "/.uv", - "/.venv", +[tool.pyright] +include = ["src"] +reportMissingImports = "error" +reportMissingTypeStubs = false +venv = ".venv" +executionEnvironments = [ + { root = "src" }, ] + +[tool.hatch.build.targets.wheel] +packages = ["src/rdlexporter"] diff --git a/rdlexporter/src/rdlexporter/__init__.py b/rdlexporter/src/rdlexporter/__init__.py index 5d6cac8..bcf6494 100644 --- a/rdlexporter/src/rdlexporter/__init__.py +++ b/rdlexporter/src/rdlexporter/__init__.py @@ -2,10 +2,10 @@ # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 +"""Init.""" + from .exporter import RdlExporter -__all__ = [ - "RdlExporter", -] +__all__ = ("RdlExporter",) __version__ = "0.1.0" diff --git a/rdlexporter/src/rdlexporter/exporter.py b/rdlexporter/src/rdlexporter/exporter.py index 8c85642..2930acf 100644 --- a/rdlexporter/src/rdlexporter/exporter.py +++ b/rdlexporter/src/rdlexporter/exporter.py @@ -2,19 +2,24 @@ # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 +"""Exports rdl files.""" + +from dataclasses import dataclass, field from pathlib import Path + from systemrdl import RDLCompiler -from systemrdl.rdltypes import AccessType, OnReadType, OnWriteType -from systemrdl.rdltypes.user_enum import UserEnumMeta -from systemrdl.ast.literals import StringLiteral, BoolLiteral, IntLiteral, BuiltinEnumLiteral from systemrdl.ast.cast import AssignmentCast +from systemrdl.ast.literals import BoolLiteral, BuiltinEnumLiteral, IntLiteral, StringLiteral from systemrdl.ast.references import InstRef -from systemrdl.component import Addrmap, Reg, Field, Mem, AddressableComponent -from dataclasses import dataclass, field +from systemrdl.component import AddressableComponent, Addrmap, Field, Mem, Reg +from systemrdl.rdltypes import AccessType, OnReadType, OnWriteType +from systemrdl.rdltypes.user_enum import UserEnumMeta @dataclass class RdlExporter: + """Exports rdl files from AST.""" + rdlc: RDLCompiler stream: str = "" indent_pos = 0 @@ -23,7 +28,7 @@ class RdlExporter: dynamic_assignment: dict[str, list[dict]] = field(default_factory=dict) ast_path: list[str] = field(default_factory=list) - def _raise_type_error(self, type_name): + def _raise_type_error(self, type_name: str) -> None: print(f"Error: Unsupported type: {type_name} at this level only supports") raise RuntimeError @@ -42,9 +47,9 @@ def _get_field_limits(self, field: Field) -> (int, int): def _get_offset(self, comp: AddressableComponent) -> str: if isinstance(comp.addr_offset, AssignmentCast): - return " @ 0x{:X}".format(comp.addr_offset.get_value()) + return f" @ 0x{comp.addr_offset.get_value():X}" if isinstance(comp.addr_offset, int): - return " @ 0x{:X}".format(comp.addr_offset) + return f" @ 0x{comp.addr_offset:X}" return "" def _get_register_array_dim(self, reg: Reg) -> int: @@ -92,7 +97,7 @@ def _emit_property(self, properties: dict) -> None: elif isinstance(obj, InstRef): # This should be emited at a higher scope indicated by `ref_root._scope_name`. ref = obj.get_value() - scope = ref.ref_root._scope_name or ref.ref_root.type_name + scope = ref.ref_root._scope_name or ref.ref_root.type_name # noqa: SLF001 self.dynamic_assignment.setdefault(scope.lower(), []).append( { "property": name, @@ -114,9 +119,9 @@ def _arrays(self, component: Reg) -> str: if len(component.array_dimensions) > 1: print("Error: Unsupported multidimentional arrays.") raise RuntimeError + dim = self._get_register_array_dim(component) - array_str = f"[{dim}]" - return array_str + return f"[{dim}]" def _emit_parameters(self, parameters: list) -> None: if not len(parameters): @@ -208,6 +213,7 @@ def _emit_addrmap(self, name: str, addrmap: Addrmap) -> None: self.ast_path.pop() def export(self, outfile: Path) -> None: + """Export the SystemRDL ast to an RDL file.""" self.ast_path.append(str(self.rdlc.root.inst_name)) for name, component in self.rdlc.root.comp_defs.items(): if isinstance(component, Addrmap): diff --git a/rdlexporter/tests/test_rdl-exporter.py b/rdlexporter/tests/test_exporter.py similarity index 83% rename from rdlexporter/tests/test_rdl-exporter.py rename to rdlexporter/tests/test_exporter.py index 415dbfd..3358303 100644 --- a/rdlexporter/tests/test_rdl-exporter.py +++ b/rdlexporter/tests/test_exporter.py @@ -2,30 +2,29 @@ # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 -import sys +"""Unittests.""" + from pathlib import Path -from systemrdl import RDLCompiler, RDLCompileError, RDLImporter -from systemrdl import rdltypes + +from systemrdl import RDLCompiler, RDLImporter, rdltypes +from systemrdl.ast.references import InstRef from systemrdl.core.parameter import Parameter from systemrdl.messages import FileSourceRef from systemrdl.rdltypes import AccessType, OnReadType, OnWriteType -from systemrdl.ast.references import InstRef + from rdlexporter import RdlExporter SNAPSHOTS_DIR = Path(__file__).parent / "snapshots" -def run_ip_test_from_file(tmp_path: Path, ip_block: str): +def _run_ip_test_from_file(tmp_path: Path, ip_block: str) -> None: input_rdl = SNAPSHOTS_DIR / f"{ip_block}.rdl" snapshot_file = input_rdl snapshot_content = snapshot_file.read_text(encoding="utf-8") output_file = tmp_path / f"{ip_block}.rdl" rdlc = RDLCompiler() - try: - rdlc.compile_file(input_rdl) - except RDLCompileError: - sys.exit(1) + rdlc.compile_file(input_rdl) # Include the user defined enums and properties. with output_file.open("w") as f: @@ -40,15 +39,18 @@ def run_ip_test_from_file(tmp_path: Path, ip_block: str): ) -def test_cli_uart_from_file(tmp_path: Path): - run_ip_test_from_file(tmp_path, "uart") +def test_cli_uart_from_file(tmp_path: Path) -> None: + """Test the uart.""" + _run_ip_test_from_file(tmp_path, "uart") -def test_cli_lc_ctrl_from_file(tmp_path: Path): - run_ip_test_from_file(tmp_path, "lc_ctrl") +def test_cli_lc_ctrl_from_file(tmp_path: Path) -> None: + """Test the lc_ctrl.""" + _run_ip_test_from_file(tmp_path, "lc_ctrl") -def test_importer(tmp_path: Path): +def test_importer(tmp_path: Path) -> None: + """Test with the SystemRDL importer.""" input_rdl = SNAPSHOTS_DIR / "generic.rdl" snapshot_file = input_rdl snapshot_content = snapshot_file.read_text(encoding="utf-8") @@ -74,13 +76,13 @@ def test_importer(tmp_path: Path): field_en = imp.create_field_definition("EN") field_en = imp.instantiate_field(field_en, "EN", 0, 1) imp.assign_property(field_en, "reset", 0x00) - imp.assign_property(field_en, "swmod", True) + imp.assign_property(field_en, "swmod", value=True) imp.assign_property(field_en, "desc", "Enable the ip") field_mode = imp.create_field_definition("MODE") field_mode = imp.instantiate_field(field_mode, "MODE", 2, 8) imp.assign_property(field_mode, "reset", 0x7) - imp.assign_property(field_mode, "swmod", False) + imp.assign_property(field_mode, "swmod", value=False) imp.assign_property(field_mode, "desc", "Define the mode.") imp.assign_property(field_mode, "sw", AccessType.rw) imp.assign_property(field_mode, "onread", OnReadType.rclr) @@ -105,7 +107,7 @@ def test_importer(tmp_path: Path): value = 0x56 param = Parameter(rdltypes.get_rdltype(value), "Width") - param._value = value + param._value = value # noqa: SLF001 addrmap.parameters.append(param) imp.register_root_component(addrmap) diff --git a/uv.lock b/uv.lock index 3e2816d..fbb9d69 100644 --- a/uv.lock +++ b/uv.lock @@ -18,21 +18,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/89/03/a851e84fcbb85214dc637b6378121ef9a0dd61b4c65264675d8a5c9b1ae7/antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8", size = 144462 }, ] -[[package]] -name = "anyio" -version = "4.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "idna" }, - { name = "sniffio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916 }, -] - [[package]] name = "backports-tarfile" version = "1.2.0" @@ -44,74 +29,38 @@ wheels = [ [[package]] name = "benevisrdl" -version = "0.0.0" +version = "0.1.0" source = { virtual = "." } -dependencies = [ - { name = "click" }, - { name = "isort" }, - { name = "jinja2" }, - { name = "peakrdl" }, - { name = "uv" }, - { name = "yapf" }, -] [package.optional-dependencies] ci = [ - { name = "build" }, - { name = "flake8" }, - { name = "hatch" }, - { name = "mypy" }, + { name = "pyright" }, { name = "pytest" }, { name = "ruff" }, { name = "twine" }, + { name = "uv-build" }, ] dev = [ - { name = "build" }, - { name = "hatch" }, { name = "pytest" }, { name = "twine" }, + { name = "uv-build" }, ] linting = [ - { name = "flake8" }, - { name = "mypy" }, + { name = "pyright" }, { name = "ruff" }, ] [package.metadata] requires-dist = [ { name = "benevisrdl", extras = ["linting", "dev"], marker = "extra == 'ci'" }, - { name = "build", marker = "extra == 'dev'", specifier = ">=1.2.2" }, - { name = "click", specifier = ">=8.2.1" }, - { name = "flake8", marker = "extra == 'linting'", specifier = "~=7.1" }, - { name = "hatch", marker = "extra == 'dev'", specifier = ">=1.4.1" }, - { name = "isort", specifier = "==5.10.1" }, - { name = "jinja2", specifier = ">=3.1.6" }, - { name = "mypy", marker = "extra == 'linting'", specifier = "==0.971" }, - { name = "peakrdl", specifier = ">=1.4.0" }, + { name = "pyright", marker = "extra == 'linting'", specifier = ">=1.1.403" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.4.1" }, { name = "ruff", marker = "extra == 'linting'", specifier = ">=0.9.6" }, { name = "twine", marker = "extra == 'dev'", specifier = ">=6.1.0" }, - { name = "uv", specifier = "==0.6.1" }, - { name = "yapf", specifier = "==0.32.0" }, + { name = "uv-build", marker = "extra == 'dev'", specifier = ">=0.8.4" }, ] provides-extras = ["linting", "dev", "ci"] -[[package]] -name = "build" -version = "1.2.2.post1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "os_name == 'nt'" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10.2'" }, - { name = "packaging" }, - { name = "pyproject-hooks" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7d/46/aeab111f8e06793e4f0e421fcad593d547fb8313b50990f31681ee2fb1ad/build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7", size = 46701 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/84/c2/80633736cd183ee4a62107413def345f7e6e3c01563dbca1417363cf957e/build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5", size = 22950 }, -] - [[package]] name = "certifi" version = "2025.7.14" @@ -130,8 +79,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/07/f44ca684db4e4f08a3fdc6eeb9a0d15dc6883efc7b8c90357fdbf74e186c/cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14", size = 182191 }, - { url = "https://files.pythonhosted.org/packages/08/fd/cc2fedbd887223f9f5d170c96e57cbf655df9831a6546c1727ae13fa977a/cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67", size = 178592 }, { url = "https://files.pythonhosted.org/packages/de/cc/4635c320081c78d6ffc2cab0a76025b691a91204f4aa317d568ff9280a2d/cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382", size = 426024 }, { url = "https://files.pythonhosted.org/packages/b6/7b/3b2b250f3aab91abe5f8a51ada1b717935fdaec53f790ad4100fe2ec64d1/cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702", size = 448188 }, { url = "https://files.pythonhosted.org/packages/d3/48/1b9283ebbf0ec065148d8de05d647a986c5f22586b18120020452fff8f5d/cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3", size = 455571 }, @@ -140,10 +87,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ab/a0/62f00bcb411332106c02b663b26f3545a9ef136f80d5df746c05878f8c4b/cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8", size = 461325 }, { url = "https://files.pythonhosted.org/packages/36/83/76127035ed2e7e27b0787604d99da630ac3123bfb02d8e80c633f218a11d/cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e", size = 438784 }, { url = "https://files.pythonhosted.org/packages/21/81/a6cd025db2f08ac88b901b745c163d884641909641f9b826e8cb87645942/cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be", size = 461564 }, - { url = "https://files.pythonhosted.org/packages/f8/fe/4d41c2f200c4a457933dbd98d3cf4e911870877bd94d9656cc0fcb390681/cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c", size = 171804 }, - { url = "https://files.pythonhosted.org/packages/d1/b6/0b0f5ab93b0df4acc49cae758c81fe4e5ef26c3ae2e10cc69249dfd8b3ab/cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15", size = 181299 }, - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, @@ -152,10 +95,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, @@ -163,10 +102,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, @@ -174,8 +109,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, ] [[package]] @@ -297,15 +230,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/6a/69fc67e5266bff68a91bcb81dff8fb0aba4d79a78521a08812048913e16f/cryptography-45.0.5-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:5aa1e32983d4443e310f726ee4b071ab7569f58eedfdd65e9675484a4eb67bd1", size = 4385593 }, ] -[[package]] -name = "distlib" -version = "0.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047 }, -] - [[package]] name = "docutils" version = "0.21.2" @@ -327,29 +251,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674 }, ] -[[package]] -name = "filelock" -version = "3.18.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, -] - -[[package]] -name = "flake8" -version = "7.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mccabe" }, - { name = "pycodestyle" }, - { name = "pyflakes" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9b/af/fbfe3c4b5a657d79e5c47a2827a362f9e1b763336a52f926126aa6dc7123/flake8-7.3.0.tar.gz", hash = "sha256:fe044858146b9fc69b551a4b490d69cf960fcb78ad1edcb84e7fbb1b4a8e3872", size = 48326 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl", hash = "sha256:b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e", size = 57922 }, -] - [[package]] name = "git-me-the-url" version = "2.1.0" @@ -383,98 +284,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1d/9a/4114a9057db2f1462d5c8f8390ab7383925fe1ac012eaa42402ad65c2963/GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110", size = 207599 }, ] -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 }, -] - -[[package]] -name = "hatch" -version = "1.14.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "hatchling" }, - { name = "httpx" }, - { name = "hyperlink" }, - { name = "keyring" }, - { name = "packaging" }, - { name = "pexpect" }, - { name = "platformdirs" }, - { name = "rich" }, - { name = "shellingham" }, - { name = "tomli-w" }, - { name = "tomlkit" }, - { name = "userpath" }, - { name = "uv" }, - { name = "virtualenv" }, - { name = "zstandard" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1f/43/c0b37db0e857a44ce5ffdb7e8a9b8fa6425d0b74dea698fafcd9bddb50d1/hatch-1.14.1.tar.gz", hash = "sha256:ca1aff788f8596b0dd1f8f8dfe776443d2724a86b1976fabaf087406ba3d0713", size = 5188180 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/40/19c0935bf9f25808541a0e3144ac459de696c5b6b6d4511a98d456c69604/hatch-1.14.1-py3-none-any.whl", hash = "sha256:39cdaa59e47ce0c5505d88a951f4324a9c5aafa17e4a877e2fde79b36ab66c21", size = 125770 }, -] - -[[package]] -name = "hatchling" -version = "1.27.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "packaging" }, - { name = "pathspec" }, - { name = "pluggy" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "trove-classifiers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8f/8a/cc1debe3514da292094f1c3a700e4ca25442489731ef7c0814358816bb03/hatchling-1.27.0.tar.gz", hash = "sha256:971c296d9819abb3811112fc52c7a9751c8d381898f36533bb16f9791e941fd6", size = 54983 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/08/e7/ae38d7a6dfba0533684e0b2136817d667588ae3ec984c1a4e5df5eb88482/hatchling-1.27.0-py3-none-any.whl", hash = "sha256:d3a2f3567c4f926ea39849cdf924c7e99e6686c9c8e288ae1037c8fa2a5d937b", size = 75794 }, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 }, -] - -[[package]] -name = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, -] - -[[package]] -name = "hyperlink" -version = "21.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/51/1947bd81d75af87e3bb9e34593a4cf118115a8feb451ce7a69044ef1412e/hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b", size = 140743 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4", size = 74638 }, -] - [[package]] name = "id" version = "1.5.0" @@ -517,15 +326,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, ] -[[package]] -name = "isort" -version = "5.10.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ab/e9/964cb0b2eedd80c92f5172f1f8ae0443781a9d461c1372a3ce5762489593/isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951", size = 174062 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/5b/f18e227df38b94b4ee30d2502fd531bebac23946a2497e5595067a561274/isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7", size = 103430 }, -] - [[package]] name = "jaraco-classes" version = "3.4.0" @@ -680,15 +480,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, ] -[[package]] -name = "mccabe" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/ff/0ffefdcac38932a54d2b5eed4e0ba8a408f215002cd178ad1df0f2806ff8/mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", size = 9658 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e", size = 7350 }, -] - [[package]] name = "mdurl" version = "0.1.2" @@ -707,34 +498,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl", hash = "sha256:d43980384673cb07d2f7d2d918c616b30c659c089ee23953f601d6609c67510e", size = 65278 }, ] -[[package]] -name = "mypy" -version = "0.971" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mypy-extensions" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/66/00f7f751140fe6953603fb0cd56dee0314842cfe358884ca3025589ca81c/mypy-0.971.tar.gz", hash = "sha256:40b0f21484238269ae6a57200c807d80debc6459d444c0489a102d7c6a75fa56", size = 2757982 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/97/ff71b0cdf61065db040ffe34ae88852d2a47de8b2b49c51608caf03771ed/mypy-0.971-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2899a3cbd394da157194f913a931edfd4be5f274a88041c9dc2d9cdcb1c315c", size = 18495630 }, - { url = "https://files.pythonhosted.org/packages/18/e1/d3e577229691dae4c8039cd87ef981482812ba7c5f5999fd67127af0f8a1/mypy-0.971-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98e02d56ebe93981c41211c05adb630d1d26c14195d04d95e49cd97dbc046dc5", size = 11062018 }, - { url = "https://files.pythonhosted.org/packages/f9/be/e5c50777159473c8dfb7cb512e62fbca19df4a6e9db711f17d77c14fb62b/mypy-0.971-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:19830b7dba7d5356d3e26e2427a2ec91c994cd92d983142cbd025ebe81d69cf3", size = 10017604 }, - { url = "https://files.pythonhosted.org/packages/f0/b7/d39405fb53e0ae99c26cba3c8ab50717eafb7aeb64beea6efbd42a17ef82/mypy-0.971-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02ef476f6dcb86e6f502ae39a16b93285fef97e7f1ff22932b657d1ef1f28655", size = 17645516 }, - { url = "https://files.pythonhosted.org/packages/9e/01/a81de921bc3efde879f6eab5ff4d4bb33b037581f78eccfa28a47105d0b3/mypy-0.971-cp310-cp310-win_amd64.whl", hash = "sha256:25c5750ba5609a0c7550b73a33deb314ecfb559c350bb050b655505e8aed4103", size = 8739572 }, - { url = "https://files.pythonhosted.org/packages/6c/c6/20dd5b70962af557101b2d3a7052f8298a3e94708b62bc5ad7ca713b59bb/mypy-0.971-py3-none-any.whl", hash = "sha256:0d054ef16b071149917085f51f89555a576e2618d5d9dd70bd6eea6410af3ac9", size = 2550912 }, -] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963 }, -] - [[package]] name = "nh3" version = "0.3.0" @@ -769,21 +532,21 @@ wheels = [ ] [[package]] -name = "packaging" -version = "25.0" +name = "nodeenv" +version = "1.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, ] [[package]] -name = "pathspec" -version = "0.12.1" +name = "packaging" +version = "25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469 }, ] [[package]] @@ -893,27 +656,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/04/2b/47e2a27147ae1117e9248e926a7d478b6b2e229b30fb2a0bca01870d5ebe/peakrdl-uvm-2.3.0.tar.gz", hash = "sha256:ec18a4fc87d0201fe03ebe0de259a6b7f22be3de1d6908f80bce1e1416bc9cf2", size = 23518 } -[[package]] -name = "pexpect" -version = "4.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ptyprocess" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, -] - -[[package]] -name = "platformdirs" -version = "4.3.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567 }, -] - [[package]] name = "pluggy" version = "1.6.0" @@ -923,24 +665,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, ] -[[package]] -name = "ptyprocess" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, -] - -[[package]] -name = "pycodestyle" -version = "2.14.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/e0/abfd2a0d2efe47670df87f3e3a0e2edda42f055053c85361f19c0e2c1ca8/pycodestyle-2.14.0.tar.gz", hash = "sha256:c4b5b517d278089ff9d0abdec919cd97262a3367449ea1c8b49b91529167b783", size = 39472 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594 }, -] - [[package]] name = "pycparser" version = "2.22" @@ -950,15 +674,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, ] -[[package]] -name = "pyflakes" -version = "3.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/45/dc/fd034dc20b4b264b3d015808458391acbf9df40b1e54750ef175d39180b1/pyflakes-3.4.0.tar.gz", hash = "sha256:b24f96fafb7d2ab0ec5075b7350b3d2d2218eab42003821c06344973d3ea2f58", size = 64669 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl", hash = "sha256:f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f", size = 63551 }, -] - [[package]] name = "pygments" version = "2.19.2" @@ -969,12 +684,16 @@ wheels = [ ] [[package]] -name = "pyproject-hooks" -version = "1.2.0" +name = "pyright" +version = "1.1.403" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228 } +dependencies = [ + { name = "nodeenv" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/f6/35f885264ff08c960b23d1542038d8da86971c5d8c955cfab195a4f672d7/pyright-1.1.403.tar.gz", hash = "sha256:3ab69b9f41c67fb5bbb4d7a36243256f0d549ed3608678d381d5f51863921104", size = 3913526 } wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216 }, + { url = "https://files.pythonhosted.org/packages/49/b6/b04e5c2f41a5ccad74a1a4759da41adb20b4bc9d59a5e08d29ba60084d07/pyright-1.1.403-py3-none-any.whl", hash = "sha256:c0eeca5aa76cbef3fcc271259bbd785753c7ad7bcac99a9162b4c4c7daed23b3", size = 5684504 }, ] [[package]] @@ -1020,11 +739,29 @@ wheels = [ name = "rdl2ot" version = "0.1.0" source = { editable = "rdl2ot" } +dependencies = [ + { name = "click" }, + { name = "jinja2" }, + { name = "peakrdl" }, +] + +[package.metadata] +requires-dist = [ + { name = "click", specifier = ">=8.2.1" }, + { name = "jinja2", specifier = ">=3.1.6" }, + { name = "peakrdl", specifier = ">=1.4.0" }, +] [[package]] name = "rdlexporter" version = "0.1.0" source = { editable = "rdlexporter" } +dependencies = [ + { name = "peakrdl" }, +] + +[package.metadata] +requires-dist = [{ name = "peakrdl", specifier = ">=1.4.0" }] [[package]] name = "readme-renderer" @@ -1128,15 +865,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", size = 15221 }, ] -[[package]] -name = "shellingham" -version = "1.5.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, -] - [[package]] name = "smmap" version = "5.0.2" @@ -1146,15 +874,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303 }, ] -[[package]] -name = "sniffio" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, -] - [[package]] name = "systemrdl-compiler" version = "1.29.3" @@ -1216,33 +935,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, ] -[[package]] -name = "tomli-w" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/19/75/241269d1da26b624c0d5e110e8149093c759b7a286138f4efd61a60e75fe/tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021", size = 7184 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/18/c86eb8e0202e32dd3df50d43d7ff9854f8e0603945ff398974c1d91ac1ef/tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90", size = 6675 }, -] - -[[package]] -name = "tomlkit" -version = "0.13.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901 }, -] - -[[package]] -name = "trove-classifiers" -version = "2025.5.9.12" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/38/04/1cd43f72c241fedcf0d9a18d0783953ee301eac9e5d9db1df0f0f089d9af/trove_classifiers-2025.5.9.12.tar.gz", hash = "sha256:7ca7c8a7a76e2cd314468c677c69d12cc2357711fcab4a60f87994c1589e5cb5", size = 16940 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/92/ef/c6deb083748be3bcad6f471b6ae983950c161890bf5ae1b2af80cc56c530/trove_classifiers-2025.5.9.12-py3-none-any.whl", hash = "sha256:e381c05537adac78881c8fa345fd0e9970159f4e4a04fcc42cfd3129cca640ce", size = 14119 }, -] - [[package]] name = "twine" version = "6.1.0" @@ -1282,63 +974,29 @@ wheels = [ ] [[package]] -name = "userpath" -version = "1.9.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d5/b7/30753098208505d7ff9be5b3a32112fb8a4cb3ddfccbbb7ba9973f2e29ff/userpath-1.9.2.tar.gz", hash = "sha256:6c52288dab069257cc831846d15d48133522455d4677ee69a9781f11dbefd815", size = 11140 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/99/3ec6335ded5b88c2f7ed25c56ffd952546f7ed007ffb1e1539dc3b57015a/userpath-1.9.2-py3-none-any.whl", hash = "sha256:2cbf01a23d655a1ff8fc166dfb78da1b641d1ceabf0fe5f970767d380b14e89d", size = 9065 }, -] - -[[package]] -name = "uv" -version = "0.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/23/5943c4deef095a3200ba6769a6261d6a1f4f882d4e7acf3bfc3748be0e83/uv-0.6.1.tar.gz", hash = "sha256:7b371891dc6fd174bb3bc3889ff42aa4e07e59fb970b47aa980d8b403e3457a9", size = 2900879 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/a8/30c112d27991b3d84d90c32a2015cebf756f7079917981c6c4694036f310/uv-0.6.1-py3-none-linux_armv6l.whl", hash = "sha256:f9e3a59deb1dfcab1f62ba7585bcd066d780177ea2f7de7f382921d76c580323", size = 15482693 }, - { url = "https://files.pythonhosted.org/packages/65/ae/883cf40b22e043ec861fa0a86c770a27720018b1a1cb4ffbe4b681efe678/uv-0.6.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e50e5209d86255a92bfb453bcd4399f6f47a7cfbb6d1ca6facf83edf97d10805", size = 15650522 }, - { url = "https://files.pythonhosted.org/packages/df/b4/e578a93423f05313fe4be58b5239debc7e4b3675209e5f6380e01cf8a031/uv-0.6.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:be98d181a1a72b1ee7126c3de926eb8d71f5391fd0482371616b46ddb49366e6", size = 14535024 }, - { url = "https://files.pythonhosted.org/packages/c4/bf/661205cb9e2c951c6a2724c1e3a48c17b37e588048188c745a823e78de83/uv-0.6.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:e72c31fe02f2e5856d515b12788ff6d7bfd987bfe4e16599682cb2352a7a2cc0", size = 14995266 }, - { url = "https://files.pythonhosted.org/packages/b3/4e/fb9be5d7b376769f2e30c02e15197e70bab63cf4672ecb628b7f61308ed2/uv-0.6.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:005b2dcca113a9f1537583ada24752287b1ddf831f1add9a7099fac259bf269c", size = 15243176 }, - { url = "https://files.pythonhosted.org/packages/13/04/3e3a2915f9255b121fd5aea1e3ab1e662be966fa08736a3246413084a0c5/uv-0.6.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b52f9e35858c30bc866d07c595d007c6ec713e195174ca9ec2b1806c2c9a8f22", size = 15965307 }, - { url = "https://files.pythonhosted.org/packages/dc/15/3cf0b18b5beb5610740cfdf98d15f41fc527736fff1fc497bcd64fb0cf24/uv-0.6.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:01fa8449ab1d96951711c3073a7d93ae2ccd333cc2141fc30873e720e9aeea34", size = 16949163 }, - { url = "https://files.pythonhosted.org/packages/93/9b/24f50a7d6066d00309c9fc45abba75b8169f0db99fded2437c52cbfad824/uv-0.6.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6cd4ddf03cce1e963120dbb0b1168ba6c6d4d462019947fdecc64b2596aaae6", size = 16660405 }, - { url = "https://files.pythonhosted.org/packages/87/86/c6a13e2bae4ffbd7237cc464e961ef7c99d843d1212c8a14ed8dcc0f0e58/uv-0.6.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e550f08e538260b6d9caae9a4e1999de04f03487f11b6fcdc718d1ae2ba1a5e9", size = 21041049 }, - { url = "https://files.pythonhosted.org/packages/b0/0e/0ce260278b3a311131dc05315745544c4ddf6b1d7ac640aeb4212476312e/uv-0.6.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62ef67f173ced2e1beb5e578db08e0e057ee5f21e0d74f09b27f7b43b143fe2a", size = 16300666 }, - { url = "https://files.pythonhosted.org/packages/dc/ae/c17a8c41ccd152161ceb77f3c85c7d8e0c8db8637752803461d5113f74b2/uv-0.6.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:c13bb592a1b0f1bcbaf3235f634e7a35bd9840ca497020792fbcc96185174fb4", size = 15268966 }, - { url = "https://files.pythonhosted.org/packages/8f/7e/cc283bd1cd9239bfe94b49db69cf7a0ba310231c2cab8a326885d5bc6684/uv-0.6.1-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:183ee2ec50197e584d24421966acf083cf5e9048489eebcb9ee7532d4ecf65d1", size = 15219571 }, - { url = "https://files.pythonhosted.org/packages/24/f0/952efdc68930f341d419def9dcd5a939fb95d5d76a497693988eba7ceb93/uv-0.6.1-py3-none-musllinux_1_1_i686.whl", hash = "sha256:636c4570e5e39522ba2b8531fbcb5cddcc3fd74c8e733039b9a3ca29693f6e26", size = 15589726 }, - { url = "https://files.pythonhosted.org/packages/e9/74/2b9f9b774c7573689e7f34e4834b1b643caf8aaa47d1a1c2067fcb8da24c/uv-0.6.1-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:d8f21240fbcff0d27a38ee04348a62ee2e25c3ebd4741b18a6bd3dd6891eec5a", size = 16397687 }, - { url = "https://files.pythonhosted.org/packages/c3/64/45d2d100cb66f7750ca555856cddf28d98f8670c619889bef3973e3a46ac/uv-0.6.1-py3-none-win32.whl", hash = "sha256:1876319693e52e15ff72b17cb06a3036cd659d47eeda52e82867017c5a09b6b3", size = 15602366 }, - { url = "https://files.pythonhosted.org/packages/fd/ce/7002f0ca79f440f31c2cc393fcb94109b1d48c714d5ff63bbfedd92b3b50/uv-0.6.1-py3-none-win_amd64.whl", hash = "sha256:e5ba927dcbb90d241acbd8ac6181ef104269875f8e4d4fb69286cb356a173282", size = 16954542 }, - { url = "https://files.pythonhosted.org/packages/ac/7f/2888fa3155789bd7fadbe89b372afeb4e1ebb304905839578d1871dcf6f3/uv-0.6.1-py3-none-win_arm64.whl", hash = "sha256:8bd37eb73cb8b7f6bc862c27b9c79ef3c4f809775f3c62f3e8ba6872bf211c22", size = 15826495 }, -] - -[[package]] -name = "virtualenv" -version = "20.32.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "distlib" }, - { name = "filelock" }, - { name = "platformdirs" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a9/96/0834f30fa08dca3738614e6a9d42752b6420ee94e58971d702118f7cfd30/virtualenv-20.32.0.tar.gz", hash = "sha256:886bf75cadfdc964674e6e33eb74d787dff31ca314ceace03ca5810620f4ecf0", size = 6076970 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/c6/f8f28009920a736d0df434b52e9feebfb4d702ba942f15338cb4a83eafc1/virtualenv-20.32.0-py3-none-any.whl", hash = "sha256:2c310aecb62e5aa1b06103ed7c2977b81e042695de2697d01017ff0f1034af56", size = 6057761 }, -] - -[[package]] -name = "yapf" -version = "0.32.0" +name = "uv-build" +version = "0.8.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c2/cd/d0d1e95b8d78b8097d90ca97af92f4af7fb2e867262a2b6e37d6f48e612a/yapf-0.32.0.tar.gz", hash = "sha256:a3f5085d37ef7e3e004c4ba9f9b3e40c54ff1901cd111f05145ae313a7c67d1b", size = 194820 } +sdist = { url = "https://files.pythonhosted.org/packages/73/00/aa2f7dc1b9dfb5fac808bfa050c96058cf3c27e78e0cfc6fe050c6ab2083/uv_build-0.8.4.tar.gz", hash = "sha256:2b22a22fa4eadad5bf97a21643124b604515442836e99f036619059556220f3f", size = 318914 } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/88/843c2e68f18a5879b4fbf37cb99fbabe1ffc4343b2e63191c8462235c008/yapf-0.32.0-py2.py3-none-any.whl", hash = "sha256:8fea849025584e486fd06d6ba2bed717f396080fd3cc236ba10cb97c4c51cf32", size = 190236 }, + { url = "https://files.pythonhosted.org/packages/60/2d/d1f33a9ed9cf0d90cf0c0e391c65f46c02c2f84845b80012270225ad3631/uv_build-0.8.4-py3-none-linux_armv6l.whl", hash = "sha256:30ec4432e22ba44784a336a9a851584bed13125a7510cbf8891e8a6fc33e4c8b", size = 1320604 }, + { url = "https://files.pythonhosted.org/packages/a9/2e/1605c68c1348a1bcc27101707e914fde1b5fc1c3ea033f80d24a01c3b2e9/uv_build-0.8.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3e85a9d01f6fb3423d4c144aa2ab518657d395e2bf1daaa1317e17db90c2e998", size = 1298053 }, + { url = "https://files.pythonhosted.org/packages/86/e0/a3272227efc9ef4ef387a989b402cf55e9e04b5c6e159cc43e2dcf70cf01/uv_build-0.8.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a3ce83ebf17d6aea0a457b31b3ca493e115c590ce353b509f8a06a6747b50c12", size = 1176660 }, + { url = "https://files.pythonhosted.org/packages/bd/04/b3fc39c76cf669c751b466c327ab12b2dcdf6e26d7707fd0b969031c957a/uv_build-0.8.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:171aee6b8ba18e4ddef7a49abf23adaaebe6058b7773e3167d327e62ca567c6b", size = 1364913 }, + { url = "https://files.pythonhosted.org/packages/0b/76/8d2ff6fe3bae9cc78f9fbdacea0e7f5fa8ef886710d9e2ea1de22ff58a84/uv_build-0.8.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:627b7b50beccbc5a9702ff98bf92a1910213e04bf9ca3df11d2260738299e9b3", size = 1269384 }, + { url = "https://files.pythonhosted.org/packages/77/48/14fc6005d149a79610f1801253d9b74003b1a6ec95b8b985d8fef3c97eb4/uv_build-0.8.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbc9be1884e8085f4d0850e5c41527865197c8a7b3293c85f1f2285bf8e288b9", size = 1420114 }, + { url = "https://files.pythonhosted.org/packages/a5/bf/e5f152aa48748f52131f675ae68370e51ccf0da155545b741667dd264b70/uv_build-0.8.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:988e79a577c3f7b1c43106297ea08d231ba2ca21929919eee675f15163d3d491", size = 1565994 }, + { url = "https://files.pythonhosted.org/packages/9b/2a/49a891f01eda31c2c8792a2fed4031ad4bf5a95a2ac0cb5e6e0d2cbe1ef5/uv_build-0.8.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8adec70139a87ce09922c30a3e86720aaac1b93a33aff3c44ce46930ff3cd044", size = 1472298 }, + { url = "https://files.pythonhosted.org/packages/43/91/ca789e93b87e27fd3e9efe22705aec86d0012b5a4848623213195d872d5f/uv_build-0.8.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24a677c2d29bd8bce2798774b1f80b917fead153b109cd97aac4aa20fa522222", size = 1413370 }, + { url = "https://files.pythonhosted.org/packages/a4/53/cbd777e4881e7c13ebef427d80c9e2fdcd84f024f24081a5504e598f0ef6/uv_build-0.8.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c8450a7152b8c98abfc39bc4a3d746b3537c100a54b0dd341f7fd8f9e25ca1a", size = 1420861 }, + { url = "https://files.pythonhosted.org/packages/8d/3e/edb3259054b55da45f97d0977702c92ee8f496575a1937234e34286e06de/uv_build-0.8.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:da1f0eaad220d6bb57d44855b25822aabe17c6fad7f3f168439dfb6c711b6509", size = 1357633 }, + { url = "https://files.pythonhosted.org/packages/0d/58/43f01234e330e0ed35576f611c0dffee43047efd2b7d16e300527fda3798/uv_build-0.8.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:b2203e5d86e8e99d7358ee6bd2f34ba041a582ec298960159a6428ff7fb07145", size = 1373917 }, + { url = "https://files.pythonhosted.org/packages/c8/d4/ece9d6cb373692eb9365a4a0c832082e02c2664bc46a55d21a7ccf3d0d10/uv_build-0.8.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:517560d81d1a3b1f38a00824db2d2312897d0499049c0ad77826f6f60f884f6b", size = 1291655 }, + { url = "https://files.pythonhosted.org/packages/3b/af/e96fc2ebc2d48da45ce68f6e8b62d22527f77bf86b8b3ca612af724e966e/uv_build-0.8.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:128ebb19f6c8e4c43516c32da8bfcdda9448a9fc4408b6fcc0b228a8fd1250a0", size = 1383805 }, + { url = "https://files.pythonhosted.org/packages/55/f7/26e093456e941a5258bed2ee9e2d60386276610451fc416d04ead4432bb0/uv_build-0.8.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:6706ce5c076b73bc869a616b3d00a3f96a939568e82cb80956e528d6960cf708", size = 1467712 }, + { url = "https://files.pythonhosted.org/packages/13/60/6092daaa2eea19ea9f05c000d1bf7ea35902aaa0a750a76700a06c61396d/uv_build-0.8.4-py3-none-win32.whl", hash = "sha256:a17ad996ba94e65e73b89e54bf8d7482593f7e71b52bfbda2d063e6742d3251a", size = 1252535 }, + { url = "https://files.pythonhosted.org/packages/67/dd/4125162d80946d8269a50f1dab74d1861d00f3e3e6395008f4950e7df210/uv_build-0.8.4-py3-none-win_amd64.whl", hash = "sha256:6cb700ee4c7ee0bdae17b22d84406dc8d7186a18a47735a2ca744d9b2372ffb3", size = 1333169 }, + { url = "https://files.pythonhosted.org/packages/5f/8a/14bd37db2e6be79e17b492ff02a17bf4419963f262718e1b7eb343747b7a/uv_build-0.8.4-py3-none-win_arm64.whl", hash = "sha256:a08e5daed2606bdabefdfb318a43f4f7efb07828f33a5619c098fc2e86fcd466", size = 1238929 }, ] [[package]] @@ -1349,78 +1007,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50e wheels = [ { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276 }, ] - -[[package]] -name = "zstandard" -version = "0.23.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation == 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ed/f6/2ac0287b442160a89d726b17a9184a4c615bb5237db763791a7fd16d9df1/zstandard-0.23.0.tar.gz", hash = "sha256:b2d8c62d08e7255f68f7a740bae85b3c9b8e5466baa9cbf7f57f1cde0ac6bc09", size = 681701 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/55/bd0487e86679db1823fc9ee0d8c9c78ae2413d34c0b461193b5f4c31d22f/zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9", size = 788701 }, - { url = "https://files.pythonhosted.org/packages/e1/8a/ccb516b684f3ad987dfee27570d635822e3038645b1a950c5e8022df1145/zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880", size = 633678 }, - { url = "https://files.pythonhosted.org/packages/12/89/75e633d0611c028e0d9af6df199423bf43f54bea5007e6718ab7132e234c/zstandard-0.23.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77da4c6bfa20dd5ea25cbf12c76f181a8e8cd7ea231c673828d0386b1740b8dc", size = 4941098 }, - { url = "https://files.pythonhosted.org/packages/4a/7a/bd7f6a21802de358b63f1ee636ab823711c25ce043a3e9f043b4fcb5ba32/zstandard-0.23.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2170c7e0367dde86a2647ed5b6f57394ea7f53545746104c6b09fc1f4223573", size = 5308798 }, - { url = "https://files.pythonhosted.org/packages/79/3b/775f851a4a65013e88ca559c8ae42ac1352db6fcd96b028d0df4d7d1d7b4/zstandard-0.23.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c16842b846a8d2a145223f520b7e18b57c8f476924bda92aeee3a88d11cfc391", size = 5341840 }, - { url = "https://files.pythonhosted.org/packages/09/4f/0cc49570141dd72d4d95dd6fcf09328d1b702c47a6ec12fbed3b8aed18a5/zstandard-0.23.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:157e89ceb4054029a289fb504c98c6a9fe8010f1680de0201b3eb5dc20aa6d9e", size = 5440337 }, - { url = "https://files.pythonhosted.org/packages/e7/7c/aaa7cd27148bae2dc095191529c0570d16058c54c4597a7d118de4b21676/zstandard-0.23.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:203d236f4c94cd8379d1ea61db2fce20730b4c38d7f1c34506a31b34edc87bdd", size = 4861182 }, - { url = "https://files.pythonhosted.org/packages/ac/eb/4b58b5c071d177f7dc027129d20bd2a44161faca6592a67f8fcb0b88b3ae/zstandard-0.23.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dc5d1a49d3f8262be192589a4b72f0d03b72dcf46c51ad5852a4fdc67be7b9e4", size = 4932936 }, - { url = "https://files.pythonhosted.org/packages/44/f9/21a5fb9bb7c9a274b05ad700a82ad22ce82f7ef0f485980a1e98ed6e8c5f/zstandard-0.23.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:752bf8a74412b9892f4e5b58f2f890a039f57037f52c89a740757ebd807f33ea", size = 5464705 }, - { url = "https://files.pythonhosted.org/packages/49/74/b7b3e61db3f88632776b78b1db597af3f44c91ce17d533e14a25ce6a2816/zstandard-0.23.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80080816b4f52a9d886e67f1f96912891074903238fe54f2de8b786f86baded2", size = 4857882 }, - { url = "https://files.pythonhosted.org/packages/4a/7f/d8eb1cb123d8e4c541d4465167080bec88481ab54cd0b31eb4013ba04b95/zstandard-0.23.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:84433dddea68571a6d6bd4fbf8ff398236031149116a7fff6f777ff95cad3df9", size = 4697672 }, - { url = "https://files.pythonhosted.org/packages/5e/05/f7dccdf3d121309b60342da454d3e706453a31073e2c4dac8e1581861e44/zstandard-0.23.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ab19a2d91963ed9e42b4e8d77cd847ae8381576585bad79dbd0a8837a9f6620a", size = 5206043 }, - { url = "https://files.pythonhosted.org/packages/86/9d/3677a02e172dccd8dd3a941307621c0cbd7691d77cb435ac3c75ab6a3105/zstandard-0.23.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:59556bf80a7094d0cfb9f5e50bb2db27fefb75d5138bb16fb052b61b0e0eeeb0", size = 5667390 }, - { url = "https://files.pythonhosted.org/packages/41/7e/0012a02458e74a7ba122cd9cafe491facc602c9a17f590367da369929498/zstandard-0.23.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:27d3ef2252d2e62476389ca8f9b0cf2bbafb082a3b6bfe9d90cbcbb5529ecf7c", size = 5198901 }, - { url = "https://files.pythonhosted.org/packages/65/3a/8f715b97bd7bcfc7342d8adcd99a026cb2fb550e44866a3b6c348e1b0f02/zstandard-0.23.0-cp310-cp310-win32.whl", hash = "sha256:5d41d5e025f1e0bccae4928981e71b2334c60f580bdc8345f824e7c0a4c2a813", size = 430596 }, - { url = "https://files.pythonhosted.org/packages/19/b7/b2b9eca5e5a01111e4fe8a8ffb56bdcdf56b12448a24effe6cfe4a252034/zstandard-0.23.0-cp310-cp310-win_amd64.whl", hash = "sha256:519fbf169dfac1222a76ba8861ef4ac7f0530c35dd79ba5727014613f91613d4", size = 495498 }, - { url = "https://files.pythonhosted.org/packages/9e/40/f67e7d2c25a0e2dc1744dd781110b0b60306657f8696cafb7ad7579469bd/zstandard-0.23.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:34895a41273ad33347b2fc70e1bff4240556de3c46c6ea430a7ed91f9042aa4e", size = 788699 }, - { url = "https://files.pythonhosted.org/packages/e8/46/66d5b55f4d737dd6ab75851b224abf0afe5774976fe511a54d2eb9063a41/zstandard-0.23.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:77ea385f7dd5b5676d7fd943292ffa18fbf5c72ba98f7d09fc1fb9e819b34c23", size = 633681 }, - { url = "https://files.pythonhosted.org/packages/63/b6/677e65c095d8e12b66b8f862b069bcf1f1d781b9c9c6f12eb55000d57583/zstandard-0.23.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:983b6efd649723474f29ed42e1467f90a35a74793437d0bc64a5bf482bedfa0a", size = 4944328 }, - { url = "https://files.pythonhosted.org/packages/59/cc/e76acb4c42afa05a9d20827116d1f9287e9c32b7ad58cc3af0721ce2b481/zstandard-0.23.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80a539906390591dd39ebb8d773771dc4db82ace6372c4d41e2d293f8e32b8db", size = 5311955 }, - { url = "https://files.pythonhosted.org/packages/78/e4/644b8075f18fc7f632130c32e8f36f6dc1b93065bf2dd87f03223b187f26/zstandard-0.23.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:445e4cb5048b04e90ce96a79b4b63140e3f4ab5f662321975679b5f6360b90e2", size = 5344944 }, - { url = "https://files.pythonhosted.org/packages/76/3f/dbafccf19cfeca25bbabf6f2dd81796b7218f768ec400f043edc767015a6/zstandard-0.23.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd30d9c67d13d891f2360b2a120186729c111238ac63b43dbd37a5a40670b8ca", size = 5442927 }, - { url = "https://files.pythonhosted.org/packages/0c/c3/d24a01a19b6733b9f218e94d1a87c477d523237e07f94899e1c10f6fd06c/zstandard-0.23.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d20fd853fbb5807c8e84c136c278827b6167ded66c72ec6f9a14b863d809211c", size = 4864910 }, - { url = "https://files.pythonhosted.org/packages/1c/a9/cf8f78ead4597264f7618d0875be01f9bc23c9d1d11afb6d225b867cb423/zstandard-0.23.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed1708dbf4d2e3a1c5c69110ba2b4eb6678262028afd6c6fbcc5a8dac9cda68e", size = 4935544 }, - { url = "https://files.pythonhosted.org/packages/2c/96/8af1e3731b67965fb995a940c04a2c20997a7b3b14826b9d1301cf160879/zstandard-0.23.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:be9b5b8659dff1f913039c2feee1aca499cfbc19e98fa12bc85e037c17ec6ca5", size = 5467094 }, - { url = "https://files.pythonhosted.org/packages/ff/57/43ea9df642c636cb79f88a13ab07d92d88d3bfe3e550b55a25a07a26d878/zstandard-0.23.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:65308f4b4890aa12d9b6ad9f2844b7ee42c7f7a4fd3390425b242ffc57498f48", size = 4860440 }, - { url = "https://files.pythonhosted.org/packages/46/37/edb78f33c7f44f806525f27baa300341918fd4c4af9472fbc2c3094be2e8/zstandard-0.23.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98da17ce9cbf3bfe4617e836d561e433f871129e3a7ac16d6ef4c680f13a839c", size = 4700091 }, - { url = "https://files.pythonhosted.org/packages/c1/f1/454ac3962671a754f3cb49242472df5c2cced4eb959ae203a377b45b1a3c/zstandard-0.23.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8ed7d27cb56b3e058d3cf684d7200703bcae623e1dcc06ed1e18ecda39fee003", size = 5208682 }, - { url = "https://files.pythonhosted.org/packages/85/b2/1734b0fff1634390b1b887202d557d2dd542de84a4c155c258cf75da4773/zstandard-0.23.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:b69bb4f51daf461b15e7b3db033160937d3ff88303a7bc808c67bbc1eaf98c78", size = 5669707 }, - { url = "https://files.pythonhosted.org/packages/52/5a/87d6971f0997c4b9b09c495bf92189fb63de86a83cadc4977dc19735f652/zstandard-0.23.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:034b88913ecc1b097f528e42b539453fa82c3557e414b3de9d5632c80439a473", size = 5201792 }, - { url = "https://files.pythonhosted.org/packages/79/02/6f6a42cc84459d399bd1a4e1adfc78d4dfe45e56d05b072008d10040e13b/zstandard-0.23.0-cp311-cp311-win32.whl", hash = "sha256:f2d4380bf5f62daabd7b751ea2339c1a21d1c9463f1feb7fc2bdcea2c29c3160", size = 430586 }, - { url = "https://files.pythonhosted.org/packages/be/a2/4272175d47c623ff78196f3c10e9dc7045c1b9caf3735bf041e65271eca4/zstandard-0.23.0-cp311-cp311-win_amd64.whl", hash = "sha256:62136da96a973bd2557f06ddd4e8e807f9e13cbb0bfb9cc06cfe6d98ea90dfe0", size = 495420 }, - { url = "https://files.pythonhosted.org/packages/7b/83/f23338c963bd9de687d47bf32efe9fd30164e722ba27fb59df33e6b1719b/zstandard-0.23.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b4567955a6bc1b20e9c31612e615af6b53733491aeaa19a6b3b37f3b65477094", size = 788713 }, - { url = "https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8", size = 633459 }, - { url = "https://files.pythonhosted.org/packages/26/af/36d89aae0c1f95a0a98e50711bc5d92c144939efc1f81a2fcd3e78d7f4c1/zstandard-0.23.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0e166f698c5a3e914947388c162be2583e0c638a4703fc6a543e23a88dea3c1", size = 4945707 }, - { url = "https://files.pythonhosted.org/packages/cd/2e/2051f5c772f4dfc0aae3741d5fc72c3dcfe3aaeb461cc231668a4db1ce14/zstandard-0.23.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a289832e520c6bd4dcaad68e944b86da3bad0d339ef7989fb7e88f92e96072", size = 5306545 }, - { url = "https://files.pythonhosted.org/packages/0a/9e/a11c97b087f89cab030fa71206963090d2fecd8eb83e67bb8f3ffb84c024/zstandard-0.23.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d50d31bfedd53a928fed6707b15a8dbeef011bb6366297cc435accc888b27c20", size = 5337533 }, - { url = "https://files.pythonhosted.org/packages/fc/79/edeb217c57fe1bf16d890aa91a1c2c96b28c07b46afed54a5dcf310c3f6f/zstandard-0.23.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72c68dda124a1a138340fb62fa21b9bf4848437d9ca60bd35db36f2d3345f373", size = 5436510 }, - { url = "https://files.pythonhosted.org/packages/81/4f/c21383d97cb7a422ddf1ae824b53ce4b51063d0eeb2afa757eb40804a8ef/zstandard-0.23.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53dd9d5e3d29f95acd5de6802e909ada8d8d8cfa37a3ac64836f3bc4bc5512db", size = 4859973 }, - { url = "https://files.pythonhosted.org/packages/ab/15/08d22e87753304405ccac8be2493a495f529edd81d39a0870621462276ef/zstandard-0.23.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6a41c120c3dbc0d81a8e8adc73312d668cd34acd7725f036992b1b72d22c1772", size = 4936968 }, - { url = "https://files.pythonhosted.org/packages/eb/fa/f3670a597949fe7dcf38119a39f7da49a8a84a6f0b1a2e46b2f71a0ab83f/zstandard-0.23.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:40b33d93c6eddf02d2c19f5773196068d875c41ca25730e8288e9b672897c105", size = 5467179 }, - { url = "https://files.pythonhosted.org/packages/4e/a9/dad2ab22020211e380adc477a1dbf9f109b1f8d94c614944843e20dc2a99/zstandard-0.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9206649ec587e6b02bd124fb7799b86cddec350f6f6c14bc82a2b70183e708ba", size = 4848577 }, - { url = "https://files.pythonhosted.org/packages/08/03/dd28b4484b0770f1e23478413e01bee476ae8227bbc81561f9c329e12564/zstandard-0.23.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76e79bc28a65f467e0409098fa2c4376931fd3207fbeb6b956c7c476d53746dd", size = 4693899 }, - { url = "https://files.pythonhosted.org/packages/2b/64/3da7497eb635d025841e958bcd66a86117ae320c3b14b0ae86e9e8627518/zstandard-0.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:66b689c107857eceabf2cf3d3fc699c3c0fe8ccd18df2219d978c0283e4c508a", size = 5199964 }, - { url = "https://files.pythonhosted.org/packages/43/a4/d82decbab158a0e8a6ebb7fc98bc4d903266bce85b6e9aaedea1d288338c/zstandard-0.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c236e635582742fee16603042553d276cca506e824fa2e6489db04039521e90", size = 5655398 }, - { url = "https://files.pythonhosted.org/packages/f2/61/ac78a1263bc83a5cf29e7458b77a568eda5a8f81980691bbc6eb6a0d45cc/zstandard-0.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a8fffdbd9d1408006baaf02f1068d7dd1f016c6bcb7538682622c556e7b68e35", size = 5191313 }, - { url = "https://files.pythonhosted.org/packages/e7/54/967c478314e16af5baf849b6ee9d6ea724ae5b100eb506011f045d3d4e16/zstandard-0.23.0-cp312-cp312-win32.whl", hash = "sha256:dc1d33abb8a0d754ea4763bad944fd965d3d95b5baef6b121c0c9013eaf1907d", size = 430877 }, - { url = "https://files.pythonhosted.org/packages/75/37/872d74bd7739639c4553bf94c84af7d54d8211b626b352bc57f0fd8d1e3f/zstandard-0.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:64585e1dba664dc67c7cdabd56c1e5685233fbb1fc1966cfba2a340ec0dfff7b", size = 495595 }, - { url = "https://files.pythonhosted.org/packages/80/f1/8386f3f7c10261fe85fbc2c012fdb3d4db793b921c9abcc995d8da1b7a80/zstandard-0.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:576856e8594e6649aee06ddbfc738fec6a834f7c85bf7cadd1c53d4a58186ef9", size = 788975 }, - { url = "https://files.pythonhosted.org/packages/16/e8/cbf01077550b3e5dc86089035ff8f6fbbb312bc0983757c2d1117ebba242/zstandard-0.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38302b78a850ff82656beaddeb0bb989a0322a8bbb1bf1ab10c17506681d772a", size = 633448 }, - { url = "https://files.pythonhosted.org/packages/06/27/4a1b4c267c29a464a161aeb2589aff212b4db653a1d96bffe3598f3f0d22/zstandard-0.23.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2240ddc86b74966c34554c49d00eaafa8200a18d3a5b6ffbf7da63b11d74ee2", size = 4945269 }, - { url = "https://files.pythonhosted.org/packages/7c/64/d99261cc57afd9ae65b707e38045ed8269fbdae73544fd2e4a4d50d0ed83/zstandard-0.23.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ef230a8fd217a2015bc91b74f6b3b7d6522ba48be29ad4ea0ca3a3775bf7dd5", size = 5306228 }, - { url = "https://files.pythonhosted.org/packages/7a/cf/27b74c6f22541f0263016a0fd6369b1b7818941de639215c84e4e94b2a1c/zstandard-0.23.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:774d45b1fac1461f48698a9d4b5fa19a69d47ece02fa469825b442263f04021f", size = 5336891 }, - { url = "https://files.pythonhosted.org/packages/fa/18/89ac62eac46b69948bf35fcd90d37103f38722968e2981f752d69081ec4d/zstandard-0.23.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f77fa49079891a4aab203d0b1744acc85577ed16d767b52fc089d83faf8d8ed", size = 5436310 }, - { url = "https://files.pythonhosted.org/packages/a8/a8/5ca5328ee568a873f5118d5b5f70d1f36c6387716efe2e369010289a5738/zstandard-0.23.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac184f87ff521f4840e6ea0b10c0ec90c6b1dcd0bad2f1e4a9a1b4fa177982ea", size = 4859912 }, - { url = "https://files.pythonhosted.org/packages/ea/ca/3781059c95fd0868658b1cf0440edd832b942f84ae60685d0cfdb808bca1/zstandard-0.23.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c363b53e257246a954ebc7c488304b5592b9c53fbe74d03bc1c64dda153fb847", size = 4936946 }, - { url = "https://files.pythonhosted.org/packages/ce/11/41a58986f809532742c2b832c53b74ba0e0a5dae7e8ab4642bf5876f35de/zstandard-0.23.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e7792606d606c8df5277c32ccb58f29b9b8603bf83b48639b7aedf6df4fe8171", size = 5466994 }, - { url = "https://files.pythonhosted.org/packages/83/e3/97d84fe95edd38d7053af05159465d298c8b20cebe9ccb3d26783faa9094/zstandard-0.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0817825b900fcd43ac5d05b8b3079937073d2b1ff9cf89427590718b70dd840", size = 4848681 }, - { url = "https://files.pythonhosted.org/packages/6e/99/cb1e63e931de15c88af26085e3f2d9af9ce53ccafac73b6e48418fd5a6e6/zstandard-0.23.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:9da6bc32faac9a293ddfdcb9108d4b20416219461e4ec64dfea8383cac186690", size = 4694239 }, - { url = "https://files.pythonhosted.org/packages/ab/50/b1e703016eebbc6501fc92f34db7b1c68e54e567ef39e6e59cf5fb6f2ec0/zstandard-0.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fd7699e8fd9969f455ef2926221e0233f81a2542921471382e77a9e2f2b57f4b", size = 5200149 }, - { url = "https://files.pythonhosted.org/packages/aa/e0/932388630aaba70197c78bdb10cce2c91fae01a7e553b76ce85471aec690/zstandard-0.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d477ed829077cd945b01fc3115edd132c47e6540ddcd96ca169facff28173057", size = 5655392 }, - { url = "https://files.pythonhosted.org/packages/02/90/2633473864f67a15526324b007a9f96c96f56d5f32ef2a56cc12f9548723/zstandard-0.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ce8b52c5987b3e34d5674b0ab529a4602b632ebab0a93b07bfb4dfc8f8a33", size = 5191299 }, - { url = "https://files.pythonhosted.org/packages/b0/4c/315ca5c32da7e2dc3455f3b2caee5c8c2246074a61aac6ec3378a97b7136/zstandard-0.23.0-cp313-cp313-win32.whl", hash = "sha256:a9b07268d0c3ca5c170a385a0ab9fb7fdd9f5fd866be004c4ea39e44edce47dd", size = 430862 }, - { url = "https://files.pythonhosted.org/packages/a2/bf/c6aaba098e2d04781e8f4f7c0ba3c7aa73d00e4c436bcc0cf059a66691d1/zstandard-0.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:f3513916e8c645d0610815c257cbfd3242adfd5c4cfa78be514e5a3ebb42a41b", size = 495578 }, -]