public inbox for linux-trace-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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 09/26] rv/rvgen: replace inline NotImplemented with decorator
Date: Mon, 19 Jan 2026 17:45:45 -0300	[thread overview]
Message-ID: <20260119205601.105821-10-wander@redhat.com> (raw)
In-Reply-To: <20260119205601.105821-1-wander@redhat.com>

Replace inline NotImplementedError raises with a dedicated decorator in
the ltl2ba module. The previous implementation used explicit raise
statements inside abstract method bodies for BinaryOp and UnaryOp
classes, which required maintaining identical boilerplate across seven
different methods that need to be overridden by subclasses.

All stub methods in generator.py have been converted from returning
strings to using the decorator with ellipsis function bodies, which
is the recommended Python style for marking incomplete interface
methods. This ensures that any attempt to use unimplemented
functionality fails fast with a clear exception rather than silently
propagating string values through the code.

The new @not_implemented decorator consolidates this pattern into a
single reusable definition that clearly marks abstract methods while
reducing code duplication. The decorator creates a wrapper that raises
NotImplementedError with the function name, providing the same runtime
behavior with improved maintainability. Method bodies now use the
ellipsis literal instead of pass statements, which is the preferred
Python convention for stub methods according to PEP 8.

Signed-off-by: Wander Lairson Costa <wander@redhat.com>
---
 tools/verification/rvgen/rvgen/generator.py | 29 +++++++++--------
 tools/verification/rvgen/rvgen/ltl2ba.py    | 25 ++++++++------
 tools/verification/rvgen/rvgen/utils.py     | 36 +++++++++++++++++++++
 3 files changed, 66 insertions(+), 24 deletions(-)
 create mode 100644 tools/verification/rvgen/rvgen/utils.py

diff --git a/tools/verification/rvgen/rvgen/generator.py b/tools/verification/rvgen/rvgen/generator.py
index ee75e111feef1..fc9be5f6aaa1f 100644
--- a/tools/verification/rvgen/rvgen/generator.py
+++ b/tools/verification/rvgen/rvgen/generator.py
@@ -7,6 +7,7 @@
 
 import platform
 import os
+from .utils import not_implemented
 
 
 class RVGenerator:
@@ -73,14 +74,14 @@ class RVGenerator:
             return f"#include <monitors/{self.parent}/{self.parent}.h>\n"
         return ""
 
-    def fill_tracepoint_handlers_skel(self):
-        return "NotImplemented"
+    @not_implemented
+    def fill_tracepoint_handlers_skel(self): ...
 
-    def fill_tracepoint_attach_probe(self):
-        return "NotImplemented"
+    @not_implemented
+    def fill_tracepoint_attach_probe(self): ...
 
-    def fill_tracepoint_detach_helper(self):
-        return "NotImplemented"
+    @not_implemented
+    def fill_tracepoint_detach_helper(self): ...
 
     def fill_main_c(self):
         main_c = self.main_c
@@ -100,17 +101,17 @@ class RVGenerator:
 
         return main_c
 
-    def fill_model_h(self):
-        return "NotImplemented"
+    @not_implemented
+    def fill_model_h(self): ...
 
-    def fill_monitor_class_type(self):
-        return "NotImplemented"
+    @not_implemented
+    def fill_monitor_class_type(self): ...
 
-    def fill_monitor_class(self):
-        return "NotImplemented"
+    @not_implemented
+    def fill_monitor_class(self): ...
 
-    def fill_tracepoint_args_skel(self, tp_type):
-        return "NotImplemented"
+    @not_implemented
+    def fill_tracepoint_args_skel(self, tp_type): ...
 
     def fill_monitor_deps(self):
         buff = []
diff --git a/tools/verification/rvgen/rvgen/ltl2ba.py b/tools/verification/rvgen/rvgen/ltl2ba.py
index f14e6760ac3db..9a3fb7c5f4f65 100644
--- a/tools/verification/rvgen/rvgen/ltl2ba.py
+++ b/tools/verification/rvgen/rvgen/ltl2ba.py
@@ -9,6 +9,7 @@
 
 from ply.lex import lex
 from ply.yacc import yacc
+from .utils import not_implemented
 
 # Grammar:
 # 	ltl ::= opd | ( ltl ) | ltl binop ltl | unop ltl
@@ -150,14 +151,14 @@ class BinaryOp:
         yield from self.left
         yield from self.right
 
-    def normalize(self):
-        raise NotImplementedError
+    @not_implemented
+    def normalize(self): ...
 
-    def negate(self):
-        raise NotImplementedError
+    @not_implemented
+    def negate(self): ...
 
-    def _is_temporal(self):
-        raise NotImplementedError
+    @not_implemented
+    def _is_temporal(self): ...
 
     def is_temporal(self):
         if self.left.op.is_temporal():
@@ -167,8 +168,9 @@ class BinaryOp:
         return self._is_temporal()
 
     @staticmethod
+    @not_implemented
     def expand(n: ASTNode, node: GraphNode, node_set) -> set[GraphNode]:
-        raise NotImplementedError
+        ...
 
 class AndOp(BinaryOp):
     op_str = '&&'
@@ -288,19 +290,22 @@ class UnaryOp:
     def __hash__(self):
         return hash(self.child)
 
+    @not_implemented
     def normalize(self):
-        raise NotImplementedError
+        ...
 
+    @not_implemented
     def _is_temporal(self):
-        raise NotImplementedError
+        ...
 
     def is_temporal(self):
         if self.child.op.is_temporal():
             return True
         return self._is_temporal()
 
+    @not_implemented
     def negate(self):
-        raise NotImplementedError
+        ...
 
 class EventuallyOp(UnaryOp):
     def __str__(self):
diff --git a/tools/verification/rvgen/rvgen/utils.py b/tools/verification/rvgen/rvgen/utils.py
new file mode 100644
index 0000000000000..e09c943693edf
--- /dev/null
+++ b/tools/verification/rvgen/rvgen/utils.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0-only
+
+
+def not_implemented(func):
+    """
+    Decorator to mark functions as not yet implemented.
+
+    This decorator wraps a function and raises a NotImplementedError when the
+    function is called, rather than executing the function body. This is useful
+    for defining interface methods or placeholder functions that need to be
+    implemented later.
+
+    Args:
+        func: The function to be wrapped.
+
+    Returns:
+        A wrapper function that raises NotImplementedError when called.
+
+    Raises:
+        NotImplementedError: Always raised when the decorated function is called.
+            The exception includes the function name and any arguments that were
+            passed to the function.
+
+    Example:
+        @not_implemented
+        def future_feature(arg1, arg2):
+            pass
+
+        # Calling future_feature will raise:
+        # NotImplementedError('future_feature', arg1_value, arg2_value)
+    """
+    def inner(*args, **kwargs):
+        raise NotImplementedError(func.__name__, *args, **kwargs)
+
+    return inner
-- 
2.52.0


  parent reply	other threads:[~2026-01-19 21:02 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 ` Wander Lairson Costa [this message]
2026-01-21 13:43   ` [PATCH 09/26] rv/rvgen: replace inline NotImplemented with decorator 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 ` [PATCH 23/26] rv/rvgen: add type annotations to fix pyright errors Wander Lairson Costa
2026-01-22 15:43   ` 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-10-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