From 9adf24ce539038c380452e5123e2066fa1b0d01a Mon Sep 17 00:00:00 2001 From: Josh Hope-Collins Date: Thu, 20 Nov 2025 16:45:28 +0000 Subject: [PATCH 1/2] OptionsManager: do not turn an empty prefix into an underscore --- petsctools/options.py | 2 +- tests/test_options.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/petsctools/options.py b/petsctools/options.py index 413c2bd..ab7527c 100644 --- a/petsctools/options.py +++ b/petsctools/options.py @@ -134,7 +134,7 @@ def _validate_prefix(prefix): """Valid prefixes are strings ending with an underscore. """ prefix = str(prefix) - if not prefix.endswith("_"): + if prefix and not prefix.endswith("_"): prefix += "_" return prefix diff --git a/tests/test_options.py b/tests/test_options.py index 67527fc..a4d5130 100644 --- a/tests/test_options.py +++ b/tests/test_options.py @@ -84,18 +84,22 @@ def test_options_prefix(): options = petsctools.OptionsManager({}) assert options.options_prefix.startswith("petsctools_") + # User defined empty prefix + options = petsctools.OptionsManager({}, options_prefix='') + assert options.options_prefix == "" + # User defined default prefix options = petsctools.OptionsManager({}, default_prefix="firedrake") assert options.options_prefix.startswith("firedrake_") # Explicit prefix overrides default prefix options = petsctools.OptionsManager({}, options_prefix="myobj") - assert options.options_prefix.startswith("myobj_") + assert options.options_prefix == "myobj_" # Explicit prefix overrides default prefix options = petsctools.OptionsManager({}, options_prefix="myobj", default_prefix="firedrake") - assert options.options_prefix.startswith("myobj_") + assert options.options_prefix == "myobj_" @pytest.mark.skipnopetsc4py From c11327be83d3318d5a1be267e3b8fd85f5749b76 Mon Sep 17 00:00:00 2001 From: Josh Hope-Collins Date: Thu, 20 Nov 2025 16:56:41 +0000 Subject: [PATCH 2/2] cannot turn None into a valid prefix --- petsctools/options.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/petsctools/options.py b/petsctools/options.py index ab7527c..1c6b078 100644 --- a/petsctools/options.py +++ b/petsctools/options.py @@ -133,6 +133,8 @@ def _warn_unused_options(all_options: Iterable, used_options: Iterable, def _validate_prefix(prefix): """Valid prefixes are strings ending with an underscore. """ + if prefix is None: + raise ValueError("Cannot validate None as a prefix") prefix = str(prefix) if prefix and not prefix.endswith("_"): prefix += "_"