From: Wander Lairson Costa <wander@redhat.com>
To: Steven Rostedt <rostedt@goodmis.org>,
Gabriele Monaco <gmonaco@redhat.com>,
Nam Cao <namcao@linutronix.de>,
Wander Lairson Costa <wander@redhat.com>,
linux-kernel@vger.kernel.org (open list),
linux-trace-kernel@vger.kernel.org (open list:RUNTIME
VERIFICATION (RV))
Subject: [PATCH 23/26] rv/rvgen: add type annotations to fix pyright errors
Date: Mon, 19 Jan 2026 17:45:59 -0300 [thread overview]
Message-ID: <20260119205601.105821-24-wander@redhat.com> (raw)
In-Reply-To: <20260119205601.105821-1-wander@redhat.com>
Add return type annotations to RVGenerator base class methods and
LTL operator classes to resolve pyright reportIncompatibleMethodOverride
errors.
In generator.py, add string return type annotations to all template
filling methods and annotate the template_dir class attribute to enable
proper type checking during initialization.
In ltl2ba.py, introduce a LTLNode type alias as a Union of all AST node
types (BinaryOp, UnaryOp, Variable, Literal) to properly type operator
transformations. The operator base classes BinaryOp and UnaryOp receive
return type annotations using this type alias for their normalize and
negate methods, since these transformations can return different node
types depending on the expression. The Variable and Literal classes gain
return type annotations for their manipulation methods, and all temporal
checking methods are annotated to return bool.
The LTLNode type alias is necessary because operator transformations are
polymorphic: NotOp.negate() can return BinaryOp, UnaryOp, Variable, or
Literal depending on what expression is being negated.
In ltl2k.py, fix the _fill_states return type from str to list[str] to
match the actual implementation.
Signed-off-by: Wander Lairson Costa <wander@redhat.com>
---
tools/verification/rvgen/rvgen/generator.py | 35 +++++++++++----------
tools/verification/rvgen/rvgen/ltl2ba.py | 33 ++++++++++---------
tools/verification/rvgen/rvgen/ltl2k.py | 2 +-
3 files changed, 38 insertions(+), 32 deletions(-)
diff --git a/tools/verification/rvgen/rvgen/generator.py b/tools/verification/rvgen/rvgen/generator.py
index d99a980850d64..c58a81a775681 100644
--- a/tools/verification/rvgen/rvgen/generator.py
+++ b/tools/verification/rvgen/rvgen/generator.py
@@ -12,6 +12,7 @@ from .utils import not_implemented
class RVGenerator:
rv_dir = "kernel/trace/rv"
+ template_dir: str
def __init__(self, extra_params={}):
self.name = extra_params.get("model_name")
@@ -66,24 +67,24 @@ class RVGenerator:
path = os.path.join(self.abs_template_dir, "..", file)
return self._read_file(path)
- def fill_parent(self):
+ def fill_parent(self) -> str:
return f"&rv_{self.parent}" if self.parent else "NULL"
- def fill_include_parent(self):
+ def fill_include_parent(self) -> str:
if self.parent:
return f"#include <monitors/{self.parent}/{self.parent}.h>\n"
return ""
@not_implemented
- def fill_tracepoint_handlers_skel(self): ...
+ def fill_tracepoint_handlers_skel(self) -> str: ...
@not_implemented
- def fill_tracepoint_attach_probe(self): ...
+ def fill_tracepoint_attach_probe(self) -> str: ...
@not_implemented
- def fill_tracepoint_detach_helper(self): ...
+ def fill_tracepoint_detach_helper(self) -> str: ...
- def fill_main_c(self):
+ def fill_main_c(self) -> str:
main_c = self.main_c
tracepoint_handlers = self.fill_tracepoint_handlers_skel()
tracepoint_attach = self.fill_tracepoint_attach_probe()
@@ -102,18 +103,18 @@ class RVGenerator:
return main_c
@not_implemented
- def fill_model_h(self): ...
+ def fill_model_h(self) -> str: ...
@not_implemented
- def fill_monitor_class_type(self): ...
+ def fill_monitor_class_type(self) -> str: ...
@not_implemented
- def fill_monitor_class(self): ...
+ def fill_monitor_class(self) -> str: ...
@not_implemented
- def fill_tracepoint_args_skel(self, tp_type): ...
+ def fill_tracepoint_args_skel(self, tp_type) -> str: ...
- def fill_monitor_deps(self):
+ def fill_monitor_deps(self) -> str:
buff = []
buff.append(" # XXX: add dependencies if there")
if self.parent:
@@ -121,7 +122,7 @@ class RVGenerator:
buff.append(" default y")
return '\n'.join(buff)
- def fill_kconfig(self):
+ def fill_kconfig(self) -> str:
kconfig = self.kconfig
monitor_class_type = self.fill_monitor_class_type()
monitor_deps = self.fill_monitor_deps()
@@ -139,7 +140,7 @@ class RVGenerator:
content = content.replace(marker, line + "\n" + marker)
self.__write_file(file_to_patch, content)
- def fill_tracepoint_tooltip(self):
+ def fill_tracepoint_tooltip(self) -> str:
monitor_class_type = self.fill_monitor_class_type()
if self.auto_patch:
self._patch_file("rv_trace.h",
@@ -155,7 +156,7 @@ Add this line where other tracepoints are included and {monitor_class_type} is d
def _kconfig_marker(self, container=None) -> str:
return f"# Add new {container + ' ' if container else ''}monitors here"
- def fill_kconfig_tooltip(self):
+ def fill_kconfig_tooltip(self) -> str:
if self.auto_patch:
# monitors with a container should stay together in the Kconfig
self._patch_file("Kconfig",
@@ -168,7 +169,7 @@ Add this line where other monitors are included:
source \"kernel/trace/rv/monitors/{self.name}/Kconfig\"
"""
- def fill_makefile_tooltip(self):
+ def fill_makefile_tooltip(self) -> str:
name = self.name
name_up = name.upper()
if self.auto_patch:
@@ -182,7 +183,7 @@ Add this line where other monitors are included:
obj-$(CONFIG_RV_MON_{name_up}) += monitors/{name}/{name}.o
"""
- def fill_monitor_tooltip(self):
+ def fill_monitor_tooltip(self) -> str:
if self.auto_patch:
return f" - Monitor created in {self.rv_dir}/monitors/{self.name}"
return f" - Move {self.name}/ to the kernel's monitor directory ({self.rv_dir}/monitors)"
@@ -229,7 +230,7 @@ class Monitor(RVGenerator):
super().__init__(extra_params)
self.trace_h = self._read_template_file("trace.h")
- def fill_trace_h(self):
+ def fill_trace_h(self) -> str:
trace_h = self.trace_h
monitor_class = self.fill_monitor_class()
monitor_class_type = self.fill_monitor_class_type()
diff --git a/tools/verification/rvgen/rvgen/ltl2ba.py b/tools/verification/rvgen/rvgen/ltl2ba.py
index 9a3fb7c5f4f65..49f6b9200ff0a 100644
--- a/tools/verification/rvgen/rvgen/ltl2ba.py
+++ b/tools/verification/rvgen/rvgen/ltl2ba.py
@@ -7,10 +7,15 @@
# https://doi.org/10.1007/978-0-387-34892-6_1
# With extra optimizations
+from __future__ import annotations
+from typing import Union
from ply.lex import lex
from ply.yacc import yacc
from .utils import not_implemented
+# Type alias for all LTL node types in the AST
+LTLNode = Union['BinaryOp', 'UnaryOp', 'Variable', 'Literal']
+
# Grammar:
# ltl ::= opd | ( ltl ) | ltl binop ltl | unop ltl
#
@@ -152,15 +157,15 @@ class BinaryOp:
yield from self.right
@not_implemented
- def normalize(self): ...
+ def normalize(self) -> BinaryOp: ...
@not_implemented
- def negate(self): ...
+ def negate(self) -> BinaryOp: ...
@not_implemented
- def _is_temporal(self): ...
+ def _is_temporal(self) -> bool: ...
- def is_temporal(self):
+ def is_temporal(self) -> bool:
if self.left.op.is_temporal():
return True
if self.right.op.is_temporal():
@@ -291,20 +296,20 @@ class UnaryOp:
return hash(self.child)
@not_implemented
- def normalize(self):
+ def normalize(self) -> LTLNode:
...
@not_implemented
- def _is_temporal(self):
+ def _is_temporal(self) -> bool:
...
- def is_temporal(self):
+ def is_temporal(self) -> bool:
if self.child.op.is_temporal():
return True
return self._is_temporal()
@not_implemented
- def negate(self):
+ def negate(self) -> LTLNode:
...
class EventuallyOp(UnaryOp):
@@ -386,14 +391,14 @@ class Variable:
def __iter__(self):
yield from ()
- def negate(self):
+ def negate(self) -> NotOp:
new = ASTNode(self)
return NotOp(new)
- def normalize(self):
+ def normalize(self) -> Variable:
return self
- def is_temporal(self):
+ def is_temporal(self) -> bool:
return False
@staticmethod
@@ -419,14 +424,14 @@ class Literal:
return "true"
return "false"
- def negate(self):
+ def negate(self) -> Literal:
self.value = not self.value
return self
- def normalize(self):
+ def normalize(self) -> Literal:
return self
- def is_temporal(self):
+ def is_temporal(self) -> bool:
return False
@staticmethod
diff --git a/tools/verification/rvgen/rvgen/ltl2k.py b/tools/verification/rvgen/rvgen/ltl2k.py
index f1eafc16c754b..44231aadb257c 100644
--- a/tools/verification/rvgen/rvgen/ltl2k.py
+++ b/tools/verification/rvgen/rvgen/ltl2k.py
@@ -68,7 +68,7 @@ class ltl2k(generator.Monitor):
if not self.name:
self.name = Path(file_path).stem
- def _fill_states(self) -> str:
+ def _fill_states(self) -> list[str]:
buf = [
"enum ltl_buchi_state {",
]
--
2.52.0
next prev parent reply other threads:[~2026-01-19 21:08 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-19 20:45 [PATCH 00/26] rv/rvgen: Robustness, modernization, and fixes Wander Lairson Costa
2026-01-19 20:45 ` [PATCH 01/26] rv/rvgen: introduce AutomataError exception class Wander Lairson Costa
2026-01-20 7:33 ` Gabriele Monaco
2026-01-20 12:39 ` Wander Lairson Costa
2026-01-20 15:08 ` Gabriele Monaco
2026-01-22 14:39 ` Nam Cao
2026-01-19 20:45 ` [PATCH 02/26] rv/rvgen: remove bare except clauses in generator Wander Lairson Costa
2026-01-20 10:05 ` Gabriele Monaco
2026-01-22 14:43 ` Nam Cao
2026-01-19 20:45 ` [PATCH 03/26] rv/rvgen: replace % string formatting with f-strings Wander Lairson Costa
2026-01-20 10:02 ` Gabriele Monaco
2026-01-22 14:46 ` Nam Cao
2026-01-19 20:45 ` [PATCH 04/26] rv/rvgen: replace __len__() calls with len() Wander Lairson Costa
2026-01-20 7:41 ` Gabriele Monaco
2026-01-22 14:46 ` Nam Cao
2026-01-19 20:45 ` [PATCH 05/26] rv/rvgen: remove unnecessary semicolons Wander Lairson Costa
2026-01-20 7:42 ` Gabriele Monaco
2026-01-22 14:47 ` Nam Cao
2026-01-19 20:45 ` [PATCH 06/26] rv/rvgen: use context managers for file operations Wander Lairson Costa
2026-01-20 7:44 ` Gabriele Monaco
2026-01-22 14:50 ` Nam Cao
2026-01-19 20:45 ` [PATCH 07/26] rv/rvgen: replace __contains__() with in operator Wander Lairson Costa
2026-01-20 7:45 ` Gabriele Monaco
2026-01-22 14:51 ` Nam Cao
2026-01-19 20:45 ` [PATCH 08/26] rv/rvgen: simplify boolean comparison Wander Lairson Costa
2026-01-20 7:48 ` Gabriele Monaco
2026-01-22 14:51 ` Nam Cao
2026-01-19 20:45 ` [PATCH 09/26] rv/rvgen: replace inline NotImplemented with decorator Wander Lairson Costa
2026-01-21 13:43 ` Gabriele Monaco
2026-01-21 17:49 ` Wander Lairson Costa
2026-01-22 14:57 ` Nam Cao
2026-01-19 20:45 ` [PATCH 10/26] rv/rvgen: fix typos in automata docstring and comments Wander Lairson Costa
2026-01-22 14:58 ` Nam Cao
2026-01-19 20:45 ` [PATCH 11/26] rv/rvgen: fix typo in generator module docstring Wander Lairson Costa
2026-01-20 7:51 ` Gabriele Monaco
2026-01-22 14:59 ` Nam Cao
2026-01-19 20:45 ` [PATCH 12/26] rv/rvgen: fix PEP 8 whitespace violations Wander Lairson Costa
2026-01-20 7:53 ` Gabriele Monaco
2026-01-22 14:59 ` Nam Cao
2026-01-19 20:45 ` [PATCH 13/26] rv/rvgen: fix DOT file validation logic error Wander Lairson Costa
2026-01-20 7:56 ` Gabriele Monaco
2026-01-22 15:01 ` Nam Cao
2026-01-19 20:45 ` [PATCH 14/26] rv/rvgen: remove redundant initial_state removal Wander Lairson Costa
2026-01-20 8:01 ` Gabriele Monaco
2026-01-20 12:05 ` Wander Lairson Costa
2026-01-19 20:45 ` [PATCH 15/26] rv/rvgen: use class constant for init marker Wander Lairson Costa
2026-01-20 8:06 ` Gabriele Monaco
2026-01-22 15:02 ` Nam Cao
2026-01-19 20:45 ` [PATCH 16/26] rv/rvgen: fix unbound initial_state variable Wander Lairson Costa
2026-01-20 8:21 ` Gabriele Monaco
2026-01-20 11:42 ` Wander Lairson Costa
2026-01-20 11:53 ` Gabriele Monaco
2026-01-19 20:45 ` [PATCH 17/26] rv/rvgen: fix possibly unbound variable in ltl2k Wander Lairson Costa
2026-01-20 8:59 ` Gabriele Monaco
2026-01-20 11:37 ` Wander Lairson Costa
2026-01-20 12:30 ` Gabriele Monaco
2026-01-20 19:38 ` Wander Lairson Costa
2026-01-21 6:31 ` Gabriele Monaco
2026-01-22 15:31 ` Nam Cao
2026-01-19 20:45 ` [PATCH 18/26] rv/rvgen: add fill_tracepoint_args_skel stub to ltl2k Wander Lairson Costa
2026-01-21 13:57 ` Gabriele Monaco
2026-01-21 17:53 ` Wander Lairson Costa
2026-01-22 13:10 ` Wander Lairson Costa
2026-01-22 13:49 ` Gabriele Monaco
2026-01-23 12:19 ` Wander Lairson Costa
2026-01-23 12:26 ` Gabriele Monaco
2026-01-23 14:04 ` Wander Lairson Costa
2026-01-19 20:45 ` [PATCH 19/26] rv/rvgen: add abstract method stubs to Container class Wander Lairson Costa
2026-01-21 13:59 ` Gabriele Monaco
2026-01-21 17:56 ` Wander Lairson Costa
2026-01-22 15:33 ` Nam Cao
2026-01-19 20:45 ` [PATCH 20/26] rv/rvgen: refactor automata.py to use iterator-based parsing Wander Lairson Costa
2026-01-20 9:43 ` Gabriele Monaco
2026-01-22 15:35 ` Nam Cao
2026-01-22 15:40 ` Gabriele Monaco
2026-01-22 16:01 ` Nam Cao
2026-01-19 20:45 ` [PATCH 21/26] rv/rvgen: remove unused sys import from dot2c Wander Lairson Costa
2026-01-20 9:16 ` Gabriele Monaco
2026-01-19 20:45 ` [PATCH 22/26] rv/rvgen: remove unused __get_main_name method Wander Lairson Costa
2026-01-20 9:08 ` Gabriele Monaco
2026-01-19 20:45 ` Wander Lairson Costa [this message]
2026-01-22 15:43 ` [PATCH 23/26] rv/rvgen: add type annotations to fix pyright errors Nam Cao
2026-01-19 20:46 ` [PATCH 24/26] rv/rvgen: make monitor arguments required in rvgen Wander Lairson Costa
2026-01-20 9:07 ` Gabriele Monaco
2026-01-22 15:44 ` Nam Cao
2026-01-19 20:46 ` [PATCH 25/26] rv/rvgen: fix isinstance check in Variable.expand() Wander Lairson Costa
2026-01-22 15:53 ` Nam Cao
2026-01-19 20:46 ` [PATCH 26/26] rv/rvgen: extract node marker string to class constant Wander Lairson Costa
2026-01-20 9:03 ` Gabriele Monaco
2026-01-20 11:34 ` Wander Lairson Costa
2026-01-20 12:36 ` Gabriele Monaco
2026-01-20 13:11 ` Gabriele Monaco
2026-01-20 18:56 ` Wander Lairson Costa
2026-01-21 6:16 ` Gabriele Monaco
2026-01-20 7:20 ` [PATCH 00/26] rv/rvgen: Robustness, modernization, and fixes Nam Cao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260119205601.105821-24-wander@redhat.com \
--to=wander@redhat.com \
--cc=gmonaco@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=namcao@linutronix.de \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox