From e3ea6f022d0d0fff1f6ad4c80317c573ab4ee0d6 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 13 Aug 2025 15:05:48 +0200 Subject: [PATCH 01/12] Fix dump output for Decimal_Literal. Reformat dump() code to use fstrings. --- trlc/ast.py | 103 +++++++++++++++++++++++++--------------------------- 1 file changed, 50 insertions(+), 53 deletions(-) diff --git a/trlc/ast.py b/trlc/ast.py index d1f16cea..7977b9a7 100644 --- a/trlc/ast.py +++ b/trlc/ast.py @@ -167,7 +167,7 @@ def dump(self, indent=0): # pragma: no cover """ assert isinstance(indent, int) and indent >= 0 - assert False, "dump not implemented for %s" % self.__class__.__name__ + assert False, f"dump not implemented for {self.__class__.__name__}" # lobster-exclude: Debugging feature @@ -199,7 +199,7 @@ def add_check(self, n_check): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature self.write_indent(indent, "Check_Block") - self.write_indent(indent + 1, "Type: %s" % self.n_typ.name) + self.write_indent(indent + 1, f"Type: {self.n_typ.name}") for n_check in self.checks: n_check.dump(indent + 1) @@ -227,10 +227,9 @@ def __init__(self, file_name): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Compilation_Unit (%s)" % - self.location.file_name) + self.write_indent(indent, f"Compilation_Unit ({self.location.file_name})") for t_import in self.raw_imports: - self.write_indent(indent + 1, "Import: %s" % t_import.value) + self.write_indent(indent + 1, f"Import: {t_import.value}") for n_item in self.items: n_item.dump(indent + 1) @@ -347,13 +346,13 @@ def __init__(self, def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature if self.severity == "warning": - self.write_indent(indent, "Warning '%s'" % self.message) + self.write_indent(indent, f"Warning '{self.message}'") elif self.severity == "error": - self.write_indent(indent, "Error '%s'" % self.message) + self.write_indent(indent, f"Error '{self.message}'") else: - self.write_indent(indent, "Fatal error '%s'" % self.message) + self.write_indent(indent, f"Fatal error '{self.message}'") if self.n_anchor: - self.write_indent(indent + 1, "Anchor: %s" % self.n_anchor.name) + self.write_indent(indent + 1, f"Anchor: {self.n_anchor.name}") self.n_expr.dump(indent + 1) def get_real_location(self, composite_object): @@ -664,7 +663,7 @@ def __init__(self, token, typ): self.value = token.value def dump(self, indent=0): # pragma: no cover - self.write_indent(indent, "Integer Literal %u" % self.value) + self.write_indent(indent, f"Integer Literal {self.value}") def to_string(self): return str(self.value) @@ -711,7 +710,7 @@ def __init__(self, token, typ): self.value = token.value def dump(self, indent=0): # pragma: no cover - self.write_indent(indent, "Decimal Literal %u" % self.value) + self.write_indent(indent, f"Decimal Literal {self.value}") def to_string(self): return str(self.value) @@ -759,7 +758,7 @@ def __init__(self, token, typ): self.references = [] def dump(self, indent=0): # pragma: no cover - self.write_indent(indent, "String Literal %s" % repr(self.value)) + self.write_indent(indent, f"String Literal {repr(self.value)}") if self.has_references: self.write_indent(indent + 1, "Markup References") for ref in self.references: @@ -803,7 +802,7 @@ def __init__(self, token, typ): self.value = token.value == "true" def dump(self, indent=0): # pragma: no cover - self.write_indent(indent, "Boolean Literal %s" % self.value) + self.write_indent(indent, f"Boolean Literal {self.value}") def to_string(self): return str(self.value) @@ -850,8 +849,7 @@ def __init__(self, location, literal): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature self.write_indent(indent, - "Enumeration Literal %s.%s" % (self.typ.name, - self.value.name)) + f"Enumeration Literal {self.typ.name}.{self.value.name}") def to_string(self): return self.typ.name + "." + self.value.name @@ -974,7 +972,7 @@ def assign(self, field, value): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature self.write_indent(indent, "Tuple_Aggregate") - self.write_indent(indent + 1, "Type: %s" % self.typ.name) + self.write_indent(indent + 1, f"Type: {self.typ.name}") for n_item in self.typ.iter_sequence(): if isinstance(n_item, Composite_Component): self.value[n_item.name].dump(indent + 1) @@ -1068,9 +1066,9 @@ def __init__(self, location, name, typ, package): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Record Reference %s" % self.name) + self.write_indent(indent, f"Record Reference {self.name}") self.write_indent(indent + 1, - "Resolved: %s" % (self.target is not None)) + f"Resolved: {self.target is not None}") def to_string(self): return self.name @@ -1134,7 +1132,7 @@ def __init__(self, location, entity): self.entity = entity def dump(self, indent=0): # pragma: no cover - self.write_indent(indent, "Name Reference to %s" % self.entity.name) + self.write_indent(indent, f"Name Reference to {self.entity.name}") def to_string(self): return self.entity.name @@ -1242,8 +1240,8 @@ def to_string(self): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Unary %s Expression" % self.operator) - self.write_indent(indent + 1, "Type: %s" % self.typ.name) + self.write_indent(indent, f"Unary {self.operator} Expression") + self.write_indent(indent + 1, f"Type: {self.typ.name}") self.n_operand.dump(indent + 1) def evaluate(self, mh, context): @@ -1446,8 +1444,8 @@ def __init__(self, mh, location, typ, operator, n_lhs, n_rhs): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Binary %s Expression" % self.operator) - self.write_indent(indent + 1, "Type: %s" % self.typ.name) + self.write_indent(indent, f"Binary {self.operator} Expression") + self.write_indent(indent + 1, f"Type: {self.typ.name}") self.n_lhs.dump(indent + 1) self.n_rhs.dump(indent + 1) @@ -1740,7 +1738,7 @@ def __init__(self, mh, location, n_prefix, n_field): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Field_Access (%s)" % self.n_field.name) + self.write_indent(indent, f"Field_Access ({self.n_field.name})") self.n_prefix.dump(indent + 1) def to_string(self): @@ -1800,7 +1798,7 @@ def to_string(self): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature self.write_indent(indent, "Range Test") - self.write_indent(indent + 1, "Type: %s" % self.typ) + self.write_indent(indent + 1, f"Type: {self.typ}") self.n_lhs.dump(indent + 1) self.n_lower.dump(indent + 1) self.n_upper.dump(indent + 1) @@ -1870,7 +1868,7 @@ def to_string(self): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature self.write_indent(indent, "OneOf Test") - self.write_indent(indent + 1, "Type: %s" % self.typ) + self.write_indent(indent + 1, f"Type: {self.typ}") for n_choice in self.choices: n_choice.dump(indent + 1) @@ -1930,7 +1928,7 @@ def __init__(self, mh, t_kind, n_condition, n_expression): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "%s Action" % self.kind.capitalize()) + self.write_indent(indent, f"{self.kind.capitalize()} Action") self.write_indent(indent + 1, "Condition") self.n_cond.dump(indent + 2) self.write_indent(indent + 1, "Value") @@ -2206,7 +2204,7 @@ class Quantified_Variable(Typed_Entity): """ def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Quantified Variable %s" % self.name) + self.write_indent(indent, f"Quantified Variable {self.name}") self.n_typ.dump(indent + 1) @@ -2368,13 +2366,12 @@ def __init__(self, def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature self.write_indent(indent, "Array_Type") - self.write_indent(indent + 1, "Lower bound: %u" % self.lower_bound) + self.write_indent(indent + 1, f"Lower bound: {self.lower_bound}") if self.upper_bound is None: self.write_indent(indent + 1, "Upper bound: *") else: - self.write_indent(indent + 1, "Upper bound: %u" % self.upper_bound) - self.write_indent(indent + 1, "Element type: %s" % - self.element_type.name) + self.write_indent(indent + 1, f"Upper bound: {self.upper_bound}") + self.write_indent(indent + 1, f"Element type: {self.element_type.name}") def perform_type_checks(self, mh, value): assert isinstance(mh, Message_Handler) @@ -2480,8 +2477,8 @@ def __init__(self, name, location, builtin_stab, declared_late): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Package %s" % self.name) - self.write_indent(indent + 1, "Declared_Late: %s" % self.declared_late) + self.write_indent(indent, f"Package {self.name}") + self.write_indent(indent + 1, f"Declared_Late: {self.declared_late}") self.symbols.dump(indent + 1, omit_heading=True) def __repr__(self): @@ -2578,11 +2575,11 @@ def __init__(self, def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Composite_Component %s" % self.name) + self.write_indent(indent, f"Composite_Component {self.name}") if self.description: - self.write_indent(indent + 1, "Description: %s" % self.description) - self.write_indent(indent + 1, "Optional: %s" % self.optional) - self.write_indent(indent + 1, "Type: %s" % self.n_typ.name) + self.write_indent(indent + 1, f"Description: {self.description}") + self.write_indent(indent + 1, f"Optional: {self.optional}") + self.write_indent(indent + 1, f"Type: {self.n_typ.name}") def __repr__(self): return "%s<%s>" % (self.__class__.__name__, @@ -2643,11 +2640,11 @@ def iter_checks(self): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Record_Type %s" % self.name) + self.write_indent(indent, f"Record_Type {self.name}") if self.description: - self.write_indent(indent + 1, "Description: %s" % self.description) + self.write_indent(indent + 1, f"Description: {self.description}") if self.parent: - self.write_indent(indent + 1, "Parent: %s" % self.parent.name) + self.write_indent(indent + 1, f"Parent: {self.parent.name}") self.components.dump(indent + 1, omit_heading=True) if self.checks: self.write_indent(indent + 1, "Checks") @@ -2784,9 +2781,9 @@ def has_separators(self): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Tuple_Type %s" % self.name) + self.write_indent(indent, f"Tuple_Type {self.name}") if self.description: - self.write_indent(indent + 1, "Description: %s" % self.description) + self.write_indent(indent + 1, f"Description: {self.description}") self.write_indent(indent + 1, "Fields") for n_item in self.iter_sequence(): n_item.dump(indent + 2) @@ -2852,7 +2849,7 @@ def to_string(self): }.get(self.token.kind, self.token.value) def dump(self, indent=0): # pragma: no cover - self.write_indent(indent, "Separator %s" % self.token.value) + self.write_indent(indent, f"Separator {self.token.value}") class Enumeration_Type(Concrete_Type): @@ -2879,9 +2876,9 @@ def __init__(self, name, description, location, package): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Enumeration_Type %s" % self.name) + self.write_indent(indent, f"Enumeration_Type {self.name}") if self.description: - self.write_indent(indent + 1, "Description: %s" % self.description) + self.write_indent(indent + 1, f"Description: {self.description}") self.literals.dump(indent + 1, omit_heading=True) def get_example_value(self): @@ -2918,9 +2915,9 @@ def __init__(self, name, description, location, enum): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Enumeration_Literal_Spec %s" % self.name) + self.write_indent(indent, f"Enumeration_Literal_Spec {self.name}") if self.description: - self.write_indent(indent + 1, "Description: %s" % self.description) + self.write_indent(indent + 1, f"Description: {self.description}") class Record_Object(Typed_Entity): @@ -3018,10 +3015,10 @@ def assign(self, component, value): def dump(self, indent=0): # pragma: no cover # lobster-exclude: Debugging feature - self.write_indent(indent, "Record_Object %s" % self.name) - self.write_indent(indent + 1, "Type: %s" % self.n_typ.name) + self.write_indent(indent, f"Record_Object {self.name}") + self.write_indent(indent + 1, f"Type: {self.n_typ.name}") for key, value in self.field.items(): - self.write_indent(indent + 1, "Field %s" % key) + self.write_indent(indent + 1, f"Field {key}") value.dump(indent + 2) if self.section: self.section[-1].dump(indent + 1) @@ -3082,11 +3079,11 @@ def __init__(self, name, location, parent): self.parent = parent def dump(self, indent=0): # pragma: no cover - self.write_indent(indent, "Section %s" % self.name) + self.write_indent(indent, f"Section {self.name}") if self.parent is None: self.write_indent(indent + 1, "Parent: None") else: - self.write_indent(indent + 1, "Parent: %s" % self.parent.name) + self.write_indent(indent + 1, f"Parent: {self.parent.name}") ############################################################################## From dacfbd19689a5c05c8d53d80e0bce95f61afb42b Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 5 Feb 2026 15:42:20 +0100 Subject: [PATCH 02/12] Fix Checks example. --- language-reference-manual/lrm.trlc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language-reference-manual/lrm.trlc b/language-reference-manual/lrm.trlc index edda32d7..7f6a2aa0 100644 --- a/language-reference-manual/lrm.trlc +++ b/language-reference-manual/lrm.trlc @@ -951,7 +951,7 @@ section "Checks" { ''' rsl = """ checks Requirement { - len(description) < 10, + len(description) >= 10, warning "Description is too short", description From 7a86b0a33745c6a551180a9f08e55b614f47668a Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 29 Jul 2026 14:44:46 +0200 Subject: [PATCH 03/12] build: Reworked build to use pyproject.toml. --- .github/workflows/package.yml | 14 ++++++++- pyproject.toml | 51 ++++++++++++++++++++++++++++++ setup.cfg | 3 -- setup.py | 58 ----------------------------------- 4 files changed, 64 insertions(+), 62 deletions(-) delete mode 100644 setup.cfg delete mode 100644 setup.py diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 3146382f..df37c311 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -22,7 +22,19 @@ jobs: run: | python3 -m pip install --upgrade pip python3 -m pip install build - - name: + - name: Remove Bazel BUILD file # This should be no problem on Linux but necessary on Windows bacause of case-insensitive file-system. + run: | + rm BUILD + - name: Rewrite relative README links to absolute for PyPI + run: | + python -c " + import re, pathlib + tag = '${{ github.event.release.tag_name }}' + base = 'https://github.com/bmw-software-engineering/trlc/tree/' + tag + '/' + readme = pathlib.Path('README.md') + readme.write_text(re.sub(r'\]\(\.\/', '](' + base, readme.read_text())) + " + - name: Build package run: | make package - name: Archive wheel files diff --git a/pyproject.toml b/pyproject.toml index 4c508e50..ed7e055f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,48 @@ +[build-system] +requires = ["setuptools", "setuptools-scm", "wheel", "toml"] +build-backend = "setuptools.build_meta" + +[project] +name = "trlc" +dynamic = ["version"] +description = "Treat Requirements Like Code" +readme = "README.md" +requires-python = ">=3.8, <3.15" +authors = [ + { name = "Bayerische Motoren Werke Aktiengesellschaft (BMW AG)", email = "philipp.wullstein-kammler@bmw.de" } +] +license = "GPL-3.0" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Topic :: Documentation", + "Topic :: Software Development" +] + +dependencies = [ + "pyvcg==1.0.9", + "cvc5>=1.3.2", + "bigtree" +] + +[project.optional-dependencies] +dev = [ + "pycodestyle>=2.12", + "coverage>=7.2", + "sphinx>=7.0", + "build>=1.2.0", + "pylint<4.0" +] + +[project.urls] +documentation = "https://github.com/bmw-software-engineering/trlc#documentation" +repository = "https://github.com/bmw-software-engineering/trlc" +tracker = "https://github.com/bmw-software-engineering/trlc/issues" + +[project.scripts] +trlc = "trlc:trlc.main" + [tool.ty.rules] # ty is Astral's Python type checker (fast, Rust-based) # Add per-rule overrides here as needed, e.g.: @@ -50,3 +95,9 @@ good-names = ["i", "j", "k", "c", "f", "fd", "zf", "n", "ap", "rv", "mh", "sm", [tool.pylint.format] max-line-length = 88 + +[tool.setuptools] +packages = ["trlc"] + +[tool.setuptools.package-data] +trlc = ["pyproject.toml"] diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 905048ba..00000000 --- a/setup.cfg +++ /dev/null @@ -1,3 +0,0 @@ -[pycodestyle] -ignore = E203, W504, E221, E251, E129, E266, E127 -max-line-length = 88 diff --git a/setup.py b/setup.py deleted file mode 100644 index e43a9176..00000000 --- a/setup.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python3 - -import re -import sys -import setuptools - -from trlc import version - -with open("README.md", "r") as fd: - long_description = fd.read() - -# For the readme to look right on PyPI we need to translate any -# relative links to absolute links to github. -fixes = [] -for match in re.finditer(r"\[(.*)\]\((.*)\)", long_description): - if not match.group(2).startswith("http"): - fixes.append((match.span(0)[0], match.span(0)[1], - "[%s](%s/blob/main/%s)" % (match.group(1), - version.GITHUB_PROJECT, - match.group(2)))) - -for begin, end, text in reversed(fixes): - long_description = (long_description[:begin] + - text + - long_description[end:]) - -project_urls = { - "Bug Tracker" : version.BUGS_URL, - "Documentation" : version.DOCS_URL, - "Source Code" : version.CODE_URL, -} - -setuptools.setup( - name="trlc", - version=version.TRLC_VERSION, - author="Bayerische Motoren Werke Aktiengesellschaft (BMW AG)", - author_email="philipp.wullstein-kammler@bmw.de", - description="Treat Requirements Like Code", - long_description=long_description, - long_description_content_type="text/markdown", - url=project_urls["Source Code"], - project_urls=project_urls, - license="GNU General Public License v3", - packages=setuptools.find_packages(), - install_requires="PyVCG[api]==1.0.8", - python_requires=">=3.8, <3.15", - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Environment :: Console", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", - "Topic :: Documentation", - "Topic :: Software Development", - ], - entry_points={ - "console_scripts": ["trlc = trlc.trlc:main"], - }, -) From 0cb2dd9ae49d13a87b1757b0f474753820ae1b30 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 29 Jul 2026 14:48:03 +0200 Subject: [PATCH 04/12] fix(build): Remove dynamic version. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ed7e055f..5536dbae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "trlc" -dynamic = ["version"] +version = "3.0.1dev" description = "Treat Requirements Like Code" readme = "README.md" requires-python = ">=3.8, <3.15" From b60eb4b567b3dd97fe8192c4f51be8256d0046f1 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 29 Jul 2026 14:52:12 +0200 Subject: [PATCH 05/12] refactor(build): Don't remove BUILD file, should not be necessary on ubuntu runner. --- .github/workflows/package.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index df37c311..d0a150ec 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -22,9 +22,6 @@ jobs: run: | python3 -m pip install --upgrade pip python3 -m pip install build - - name: Remove Bazel BUILD file # This should be no problem on Linux but necessary on Windows bacause of case-insensitive file-system. - run: | - rm BUILD - name: Rewrite relative README links to absolute for PyPI run: | python -c " From ee54160b742ed530cadb64a2f16a830f09d2936e Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 29 Jul 2026 15:00:25 +0200 Subject: [PATCH 06/12] refactor(linting): Move lining rules to .pylintrc. --- pylint3.cfg => .pylintrc | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename pylint3.cfg => .pylintrc (100%) diff --git a/pylint3.cfg b/.pylintrc similarity index 100% rename from pylint3.cfg rename to .pylintrc From 4e63397ba226d613979b6bfef72e64c5979d43b9 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 29 Jul 2026 15:03:59 +0200 Subject: [PATCH 07/12] fix(linting): Use .pylintrc when linting. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 78f79416..7af6cd33 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: docs test style lint package lint: style - @python3 -m pylint --rcfile=pylint3.cfg \ + @python3 -m pylint --rcfile=.pylintrc \ --reports=no \ trlc trlc*.py lobster-*.py From c33129d251942a6b8c46e363cae516619ba2afc3 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 29 Jul 2026 15:10:22 +0200 Subject: [PATCH 08/12] fix(linting): Add ignores from removed setup.cfg. --- .pylintrc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.pylintrc b/.pylintrc index aa11080a..f5293ea6 100644 --- a/.pylintrc +++ b/.pylintrc @@ -27,7 +27,14 @@ disable= too-many-return-statements, too-many-statements, unused-wildcard-import, - wildcard-import + wildcard-import, + E203, + W504, + E221, + E251, + E129, + E266, + E127 [REPORTS] output-format=text From df6769cd86a427bd5718affd0ed1b458766e8331 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 29 Jul 2026 15:22:45 +0200 Subject: [PATCH 09/12] fix(linting): Reintroduce setup.cfg for pycodestyle configuration. --- .pylintrc | 9 +-------- setup.cfg | 3 +++ 2 files changed, 4 insertions(+), 8 deletions(-) create mode 100644 setup.cfg diff --git a/.pylintrc b/.pylintrc index f5293ea6..aa11080a 100644 --- a/.pylintrc +++ b/.pylintrc @@ -27,14 +27,7 @@ disable= too-many-return-statements, too-many-statements, unused-wildcard-import, - wildcard-import, - E203, - W504, - E221, - E251, - E129, - E266, - E127 + wildcard-import [REPORTS] output-format=text diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 00000000..905048ba --- /dev/null +++ b/setup.cfg @@ -0,0 +1,3 @@ +[pycodestyle] +ignore = E203, W504, E221, E251, E129, E266, E127 +max-line-length = 88 From a99e371f67bf07f60d464618fe4df35342a9bb5a Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 15 Sep 2026 08:34:33 +0200 Subject: [PATCH 10/12] Update pyvcg and cvc5 dependency versions to match #224. --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5536dbae..45d93898 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,8 +21,8 @@ classifiers = [ ] dependencies = [ - "pyvcg==1.0.9", - "cvc5>=1.3.2", + "pyvcg==1.0.12", + "cvc5>=1.3.4", "bigtree" ] From f7396c30ad992785bae33fea236c9b9c982f49ca Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 15 Sep 2026 09:30:06 +0200 Subject: [PATCH 11/12] Update requirements.txt to match pyproject.toml. --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index e5f67fce..eb16df5c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -pyvcg==1.0.9 -cvc5>=1.3.2 +pyvcg==1.0.12 +cvc5>=1.3.4 bigtree From 1dd70818c28ec1da57029d7d1e64596f2e0bab4d Mon Sep 17 00:00:00 2001 From: Luca Date: Tue, 22 Sep 2026 14:13:53 +0200 Subject: [PATCH 12/12] fix(project): Remove unnecessary requires from pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 45d93898..f7825a74 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools", "setuptools-scm", "wheel", "toml"] +requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" [project]