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):