Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions azure-quantum/azure/quantum/qiskit/backends/quantinuum.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ def _get_n_qubits(name):
name = name.lower()
if ".h2-" in name:
return 56
if ".helios-" in name:
return 98
warnings.warn(
UserWarning(f"Number of qubits not known for target {name}. Defaulting to 20."))
return 20
Expand All @@ -82,12 +84,19 @@ def __init__(

@classmethod
def _default_options(cls) -> Options:
return Options(
opt = Options(
**{
cls._SHOTS_PARAM_NAME: _DEFAULT_SHOTS_COUNT
},
target_profile=TargetProfile.Adaptive_RI,
)
# Duplicate the options into a dict under "data" for compatibility with Qiskit 1.0, which expects this field
opt.__setattr__("data", {})
for key in opt:
opt.data[key] = getattr(opt, key)
# Likewise, map "update_config" to "update_options" for compatibility with Qiskit 1.0
opt.__setattr__("update_config", lambda **kwargs: opt.update_options(**kwargs))
return opt

def _azure_config(self) -> Dict[str, str]:
config = super()._azure_config()
Expand All @@ -101,12 +110,18 @@ def _azure_config(self) -> Dict[str, str]:
def _get_n_qubits(self, name):
return _get_n_qubits(name)

def _get_default_target_profile(self, name):
if ".h2-" in name:
return TargetProfile.Adaptive_RI
else:
return TargetProfile.Adaptive_RIF

class QuantinuumSyntaxCheckerQirBackend(QuantinuumQirBackendBase):
backend_names = (
# Note: Target names on the same line are equivalent.
"quantinuum.sim.h2-1sc",
"quantinuum.sim.h2-2sc"
"quantinuum.sim.h2-2sc",
"quantinuum.sim.helios-1sc",
)

def __init__(self, name: str, provider: "AzureQuantumProvider", **kwargs):
Expand Down Expand Up @@ -137,14 +152,17 @@ def __init__(self, name: str, provider: "AzureQuantumProvider", **kwargs):
logger.info(
"Initializing %sSyntaxCheckerQirBackend", self._provider_name
)
if "target_profile" not in kwargs:
kwargs["target_profile"] = self._get_default_target_profile(name)
super().__init__(configuration=configuration, provider=provider, **kwargs)


class QuantinuumEmulatorQirBackend(QuantinuumQirBackendBase):
backend_names = (
# Note: Target names on the same line are equivalent.
"quantinuum.sim.h2-1e",
"quantinuum.sim.h2-2e"
"quantinuum.sim.h2-2e",
"quantinuum.sim.helios-1e",
)

def __init__(self, name: str, provider: "AzureQuantumProvider", **kwargs):
Expand Down Expand Up @@ -175,14 +193,17 @@ def __init__(self, name: str, provider: "AzureQuantumProvider", **kwargs):
logger.info(
"Initializing %sEmulatorQirBackend", self._provider_name
)
if "target_profile" not in kwargs:
kwargs["target_profile"] = self._get_default_target_profile(name)
super().__init__(configuration=configuration, provider=provider, **kwargs)


class QuantinuumQPUQirBackend(QuantinuumQirBackendBase):
backend_names = (
# Note: Target names on the same line are equivalent.
"quantinuum.qpu.h2-1",
"quantinuum.qpu.h2-2"
"quantinuum.qpu.h2-2",
"quantinuum.qpu.helios-1",
)

def __init__(self, name: str, provider: "AzureQuantumProvider", **kwargs):
Expand Down Expand Up @@ -211,6 +232,8 @@ def __init__(self, name: str, provider: "AzureQuantumProvider", **kwargs):
kwargs.pop("configuration", default_config)
)
logger.info("Initializing %sQPUQirBackend", self._provider_name)
if "target_profile" not in kwargs:
kwargs["target_profile"] = self._get_default_target_profile(name)
super().__init__(configuration=configuration, provider=provider, **kwargs)


Expand Down
12 changes: 10 additions & 2 deletions azure-quantum/azure/quantum/target/quantinuum.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
##
from typing import Any, Dict, Union
from typing import Any, Dict, Union, Optional
from warnings import warn

from azure.quantum.job.job import Job
Expand All @@ -20,6 +20,9 @@ class Quantinuum(Target):
"quantinuum.qpu.h2-2",
"quantinuum.sim.h2-2sc",
"quantinuum.sim.h2-2e",
"quantinuum.qpu.helios-1",
"quantinuum.sim.helios-1sc",
"quantinuum.sim.helios-1e",
)

_SHOTS_PARAM_NAME = "shots"
Expand All @@ -34,12 +37,17 @@ def __init__(
provider_id: str = "quantinuum",
content_type: str = "application/qasm",
encoding: str = "",
target_profile: Union[str, "TargetProfile"] = "Adaptive_RI",
target_profile: Optional[Union[str, "TargetProfile"]] = None,
**kwargs
):
if capability:
msg = "The 'capability' parameter is not used for the Quantinuum target."
warn(msg, DeprecationWarning)
if target_profile is None:
if ".h2-" in name:
target_profile = "Adaptive_RI"
else:
target_profile = "Adaptive_RIF"
super().__init__(
workspace=workspace,
name=name,
Expand Down
Loading