Skip to content

Commit 4f4b81d

Browse files
committed
add: qulacus device builder
1 parent 235e623 commit 4f4b81d

5 files changed

Lines changed: 16 additions & 15 deletions

File tree

qxmt/configs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class DeviceConfig(BaseModel):
101101
model_config = ConfigDict(extra="forbid")
102102

103103
platform: str
104-
device_name: str
104+
device_name: Optional[str] = None
105105
backend_name: Optional[str] = None
106106
n_qubits: int
107107
shots: Optional[int] = None

qxmt/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
if hasattr(qml.devices, "QubitDevice"):
4646
_pl_devices.append(getattr(qml.devices, "QubitDevice"))
4747
PENNYLANE_DEVICES: tuple[Any, ...] = tuple(_pl_devices) if _pl_devices else tuple()
48+
QULACS_PLATFORM: str = "qulacs"
4849

4950
# set default model name
5051
DEFAULT_MODEL_NAME: str = "model.pkl"

qxmt/devices/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class BaseDevice(ABC):
2020
def __init__(
2121
self,
2222
platform: str,
23-
device_name: str,
23+
device_name: Optional[str],
2424
backend_name: Optional[str],
2525
n_qubits: int,
2626
shots: Optional[int],
@@ -31,7 +31,7 @@ def __init__(
3131
3232
Args:
3333
platform (str): platform name (ex: pennylane, qulacs, etc.)
34-
device_name (str): device name provided by the platform (ex: default.qubit, default.tensor, etc.)
34+
device_name (Optional[str]): device name provided by the platform (ex: default.qubit, default.tensor, etc.)
3535
backend_name (Optional[str]): backend name for the real device
3636
n_qubits (int): number of qubits
3737
shots (Optional[int]): number of shots for the quantum circuit

qxmt/devices/builder.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import Any
22

33
from qxmt.configs import DeviceConfig
4+
from qxmt.constants import PENNYLANE_PLATFORM, QULACS_PLATFORM
45
from qxmt.devices.amazon import AMAZON_BRAKET_DEVICES
56
from qxmt.devices.base import BaseDevice
67
from qxmt.devices.ibmq import IBMQ_REAL_DEVICES
@@ -9,8 +10,8 @@
910

1011
LOGGER = set_default_logger(__name__)
1112

12-
PENNYLANE_PLATFORM: str = "pennylane"
13-
QULACS_PLATFORM: str = "qulacs"
13+
PENNYLANE_DEFAULT_DEVICE_NAME: str = "default.qubit"
14+
QULACS_DEFAULT_DEVICE_NAME: str = "cpu.simulator"
1415

1516

1617
class DeviceBuilder:
@@ -104,7 +105,7 @@ def build(self) -> BaseDevice:
104105

105106
return PennyLaneDevice(
106107
platform=platform,
107-
device_name=device_name,
108+
device_name=device_name if device_name is not None else PENNYLANE_DEFAULT_DEVICE_NAME,
108109
backend_name=backend_name,
109110
n_qubits=n_qubits,
110111
shots=shots,
@@ -116,7 +117,7 @@ def build(self) -> BaseDevice:
116117

117118
return QulacsDevice(
118119
platform=platform,
119-
device_name=device_name,
120+
device_name=device_name if device_name is not None else QULACS_DEFAULT_DEVICE_NAME,
120121
backend_name=backend_name,
121122
n_qubits=n_qubits,
122123
shots=shots,

qxmt/devices/device_info.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
from pydantic import BaseModel
33
from qiskit_ibm_runtime import QiskitRuntimeService
44

5-
from qxmt.constants import PENNYLANE_DEVICES
5+
from qxmt.constants import PENNYLANE_DEVICES, PENNYLANE_PLATFORM
66
from qxmt.devices.base import BaseDevice
77
from qxmt.exceptions import InvalidQunatumDeviceError
8-
from qxmt.types import QuantumDeviceType
98

109
STATUS_ONLINE = "ONLINE"
1110
STATUS_OFFLINE = "OFFLINE"
@@ -17,11 +16,11 @@ class RemoteDeviceStatus(BaseModel):
1716
status: str
1817

1918

20-
def get_platform_from_device(device: BaseDevice | QuantumDeviceType) -> str:
19+
def get_platform_from_device(device: BaseDevice | object) -> str:
2120
"""Get the platform name from the device.
2221
2322
Args:
24-
device (BaseDevice | QuantumDeviceType): quantum device
23+
device (BaseDevice | object): quantum device
2524
2625
Returns:
2726
str: platform name
@@ -30,16 +29,16 @@ def get_platform_from_device(device: BaseDevice | QuantumDeviceType) -> str:
3029
return device.platform
3130

3231
if isinstance(device, PENNYLANE_DEVICES):
33-
return "pennylane"
32+
return PENNYLANE_PLATFORM
3433
else:
3534
raise InvalidQunatumDeviceError(f"Device {device} is not supported.")
3635

3736

38-
def get_number_of_qubits(device: BaseDevice | QuantumDeviceType) -> int:
37+
def get_number_of_qubits(device: BaseDevice | object) -> int:
3938
"""Get the number of qubits from the device.
4039
4140
Args:
42-
device (BaseDevice | QuantumDeviceType): quantum device
41+
device (BaseDevice | object): quantum device
4342
4443
Returns:
4544
int: number of qubits
@@ -48,7 +47,7 @@ def get_number_of_qubits(device: BaseDevice | QuantumDeviceType) -> int:
4847
return device.n_qubits
4948

5049
if isinstance(device, PENNYLANE_DEVICES):
51-
return len(device.wires)
50+
return len(device.wires) # type: ignore[attr-defined]
5251
else:
5352
raise InvalidQunatumDeviceError(f"Device {device} is not supported.")
5453

0 commit comments

Comments
 (0)