From ff29eaf5e0236019e47873444a745bb163e3d0c4 Mon Sep 17 00:00:00 2001 From: jschuhmac <74537145+jschuhmac@users.noreply.github.com> Date: Tue, 20 Aug 2024 10:56:12 +0200 Subject: [PATCH] Parsing of `seed_transpiler` in `generate_preset_pass_manager` (#12980) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Raise ValueError if seed_transpiler is negative * Fix code formatting * Implement suggested changes * Update releasenotes/notes/fix-negative-seed-pm-2813a62a020da115.yaml Co-authored-by: Elena Peña Tapia <57907331+ElePT@users.noreply.github.com> * Update qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py Co-authored-by: Elena Peña Tapia <57907331+ElePT@users.noreply.github.com> --------- Co-authored-by: Elena Peña Tapia <57907331+ElePT@users.noreply.github.com> (cherry picked from commit 5c8edd404060eb5186fe55f3874e35617253d55e) --- .../generate_preset_pass_manager.py | 9 +++++++++ .../notes/fix-negative-seed-pm-2813a62a020da115.yaml | 4 ++++ test/python/transpiler/test_preset_passmanagers.py | 12 ++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 releasenotes/notes/fix-negative-seed-pm-2813a62a020da115.yaml diff --git a/qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py b/qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py index a679854bfe14..add89884a854 100644 --- a/qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +++ b/qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py @@ -343,6 +343,7 @@ def generate_preset_pass_manager( # Parse non-target dependent pm options initial_layout = _parse_initial_layout(initial_layout) approximation_degree = _parse_approximation_degree(approximation_degree) + seed_transpiler = _parse_seed_transpiler(seed_transpiler) pm_options = { "target": target, @@ -516,3 +517,11 @@ def _parse_approximation_degree(approximation_degree): if approximation_degree < 0.0 or approximation_degree > 1.0: raise TranspilerError("Approximation degree must be in [0.0, 1.0]") return approximation_degree + + +def _parse_seed_transpiler(seed_transpiler): + if seed_transpiler is None: + return None + if not isinstance(seed_transpiler, int) or seed_transpiler < 0: + raise ValueError("Expected non-negative integer as seed for transpiler.") + return seed_transpiler diff --git a/releasenotes/notes/fix-negative-seed-pm-2813a62a020da115.yaml b/releasenotes/notes/fix-negative-seed-pm-2813a62a020da115.yaml new file mode 100644 index 000000000000..352f068537e8 --- /dev/null +++ b/releasenotes/notes/fix-negative-seed-pm-2813a62a020da115.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fixed the behavior of :meth:`.generate_preset_pass_manager` to raise a `ValueError` exception if not provided with a non-negative integer `seed_transpiler` argument. diff --git a/test/python/transpiler/test_preset_passmanagers.py b/test/python/transpiler/test_preset_passmanagers.py index 619c95efb85a..0d87f71d6f03 100644 --- a/test/python/transpiler/test_preset_passmanagers.py +++ b/test/python/transpiler/test_preset_passmanagers.py @@ -1511,6 +1511,18 @@ def test_generate_preset_pass_manager_with_list_initial_layout(self, optimizatio self.assertIsInstance(pm_object, PassManager) self.assertEqual(tqc_list, tqc_obj) + def test_parse_seed_transpiler_raises_value_error(self): + """Test that seed for transpiler is non-negative integer.""" + with self.assertRaisesRegex( + ValueError, "Expected non-negative integer as seed for transpiler." + ): + generate_preset_pass_manager(optimization_level=1, seed_transpiler=-1) + + with self.assertRaisesRegex( + ValueError, "Expected non-negative integer as seed for transpiler." + ): + generate_preset_pass_manager(seed_transpiler=0.1) + @ddt class TestIntegrationControlFlow(QiskitTestCase):