diff --git a/dimod/embedding/transforms.py b/dimod/embedding/transforms.py
index 4acba9fe..42a65912 100644
--- a/dimod/embedding/transforms.py
+++ b/dimod/embedding/transforms.py
@@ -35,7 +35,8 @@ __all__ = ['embed_bqm',
            ]
 
 
-def embed_bqm(source_bqm, embedding, target_adjacency, chain_strength=1.0):
+def embed_bqm(source_bqm, embedding, target_adjacency, chain_strength=1.0,
+              smear_vartype=None):
     """Embed a binary quadratic model onto a target graph.
 
     Args:
@@ -54,6 +55,11 @@ def embed_bqm(source_bqm, embedding, target_adjacency, chain_strength=1.0):
             Magnitude of the quadratic bias (in SPIN-space) applied between variables to create chains. Note
             that the energy penalty of chain breaks is 2 * `chain_strength`.
 
+        smear_vartype (:class:`.Vartype`, optional, default=None):
+            When a single variable is embedded, it's linear bias is 'smeared' evenly over the
+            chain. This parameter determines whether the variable is smeared in SPIN or BINARY
+            space. By default the embedding is done according to the given source_bqm.
+
     Returns:
         :obj:`.BinaryQuadraticModel`: Target binary quadratic model.
 
@@ -102,6 +108,13 @@ def embed_bqm(source_bqm, embedding, target_adjacency, chain_strength=1.0):
         >>> # Snipped above response for brevity
 
     """
+    if smear_vartype is Vartype.SPIN and source_bqm.vartype is Vartype.BINARY:
+        return embed_bqm(source_bqm.spin, embedding, target_adjacency,
+                         chain_strength=chain_strength, smear_vartype=None).binary
+    elif smear_vartype is Vartype.BINARY and source_bqm.vartype is Vartype.SPIN:
+        return embed_bqm(source_bqm.binary, embedding, target_adjacency,
+                         chain_strength=chain_strength, smear_vartype=None).spin
+
     # create a new empty binary quadratic model with the same class as source_bqm
     target_bqm = source_bqm.empty(source_bqm.vartype)
 

Embedding QUBO leads to out-of-range linear terms.
If I determine the correct scaling factor to scale a QUBO such that the Ising form fits in the QPU range, I should be able to scale the QUBO by this amount, embed it, and solve the Ising.  However, the embedding causes some linear QUBO terms to be out of range in the resulting Ising model.  As discussed with @arcondello.

https://github.com/dwavesystems/dimod/blob/8ebfffa42319aa4850cfc5a1c99a8711eac44722/dimod/embedding/transforms.py#L125
diff --git a/tests/test_embedding_transforms.py b/tests/test_embedding_transforms.py
index 3bdeb45a..c0342608 100644
--- a/tests/test_embedding_transforms.py
+++ b/tests/test_embedding_transforms.py
@@ -423,3 +423,25 @@ class TestEmbedBQM(unittest.TestCase):
 
         for v in itertools.chain(*embedding.values()):
             self.assertIn(v, target_bqm)
+
+    @unittest.skipUnless(_networkx, "No networkx installed")
+    def test_energy_range_embedding(self):
+        # start with an Ising
+        bqm = dimod.BinaryQuadraticModel.from_ising({}, {(0, 1): 1, (1, 2): 1, (0, 2): 1})
+
+        # convert to BINARY
+        bqm.change_vartype(dimod.BINARY, inplace=True)
+
+        # embedding
+        embedding = {0: ['a', 'b'], 1: ['c'], 2: ['d']}
+        graph = nx.cycle_graph(['a', 'b', 'c', 'd'])
+        graph.add_edge('a', 'c')
+
+        # embed
+        embedded = dimod.embed_bqm(bqm, embedding, graph, chain_strength=1, smear_vartype=dimod.SPIN)
+
+        preferred = dimod.BinaryQuadraticModel({'a': 0.0, 'b': 0.0, 'c': 0.0, 'd': 0.0},
+                                               {('a', 'c'): 0.5, ('b', 'c'): 0.5, ('c', 'd'): 1.0,
+                                                ('a', 'd'): 1.0, ('a', 'b'): -1.0}, 1.0, dimod.SPIN)
+
+        self.assertEqual(embedded.spin, preferred)

pip install -e .[all]
parse_log_pytest
requirements.txt
pytest coverage
apt-get update apt-get install -y libboost-dev
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
charset-normalizer==2.0.12
codecov==2.1.13
coverage==6.2
Cython==3.0.12
decorator==5.1.1
-e git+https://github.com/dwavesystems/dimod.git@54a79d8ad74234aac298d41531c76f73ee607b1b#egg=dimod
idna==3.10
importlib-metadata==4.8.3
iniconfig==1.1.1
jsonschema==2.6.0
mock==2.0.0
networkx==2.0
numpy==1.15.0
packaging==21.3
pandas==0.22.0
pbr==6.1.1
pluggy==1.0.0
py==1.11.0
pymongo==3.7.1
pyparsing==3.1.4
pytest==7.0.1
python-dateutil==2.9.0.post0
pytz==2025.2
requests==2.27.1
six==1.11.0
tomli==1.2.3
typing_extensions==4.1.1
urllib3==1.26.20
zipp==3.6.0

name: dimod
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - charset-normalizer==2.0.12
      - codecov==2.1.13
      - coverage==6.2
      - cython==3.0.12
      - decorator==5.1.1
      - idna==3.10
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - jsonschema==2.6.0
      - mock==2.0.0
      - networkx==2.0
      - numpy==1.15.0
      - packaging==21.3
      - pandas==0.22.0
      - pbr==6.1.1
      - pluggy==1.0.0
      - py==1.11.0
      - pymongo==3.7.1
      - pyparsing==3.1.4
      - pytest==7.0.1
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.27.1
      - six==1.11.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - zipp==3.6.0
prefix: /opt/conda/envs/dimod

tests/test_embedding_transforms.py::TestEmbedBQM::test_energy_range_embedding
tests/test_embedding_transforms.py::TestUnembedResponse::test_chain_break_statistics_discard tests/test_embedding_transforms.py::TestUnembedResponse::test_discard tests/test_embedding_transforms.py::TestUnembedResponse::test_discard_with_response tests/test_embedding_transforms.py::TestUnembedResponse::test_embedding_superset tests/test_embedding_transforms.py::TestUnembedResponse::test_energies_discard tests/test_embedding_transforms.py::TestUnembedResponse::test_energies_functional tests/test_embedding_transforms.py::TestUnembedResponse::test_majority_vote tests/test_embedding_transforms.py::TestUnembedResponse::test_majority_vote_with_response tests/test_embedding_transforms.py::TestUnembedResponse::test_unembed_response_with_discard_matrix_typical tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_BINARY tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_NAE3SAT_to_square tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_empty tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_identity tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_only_offset tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_subclass_propagation tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_bad_chain tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_components_empty tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_embedding_not_in_adj tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_h_embedding_mismatch tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_j_index_too_large tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_nonadj tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_typical tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_qubo tests/test_embedding_transforms.py::TestEmbedBQM::test_embedding_with_extra_chains
dimod/embedding/transforms.py
dimod/embedding/transforms.py