From 1c4280ff2c5795804c1b82221ed329fb26eedac8 Mon Sep 17 00:00:00 2001 From: Matti Sarjala Date: Thu, 14 May 2026 15:22:32 +0300 Subject: [PATCH] Raise clear error for non-BQM embedding inputs --- dwave/system/composites/embedding.py | 15 +++++++++++++++ tests/test_embedding_composite.py | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/dwave/system/composites/embedding.py b/dwave/system/composites/embedding.py index ca56d97a..00922b8d 100644 --- a/dwave/system/composites/embedding.py +++ b/dwave/system/composites/embedding.py @@ -44,6 +44,15 @@ ) +def _validate_bqm(bqm): + if not isinstance(bqm, dimod.BinaryQuadraticModel): + raise TypeError( + "Embedding composites only accept binary quadratic models (BQMs). " + "For constrained quadratic models (CQMs), use an appropriate sampler " + "such as LeapHybridCQMSampler." + ) + + class EmbeddingComposite(dimod.ComposedSampler): """Maps problems to a structured sampler. @@ -238,6 +247,8 @@ def sample(self, bqm, chain_strength=None, See the example in the :class:`.EmbeddingComposite` class. """ + _validate_bqm(bqm) + if return_embedding is None: return_embedding = self.return_embedding_default @@ -517,6 +528,8 @@ def sample(self, bqm, **parameters): :obj:`~dimod.SampleSet` """ + _validate_bqm(bqm) + if self.embedding is None: # get an embedding using the current find_embedding function embedding_parameters = parameters.pop('embedding_parameters', None) @@ -668,6 +681,8 @@ def permissive_child_structure(sampler): **kwargs) def sample(self, bqm, **parameters): + _validate_bqm(bqm) + child = self.child # we want to pass only the parameters relevent to the child sampler diff --git a/tests/test_embedding_composite.py b/tests/test_embedding_composite.py index 67f907c4..804ee28f 100644 --- a/tests/test_embedding_composite.py +++ b/tests/test_embedding_composite.py @@ -50,6 +50,13 @@ def test_instantiation_smoketest(self): dimod.testing.assert_sampler_api(sampler) + def test_sample_rejects_cqm(self): + sampler = EmbeddingComposite(MockDWaveSampler()) + cqm = dimod.ConstrainedQuadraticModel() + + with self.assertRaisesRegex(TypeError, "binary quadratic model"): + sampler.sample(cqm) + def test_sample_ising(self): sampler = EmbeddingComposite(MockDWaveSampler())