boulder-opal-scale-up-sdk 1.0.6__tar.gz → 1.0.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/PKG-INFO +2 -2
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/common/dtypes.py +29 -5
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/controller/qblox.py +10 -2
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/power_rabi.py +1 -1
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/power_rabi_ef.py +1 -1
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_bias.py +1 -1
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/t2.py +1 -1
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/waveforms.py +15 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/device_pb2.py +16 -16
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/device_pb2.pyi +10 -4
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/routines/__init__.py +2 -0
- boulder_opal_scale_up_sdk-1.0.7/boulderopalscaleupsdk/routines/coupler_discovery.py +37 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/routines/transmon_retuning.py +0 -4
- boulder_opal_scale_up_sdk-1.0.7/boulderopalscaleupsdk/solutions/__init__.py +22 -0
- boulder_opal_scale_up_sdk-1.0.7/boulderopalscaleupsdk/solutions/common.py +23 -0
- boulder_opal_scale_up_sdk-1.0.7/boulderopalscaleupsdk/solutions/placeholder_solution.py +28 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/third_party/quantum_machines/__init__.py +15 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/third_party/quantum_machines/config.py +0 -3
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/pyproject.toml +2 -2
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/LICENSE +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/README.md +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/agent/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/agent/worker.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/common/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/common/typeclasses.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/constants.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/common.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/config_loader.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/controller/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/controller/base.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/controller/quantum_machines.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/controller/resolver.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/defcal.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/device.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/processor/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/processor/common.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/device/processor/superconducting_processor.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/errors.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/chi01_scan.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/common.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/cz_spectroscopy_by_bias.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/drag_leakage_calibration.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/fine_amplitude_calibration.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/ramsey.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/ramsey_ef.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/readout_classifier.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/readout_optimization.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/resonator_spectroscopy.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_power.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/t1.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/t2_echo.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/transmon_anharmonicity.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/transmon_spectroscopy.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/voltage_bias_fine_tune.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/experiments/zz_ramsey.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/grpc_interceptors/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/grpc_interceptors/auth.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/grpc_interceptors/error.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/plotting/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/plotting/dtypes.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/agent_pb2.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/agent_pb2.pyi +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/agent_pb2_grpc.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/device_pb2_grpc.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/job_pb2.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/job_pb2.pyi +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/job_pb2_grpc.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/task_pb2.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/task_pb2.pyi +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/protobuf/v1/task_pb2_grpc.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/py.typed +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/routines/common.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/routines/one_qubit_calibration.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/routines/resonator_mapping.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/routines/transmon_coherence.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/routines/transmon_discovery.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/third_party/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/third_party/quantum_machines/constants.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/utils/__init__.py +0 -0
- {boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/utils/serial_utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: boulder-opal-scale-up-sdk
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.7
|
4
4
|
Summary: Q-CTRL Boulder Opal Scale Up Python SDK
|
5
5
|
License: https://q-ctrl.com/terms
|
6
6
|
Keywords: black opal,boulder opal,fire opal,nisq,open controls,q control,q ctrl,q-control,q-ctrl,qcontrol,qctrl,quantum,quantum algorithms,quantum circuits,quantum coding,quantum coding software,quantum computing,quantum control,quantum control software,quantum control theory,quantum engineering,quantum error correction,quantum firmware,quantum fundamentals,quantum sensing,qubit,qudit
|
@@ -33,7 +33,7 @@ Requires-Dist: pydantic (>=2.10.4,<3.0.0)
|
|
33
33
|
Requires-Dist: pydantic-settings (>=2.7.0,<3.0.0)
|
34
34
|
Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
|
35
35
|
Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
|
36
|
-
Requires-Dist: qm-qua (==1.2.
|
36
|
+
Requires-Dist: qm-qua (==1.2.3) ; extra == "quantum-machines"
|
37
37
|
Project-URL: Facebook, https://www.facebook.com/qctrl
|
38
38
|
Project-URL: GitHub, https://github.com/qctrl
|
39
39
|
Project-URL: Homepage, https://q-ctrl.com
|
@@ -33,7 +33,7 @@ from dateutil.parser import isoparse
|
|
33
33
|
from pydantic import BaseModel, BeforeValidator, ConfigDict, Field, PlainSerializer, TypeAdapter
|
34
34
|
from pydantic.dataclasses import dataclass
|
35
35
|
|
36
|
-
from boulderopalscaleupsdk.plotting
|
36
|
+
from boulderopalscaleupsdk.plotting import Plot
|
37
37
|
|
38
38
|
GrpcMetadata = list[tuple[str, str | bytes]]
|
39
39
|
|
@@ -179,6 +179,9 @@ class Duration:
|
|
179
179
|
return bool(self._np_rep == other._np_rep)
|
180
180
|
return False
|
181
181
|
|
182
|
+
def __str__(self):
|
183
|
+
return f"{self.value} {self.unit.value}"
|
184
|
+
|
182
185
|
def convert(self, unit: TimeUnit) -> Duration | InvalidDurationConversion:
|
183
186
|
val: np.float64 = self._np_rep / np.timedelta64(1, unit)
|
184
187
|
if val.is_integer():
|
@@ -342,14 +345,17 @@ class JobSummary(BaseModel):
|
|
342
345
|
|
343
346
|
class JobDataEntry(BaseModel):
|
344
347
|
message: str
|
345
|
-
created_at: ISO8601DatetimeUTCLike
|
346
|
-
dt: str
|
347
|
-
elapsed_time: str
|
348
|
-
plots: list[Plot] = []
|
349
348
|
|
350
349
|
class Config:
|
351
350
|
extra = "allow"
|
352
351
|
|
352
|
+
def get_display_items(self) -> list[str | Plot]:
|
353
|
+
items: list[str | Plot] = [self.message]
|
354
|
+
|
355
|
+
if plots := getattr(self, "plots", []):
|
356
|
+
items.extend(TypeAdapter(Plot).validate_python(plot) for plot in plots)
|
357
|
+
return items
|
358
|
+
|
353
359
|
|
354
360
|
class JobData(BaseModel):
|
355
361
|
id: str
|
@@ -359,6 +365,24 @@ class JobData(BaseModel):
|
|
359
365
|
device_name: str
|
360
366
|
data: list[JobDataEntry]
|
361
367
|
|
368
|
+
def get_display_items(self) -> list[str | Plot]:
|
369
|
+
items: list[str | Plot] = []
|
370
|
+
message = "\n".join(
|
371
|
+
[
|
372
|
+
"JobData summary:",
|
373
|
+
f" - id: {self.id}",
|
374
|
+
f" - name: {self.name}",
|
375
|
+
f" - session_id: {self.session_id}",
|
376
|
+
f" - created_at: {self.created_at.isoformat()}",
|
377
|
+
f" - device_name: {self.device_name}",
|
378
|
+
],
|
379
|
+
)
|
380
|
+
items.append(message)
|
381
|
+
|
382
|
+
for job_data_entry in self.data:
|
383
|
+
items.extend(job_data_entry.get_display_items())
|
384
|
+
return items
|
385
|
+
|
362
386
|
|
363
387
|
DEFAULT_JOB_HISTORY_PAGE = 1
|
364
388
|
DEFAULT_JOB_HISTORY_PAGE_SIZE = 10
|
@@ -54,7 +54,7 @@ from dataclasses import dataclass
|
|
54
54
|
from typing import Annotated, Any, ClassVar, Literal, Self, TypeVar
|
55
55
|
|
56
56
|
import numpy as np
|
57
|
-
from pydantic import BaseModel, BeforeValidator, Field, PlainSerializer, model_validator
|
57
|
+
from pydantic import BaseModel, BeforeValidator, ConfigDict, Field, PlainSerializer, model_validator
|
58
58
|
|
59
59
|
from boulderopalscaleupsdk.device.controller.base import Backend, ControllerType
|
60
60
|
|
@@ -323,7 +323,9 @@ class QBLOXControllerInfo(BaseModel): # pragma: no cover
|
|
323
323
|
# Instrument management
|
324
324
|
# ==================================================================================================
|
325
325
|
class SequencerParams(BaseModel):
|
326
|
-
|
326
|
+
model_config = ConfigDict(validate_assignment=True)
|
327
|
+
|
328
|
+
nco_freq: float | None = Field(default=None, ge=-500e6, le=500e6)
|
327
329
|
gain_awg_path0: float | None = Field(default=None, ge=-1.0, le=1.0)
|
328
330
|
offset_awg_path0: float | None = Field(default=None, ge=-1.0, le=1.0)
|
329
331
|
gain_awg_path1: float | None = Field(default=None, ge=-1.0, le=1.0)
|
@@ -338,6 +340,8 @@ class SequencerParams(BaseModel):
|
|
338
340
|
|
339
341
|
|
340
342
|
class QcmParams(BaseModel):
|
343
|
+
model_config = ConfigDict(validate_assignment=True)
|
344
|
+
|
341
345
|
out0_offset: float | None = Field(default=None, ge=-2.5, le=2.5)
|
342
346
|
out1_offset: float | None = Field(default=None, ge=-2.5, le=2.5)
|
343
347
|
out2_offset: float | None = Field(default=None, ge=-2.5, le=2.5)
|
@@ -354,6 +358,8 @@ class QcmParams(BaseModel):
|
|
354
358
|
|
355
359
|
|
356
360
|
class QcmRfParams(BaseModel):
|
361
|
+
model_config = ConfigDict(validate_assignment=True)
|
362
|
+
|
357
363
|
out0_att: int | None = Field(default=None, ge=0, le=60, multiple_of=2)
|
358
364
|
out1_att: int | None = Field(default=None, ge=0, le=60, multiple_of=2)
|
359
365
|
|
@@ -375,6 +381,8 @@ class QcmRfParams(BaseModel):
|
|
375
381
|
|
376
382
|
|
377
383
|
class QrmRfParams(BaseModel):
|
384
|
+
model_config = ConfigDict(validate_assignment=True)
|
385
|
+
|
378
386
|
out0_att: int | None = Field(default=None, ge=0, le=60, multiple_of=2)
|
379
387
|
|
380
388
|
out0_in0_lo_freq: float | None = Field(default=None, gt=0)
|
@@ -44,7 +44,7 @@ class PowerRabi(Experiment):
|
|
44
44
|
shot_count : int, optional
|
45
45
|
The number of shots to take. Defaults to 400.
|
46
46
|
pulse_vp : float, optional
|
47
|
-
The voltage per pulse, in
|
47
|
+
The voltage per pulse, in volts. Defaults to the amplitude of the X gate.
|
48
48
|
measure_waveform : ConstantWaveform or None, optional
|
49
49
|
The waveform to use for the measurement pulse.
|
50
50
|
Defaults to the measurement defcal.
|
@@ -44,7 +44,7 @@ class PowerRabiEF(Experiment):
|
|
44
44
|
shot_count : int, optional
|
45
45
|
The number of shots to take. Defaults to 400.
|
46
46
|
pulse_vp : float, optional
|
47
|
-
The voltage per pulse, in
|
47
|
+
The voltage per pulse, in volts. Defaults to the amplitude of the X gate.
|
48
48
|
measure_waveform : ConstantWaveform or None, optional
|
49
49
|
The waveform to use for the measurement pulse.
|
50
50
|
Defaults to the measurement defcal.
|
@@ -42,7 +42,7 @@ class ResonatorSpectroscopyByBias(Experiment):
|
|
42
42
|
Defaults to a scan around the readout frequency.
|
43
43
|
biases : list[int] or LinspaceIterable or RangeIterable or CWSIterable \
|
44
44
|
or HypIterable, optional
|
45
|
-
The biases at which to scan, in
|
45
|
+
The biases at which to scan, in volts.
|
46
46
|
Defaults to 21 points between -0.49 and 0.49.
|
47
47
|
recycle_delay_ns : int, optional
|
48
48
|
The delay between consecutive shots, in nanoseconds. Defaults to 1,000 ns.
|
@@ -29,6 +29,9 @@ class ConstantWaveform(_Waveform): # pragma: no cover
|
|
29
29
|
amplitude: float
|
30
30
|
waveform_type: Literal["Constant"] = "Constant"
|
31
31
|
|
32
|
+
def __str__(self):
|
33
|
+
return f"ConstantWaveform(duration_ns={self.duration_ns}, amplitude={self.amplitude})"
|
34
|
+
|
32
35
|
|
33
36
|
@dataclass
|
34
37
|
class GaussianWaveform(_Waveform): # pragma: no cover
|
@@ -37,6 +40,12 @@ class GaussianWaveform(_Waveform): # pragma: no cover
|
|
37
40
|
sigma: float
|
38
41
|
waveform_type: Literal["Gaussian"] = "Gaussian"
|
39
42
|
|
43
|
+
def __str__(self):
|
44
|
+
return (
|
45
|
+
f"GaussianWaveform(duration_ns={self.duration_ns}, "
|
46
|
+
f"amplitude={self.amplitude}, sigma={self.sigma})"
|
47
|
+
)
|
48
|
+
|
40
49
|
|
41
50
|
@dataclass
|
42
51
|
class DragCosineWaveform(_Waveform): # pragma: no cover
|
@@ -47,6 +56,12 @@ class DragCosineWaveform(_Waveform): # pragma: no cover
|
|
47
56
|
center: float
|
48
57
|
waveform_type: Literal["DragCosineWaveform"] = "DragCosineWaveform"
|
49
58
|
|
59
|
+
def __str__(self):
|
60
|
+
return (
|
61
|
+
f"DragCosineWaveform(duration_ns={self.duration_ns}, amplitude={self.amplitude}, "
|
62
|
+
f"drag={self.drag}, buffer_ns={self.buffer_ns}, center={self.center})"
|
63
|
+
)
|
64
|
+
|
50
65
|
|
51
66
|
Waveform = Annotated[
|
52
67
|
ConstantWaveform | GaussianWaveform | DragCosineWaveform,
|
@@ -16,7 +16,7 @@ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
|
|
16
16
|
from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
|
17
17
|
|
18
18
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n.boulderopalscaleupsdk/protobuf/v1/device.proto\x12!boulderopalscaleupsdk.protobuf.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1cgoogle/protobuf/struct.proto\"b\n\x12SetSnapshotRequest\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x04\x64\x61ta\"P\n\x13SetSnapshotResponse\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\x12\x18\n\x07version\x18\x02 \x01(\x05R\x07version\"O\n\x12GetSnapshotRequest\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\x12\x18\n\x07version\x18\x02 \x01(\x05R\x07version\"B\n\x13GetSnapshotResponse\x12+\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x04\x64\x61ta\"\x85\x01\n\rCreateRequest\x12\x19\n\x08\x61pp_name\x18\x01 \x01(\tR\x07\x61ppName\x12\x1f\n\x0b\x64\x65vice_name\x18\x02 \x01(\tR\ndeviceName\x12\x38\n\x0b\x64\x65vice_data\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\ndeviceData\"$\n\x0e\x43reateResponse\x12\x12\n\x04\x64one\x18\x01 \x01(\x08R\x04\x64one\"]\n\x0b\x43opyRequest\x12(\n\x10\x66rom_device_name\x18\x01 \x01(\tR\x0e\x66romDeviceName\x12$\n\x0eto_device_name\x18\x02 \x01(\tR\x0ctoDeviceName\"\"\n\x0c\x43opyResponse\x12\x12\n\x04\x64one\x18\x01 \x01(\x08R\x04\x64one\"L\n\x0eGetDataRequest\x12\x19\n\x08\x61pp_name\x18\x01 \x01(\tR\x07\x61ppName\x12\x1f\n\x0b\x64\x65vice_name\x18\x02 \x01(\tR\ndeviceName\"\xc6\x01\n\x0fGetDataResponse\x12>\n\x0eprocessor_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\rprocessorData\x12@\n\x0f\x63ontroller_data\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x0e\x63ontrollerData\x12\x31\n\x07\x64\x65\x66\x63\x61ls\x18\x04 \x03(\x0b\x32\x17.google.protobuf.StructR\x07\x64\x65\x66\x63\x61ls\"\x8b\x01\n\rUpdateRequest\x12\x19\n\x08\x61pp_name\x18\x01 \x01(\tR\x07\x61ppName\x12\x1f\n\x0b\x64\x65vice_name\x18\x02 \x01(\tR\ndeviceName\x12>\n\x0eprocessor_data\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\rprocessorData\"\x92\x01\n\x0eUpdateResponse\x12>\n\x0eprocessor_data\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\rprocessorData\x12@\n\x0f\x63ontroller_data\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructR\x0e\x63ontrollerData\"K\n\rDeleteRequest\x12\x19\n\x08\x61pp_name\x18\x01 \x01(\tR\x07\x61ppName\x12\x1f\n\x0b\x64\x65vice_name\x18\x02 \x01(\tR\ndeviceName\"$\n\x0e\x44\x65leteResponse\x12\x12\n\x04\x64one\x18\x01 \x01(\x08R\x04\x64one\"5\n\x12GetMetadataRequest\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\"J\n\x13GetMetadataResponse\x12\x33\n\x08metadata\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x08metadata\"\
|
19
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n.boulderopalscaleupsdk/protobuf/v1/device.proto\x12!boulderopalscaleupsdk.protobuf.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1cgoogle/protobuf/struct.proto\"b\n\x12SetSnapshotRequest\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\x12+\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\x04\x64\x61ta\"P\n\x13SetSnapshotResponse\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\x12\x18\n\x07version\x18\x02 \x01(\x05R\x07version\"O\n\x12GetSnapshotRequest\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\x12\x18\n\x07version\x18\x02 \x01(\x05R\x07version\"B\n\x13GetSnapshotResponse\x12+\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x04\x64\x61ta\"\x85\x01\n\rCreateRequest\x12\x19\n\x08\x61pp_name\x18\x01 \x01(\tR\x07\x61ppName\x12\x1f\n\x0b\x64\x65vice_name\x18\x02 \x01(\tR\ndeviceName\x12\x38\n\x0b\x64\x65vice_data\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\ndeviceData\"$\n\x0e\x43reateResponse\x12\x12\n\x04\x64one\x18\x01 \x01(\x08R\x04\x64one\"]\n\x0b\x43opyRequest\x12(\n\x10\x66rom_device_name\x18\x01 \x01(\tR\x0e\x66romDeviceName\x12$\n\x0eto_device_name\x18\x02 \x01(\tR\x0ctoDeviceName\"\"\n\x0c\x43opyResponse\x12\x12\n\x04\x64one\x18\x01 \x01(\x08R\x04\x64one\"L\n\x0eGetDataRequest\x12\x19\n\x08\x61pp_name\x18\x01 \x01(\tR\x07\x61ppName\x12\x1f\n\x0b\x64\x65vice_name\x18\x02 \x01(\tR\ndeviceName\"\xc6\x01\n\x0fGetDataResponse\x12>\n\x0eprocessor_data\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructR\rprocessorData\x12@\n\x0f\x63ontroller_data\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x0e\x63ontrollerData\x12\x31\n\x07\x64\x65\x66\x63\x61ls\x18\x04 \x03(\x0b\x32\x17.google.protobuf.StructR\x07\x64\x65\x66\x63\x61ls\"\x8b\x01\n\rUpdateRequest\x12\x19\n\x08\x61pp_name\x18\x01 \x01(\tR\x07\x61ppName\x12\x1f\n\x0b\x64\x65vice_name\x18\x02 \x01(\tR\ndeviceName\x12>\n\x0eprocessor_data\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\rprocessorData\"\x92\x01\n\x0eUpdateResponse\x12>\n\x0eprocessor_data\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\rprocessorData\x12@\n\x0f\x63ontroller_data\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructR\x0e\x63ontrollerData\"K\n\rDeleteRequest\x12\x19\n\x08\x61pp_name\x18\x01 \x01(\tR\x07\x61ppName\x12\x1f\n\x0b\x64\x65vice_name\x18\x02 \x01(\tR\ndeviceName\"$\n\x0e\x44\x65leteResponse\x12\x12\n\x04\x64one\x18\x01 \x01(\x08R\x04\x64one\"5\n\x12GetMetadataRequest\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\"J\n\x13GetMetadataResponse\x12\x33\n\x08metadata\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x08metadata\"U\n\x1cGetAllDevicesMetadataRequest\x12\x14\n\x05limit\x18\x01 \x01(\x05R\x05limit\x12\x1f\n\x0bnext_cursor\x18\x02 \x01(\tR\nnextCursor\"w\n\x1dGetAllDevicesMetadataResponse\x12\x35\n\tmetadatas\x18\x01 \x03(\x0b\x32\x17.google.protobuf.StructR\tmetadatas\x12\x1f\n\x0bnext_cursor\x18\x02 \x01(\tR\nnextCursor\"\x90\x01\n\x0bMaskRequest\x12\x44\n\x04mode\x18\x01 \x01(\x0e\x32\x30.boulderopalscaleupsdk.protobuf.v1.SelectionModeR\x04mode\x12\x1f\n\x0b\x64\x65vice_name\x18\x02 \x01(\tR\ndeviceName\x12\x1a\n\x08\x65lements\x18\x03 \x03(\tR\x08\x65lements\"\"\n\x0cMaskResponse\x12\x12\n\x04\x64one\x18\x01 \x01(\x08R\x04\x64one\"L\n\rUnmaskRequest\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\x12\x1a\n\x08\x65lements\x18\x02 \x03(\tR\x08\x65lements\"$\n\x0eUnmaskResponse\x12\x12\n\x04\x64one\x18\x01 \x01(\x08R\x04\x64one*a\n\rSelectionMode\x12\x1e\n\x1aSELECTION_MODE_UNSPECIFIED\x10\x00\x12\x18\n\x14SELECTION_MODE_ITEMS\x10\x01\x12\x16\n\x12SELECTION_MODE_ALL\x10\x02\x32\xb8\r\n\x14\x44\x65viceManagerService\x12\x8b\x01\n\x06\x43reate\x12\x30.boulderopalscaleupsdk.protobuf.v1.CreateRequest\x1a\x31.boulderopalscaleupsdk.protobuf.v1.CreateResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/device/create:\x01*\x12\x83\x01\n\x04\x43opy\x12..boulderopalscaleupsdk.protobuf.v1.CopyRequest\x1a/.boulderopalscaleupsdk.protobuf.v1.CopyResponse\"\x1a\x82\xd3\xe4\x93\x02\x14\"\x0f/v1/device/copy:\x01*\x12\x97\x01\n\x07GetData\x12\x31.boulderopalscaleupsdk.protobuf.v1.GetDataRequest\x1a\x32.boulderopalscaleupsdk.protobuf.v1.GetDataResponse\"%\x82\xd3\xe4\x93\x02\x1f\"\x1a/v1/device/get_device_data:\x01*\x12\x8b\x01\n\x06Update\x12\x30.boulderopalscaleupsdk.protobuf.v1.UpdateRequest\x1a\x31.boulderopalscaleupsdk.protobuf.v1.UpdateResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/device/update:\x01*\x12\x83\x01\n\x04Mask\x12..boulderopalscaleupsdk.protobuf.v1.MaskRequest\x1a/.boulderopalscaleupsdk.protobuf.v1.MaskResponse\"\x1a\x82\xd3\xe4\x93\x02\x14\"\x0f/v1/device/mask:\x01*\x12\x8b\x01\n\x06Unmask\x12\x30.boulderopalscaleupsdk.protobuf.v1.UnmaskRequest\x1a\x31.boulderopalscaleupsdk.protobuf.v1.UnmaskResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/device/unmask:\x01*\x12\x8b\x01\n\x06\x44\x65lete\x12\x30.boulderopalscaleupsdk.protobuf.v1.DeleteRequest\x1a\x31.boulderopalscaleupsdk.protobuf.v1.DeleteResponse\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/device/delete:\x01*\x12\xa7\x01\n\x0bGetMetadata\x12\x35.boulderopalscaleupsdk.protobuf.v1.GetMetadataRequest\x1a\x36.boulderopalscaleupsdk.protobuf.v1.GetMetadataResponse\")\x82\xd3\xe4\x93\x02#\"\x1e/v1/device/get_device_metadata:\x01*\x12\xd1\x01\n\x15GetAllDevicesMetadata\x12?.boulderopalscaleupsdk.protobuf.v1.GetAllDevicesMetadataRequest\x1a@.boulderopalscaleupsdk.protobuf.v1.GetAllDevicesMetadataResponse\"5\x82\xd3\xe4\x93\x02/\"*/v1/device/get_all_devices_metadata_by_org:\x01*\x12\xa0\x01\n\x0bGetSnapshot\x12\x35.boulderopalscaleupsdk.protobuf.v1.GetSnapshotRequest\x1a\x36.boulderopalscaleupsdk.protobuf.v1.GetSnapshotResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/device/get_snapshot:\x01*\x12\xa0\x01\n\x0bSetSnapshot\x12\x35.boulderopalscaleupsdk.protobuf.v1.SetSnapshotRequest\x1a\x36.boulderopalscaleupsdk.protobuf.v1.SetSnapshotResponse\"\"\x82\xd3\xe4\x93\x02\x1c\"\x17/v1/device/set_snapshot:\x01*B\xaa\x02\n%com.boulderopalscaleupsdk.protobuf.v1B\x0b\x44\x65viceProtoP\x01ZNgithub.com/qctrl/boulder-opal-scale-up/proto/boulderopalscaleupsdk/protobuf/v1\xa2\x02\x03\x42PX\xaa\x02!Boulderopalscaleupsdk.Protobuf.V1\xca\x02!Boulderopalscaleupsdk\\Protobuf\\V1\xe2\x02-Boulderopalscaleupsdk\\Protobuf\\V1\\GPBMetadata\xea\x02#Boulderopalscaleupsdk::Protobuf::V1b\x06proto3')
|
20
20
|
|
21
21
|
_globals = globals()
|
22
22
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -46,8 +46,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
46
46
|
_globals['_DEVICEMANAGERSERVICE'].methods_by_name['GetSnapshot']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/device/get_snapshot:\001*'
|
47
47
|
_globals['_DEVICEMANAGERSERVICE'].methods_by_name['SetSnapshot']._loaded_options = None
|
48
48
|
_globals['_DEVICEMANAGERSERVICE'].methods_by_name['SetSnapshot']._serialized_options = b'\202\323\344\223\002\034\"\027/v1/device/set_snapshot:\001*'
|
49
|
-
_globals['_SELECTIONMODE']._serialized_start=
|
50
|
-
_globals['_SELECTIONMODE']._serialized_end=
|
49
|
+
_globals['_SELECTIONMODE']._serialized_start=2104
|
50
|
+
_globals['_SELECTIONMODE']._serialized_end=2201
|
51
51
|
_globals['_SETSNAPSHOTREQUEST']._serialized_start=145
|
52
52
|
_globals['_SETSNAPSHOTREQUEST']._serialized_end=243
|
53
53
|
_globals['_SETSNAPSHOTRESPONSE']._serialized_start=245
|
@@ -81,17 +81,17 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
81
81
|
_globals['_GETMETADATARESPONSE']._serialized_start=1521
|
82
82
|
_globals['_GETMETADATARESPONSE']._serialized_end=1595
|
83
83
|
_globals['_GETALLDEVICESMETADATAREQUEST']._serialized_start=1597
|
84
|
-
_globals['_GETALLDEVICESMETADATAREQUEST']._serialized_end=
|
85
|
-
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_start=
|
86
|
-
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_end=
|
87
|
-
_globals['_MASKREQUEST']._serialized_start=
|
88
|
-
_globals['_MASKREQUEST']._serialized_end=
|
89
|
-
_globals['_MASKRESPONSE']._serialized_start=
|
90
|
-
_globals['_MASKRESPONSE']._serialized_end=
|
91
|
-
_globals['_UNMASKREQUEST']._serialized_start=
|
92
|
-
_globals['_UNMASKREQUEST']._serialized_end=
|
93
|
-
_globals['_UNMASKRESPONSE']._serialized_start=
|
94
|
-
_globals['_UNMASKRESPONSE']._serialized_end=
|
95
|
-
_globals['_DEVICEMANAGERSERVICE']._serialized_start=
|
96
|
-
_globals['_DEVICEMANAGERSERVICE']._serialized_end=
|
84
|
+
_globals['_GETALLDEVICESMETADATAREQUEST']._serialized_end=1682
|
85
|
+
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_start=1684
|
86
|
+
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_end=1803
|
87
|
+
_globals['_MASKREQUEST']._serialized_start=1806
|
88
|
+
_globals['_MASKREQUEST']._serialized_end=1950
|
89
|
+
_globals['_MASKRESPONSE']._serialized_start=1952
|
90
|
+
_globals['_MASKRESPONSE']._serialized_end=1986
|
91
|
+
_globals['_UNMASKREQUEST']._serialized_start=1988
|
92
|
+
_globals['_UNMASKREQUEST']._serialized_end=2064
|
93
|
+
_globals['_UNMASKRESPONSE']._serialized_start=2066
|
94
|
+
_globals['_UNMASKRESPONSE']._serialized_end=2102
|
95
|
+
_globals['_DEVICEMANAGERSERVICE']._serialized_start=2204
|
96
|
+
_globals['_DEVICEMANAGERSERVICE']._serialized_end=3924
|
97
97
|
# @@protoc_insertion_point(module_scope)
|
@@ -140,14 +140,20 @@ class GetMetadataResponse(_message.Message):
|
|
140
140
|
def __init__(self, metadata: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ...
|
141
141
|
|
142
142
|
class GetAllDevicesMetadataRequest(_message.Message):
|
143
|
-
__slots__ = ()
|
144
|
-
|
143
|
+
__slots__ = ("limit", "next_cursor")
|
144
|
+
LIMIT_FIELD_NUMBER: _ClassVar[int]
|
145
|
+
NEXT_CURSOR_FIELD_NUMBER: _ClassVar[int]
|
146
|
+
limit: int
|
147
|
+
next_cursor: str
|
148
|
+
def __init__(self, limit: _Optional[int] = ..., next_cursor: _Optional[str] = ...) -> None: ...
|
145
149
|
|
146
150
|
class GetAllDevicesMetadataResponse(_message.Message):
|
147
|
-
__slots__ = ("metadatas",)
|
151
|
+
__slots__ = ("metadatas", "next_cursor")
|
148
152
|
METADATAS_FIELD_NUMBER: _ClassVar[int]
|
153
|
+
NEXT_CURSOR_FIELD_NUMBER: _ClassVar[int]
|
149
154
|
metadatas: _containers.RepeatedCompositeFieldContainer[_struct_pb2.Struct]
|
150
|
-
|
155
|
+
next_cursor: str
|
156
|
+
def __init__(self, metadatas: _Optional[_Iterable[_Union[_struct_pb2.Struct, _Mapping]]] = ..., next_cursor: _Optional[str] = ...) -> None: ...
|
151
157
|
|
152
158
|
class MaskRequest(_message.Message):
|
153
159
|
__slots__ = ("mode", "device_name", "elements")
|
@@ -14,6 +14,7 @@
|
|
14
14
|
"""Routine library."""
|
15
15
|
|
16
16
|
__all__ = [
|
17
|
+
"CouplerDiscovery",
|
17
18
|
"OneQubitCalibration",
|
18
19
|
"ResonatorMapping",
|
19
20
|
"Routine",
|
@@ -23,6 +24,7 @@ __all__ = [
|
|
23
24
|
]
|
24
25
|
|
25
26
|
from .common import Routine
|
27
|
+
from .coupler_discovery import CouplerDiscovery
|
26
28
|
from .one_qubit_calibration import OneQubitCalibration
|
27
29
|
from .resonator_mapping import ResonatorMapping
|
28
30
|
from .transmon_coherence import TransmonCoherence
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright 2025 Q-CTRL. All rights reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Q-CTRL Terms of service (the "License"). Unauthorized
|
4
|
+
# copying or use of this file, via any medium, is strictly prohibited.
|
5
|
+
# Proprietary and confidential. You may not use this file except in compliance
|
6
|
+
# with the License. You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# https://q-ctrl.com/terms
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS. See the
|
12
|
+
# License for the specific language.
|
13
|
+
|
14
|
+
from pydantic import PrivateAttr
|
15
|
+
|
16
|
+
from .common import Routine
|
17
|
+
|
18
|
+
|
19
|
+
class CouplerDiscovery(Routine):
|
20
|
+
"""
|
21
|
+
Parameters for running a coupler discovery routine.
|
22
|
+
|
23
|
+
Attributes
|
24
|
+
----------
|
25
|
+
control_transmon : str
|
26
|
+
The reference for the transmon to use as control.
|
27
|
+
target_transmon : str
|
28
|
+
The reference for the transmon to target.
|
29
|
+
bias_values : list[float]
|
30
|
+
The list of bias values to sweep the coupler through.
|
31
|
+
"""
|
32
|
+
|
33
|
+
_routine_name: str = PrivateAttr("coupler_discovery")
|
34
|
+
|
35
|
+
control_transmon: str
|
36
|
+
target_transmon: str
|
37
|
+
bias_values: list[float]
|
@@ -29,13 +29,9 @@ class TransmonRetuning(Routine):
|
|
29
29
|
spectroscopy_waveform : ConstantWaveform or None, optional
|
30
30
|
The drive pulse used during transmon spectroscopy.
|
31
31
|
Defaults to a 10,000 ns pulse whose amplitude is defined by the logic of the experiment.
|
32
|
-
force_rerun : bool, optional
|
33
|
-
Whether to rerun the entire routine regardless transmon's current calibration status.
|
34
|
-
Defaults to False.
|
35
32
|
"""
|
36
33
|
|
37
34
|
_routine_name: str = PrivateAttr("transmon_retuning")
|
38
35
|
|
39
36
|
transmon: str
|
40
37
|
spectroscopy_waveform: ConstantWaveform | None = None
|
41
|
-
force_rerun: bool = False
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Copyright 2025 Q-CTRL. All rights reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Q-CTRL Terms of service (the "License"). Unauthorized
|
4
|
+
# copying or use of this file, via any medium, is strictly prohibited.
|
5
|
+
# Proprietary and confidential. You may not use this file except in compliance
|
6
|
+
# with the License. You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# https://q-ctrl.com/terms
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS. See the
|
12
|
+
# License for the specific language.
|
13
|
+
|
14
|
+
"""Solution library."""
|
15
|
+
|
16
|
+
__all__ = [
|
17
|
+
"PlaceholderSolution",
|
18
|
+
"Solution",
|
19
|
+
]
|
20
|
+
|
21
|
+
from .common import Solution
|
22
|
+
from .placeholder_solution import PlaceholderSolution
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Copyright 2025 Q-CTRL. All rights reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Q-CTRL Terms of service (the "License"). Unauthorized
|
4
|
+
# copying or use of this file, via any medium, is strictly prohibited.
|
5
|
+
# Proprietary and confidential. You may not use this file except in compliance
|
6
|
+
# with the License. You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# https://q-ctrl.com/terms
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS. See the
|
12
|
+
# License for the specific language.
|
13
|
+
|
14
|
+
from pydantic import BaseModel, ConfigDict
|
15
|
+
|
16
|
+
|
17
|
+
class Solution(BaseModel):
|
18
|
+
model_config = ConfigDict(extra="forbid")
|
19
|
+
_solution_name: str
|
20
|
+
|
21
|
+
@property
|
22
|
+
def solution_name(self) -> str:
|
23
|
+
return self._solution_name
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Copyright 2025 Q-CTRL. All rights reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Q-CTRL Terms of service (the "License"). Unauthorized
|
4
|
+
# copying or use of this file, via any medium, is strictly prohibited.
|
5
|
+
# Proprietary and confidential. You may not use this file except in compliance
|
6
|
+
# with the License. You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# https://q-ctrl.com/terms
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS. See the
|
12
|
+
# License for the specific language.
|
13
|
+
|
14
|
+
from pydantic import PrivateAttr
|
15
|
+
from typing_extensions import deprecated
|
16
|
+
|
17
|
+
from .common import Solution
|
18
|
+
|
19
|
+
|
20
|
+
@deprecated(
|
21
|
+
"This is a placeholder for a specific solution in the future.",
|
22
|
+
)
|
23
|
+
class PlaceholderSolution(Solution):
|
24
|
+
"""
|
25
|
+
Parameters for running a placeholder solution.
|
26
|
+
"""
|
27
|
+
|
28
|
+
_solution_name: str = PrivateAttr("placeholder_solution")
|
@@ -51,6 +51,21 @@ _qm_patch_targets = [
|
|
51
51
|
"qm.qua.AnalogMeasureProcess._get_loc",
|
52
52
|
"qm.qua.DigitalMeasureProcess._get_loc",
|
53
53
|
"qm.datadog_api.DatadogHandler",
|
54
|
+
"qm.qua.lib._get_loc",
|
55
|
+
"qm.qua._dsl.arbitrary._get_loc",
|
56
|
+
"qm.qua._dsl.calibration_params_update._get_loc",
|
57
|
+
"qm.qua._dsl.external_stream._get_loc",
|
58
|
+
"qm.qua._dsl.frame_rotation._get_loc",
|
59
|
+
"qm.qua._dsl.function_expressions._get_loc",
|
60
|
+
"qm.qua._dsl.phase_reset._get_loc",
|
61
|
+
"qm.qua._dsl.play._get_loc",
|
62
|
+
"qm.qua._dsl.pulses_utils._get_loc",
|
63
|
+
"qm.qua._dsl.scope_functions._get_loc",
|
64
|
+
"qm.qua._dsl.variable_handling._get_loc",
|
65
|
+
"qm.qua._dsl.wait._get_loc",
|
66
|
+
"qm.qua._dsl.measure.analog_measure_process._get_loc",
|
67
|
+
"qm.qua._dsl.measure.measure._get_loc",
|
68
|
+
"qm.qua._dsl.stream_processing.stream_processing._get_loc",
|
54
69
|
]
|
55
70
|
for target in _qm_patch_targets:
|
56
71
|
try:
|
@@ -532,9 +532,6 @@ class _BaseQuaConfig(BaseModel):
|
|
532
532
|
qm_version: str
|
533
533
|
"""The qm-qua package version used."""
|
534
534
|
|
535
|
-
version: int = 1
|
536
|
-
"""The configuration version. This is a field used in Qua's configuration API."""
|
537
|
-
|
538
535
|
oscillators: Mapping[str, OscillatorConfigType] = {}
|
539
536
|
"""The oscillators used to drive the elements."""
|
540
537
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "boulder-opal-scale-up-sdk"
|
3
|
-
version = "1.0.
|
3
|
+
version = "1.0.7"
|
4
4
|
description = "Q-CTRL Boulder Opal Scale Up Python SDK"
|
5
5
|
license = "https://q-ctrl.com/terms"
|
6
6
|
authors = ["Q-CTRL <support@q-ctrl.com>"]
|
@@ -76,7 +76,7 @@ pydantic = "^2.10.4"
|
|
76
76
|
pydantic-settings = "^2.7.0"
|
77
77
|
python-dateutil = "^2.9.0.post0"
|
78
78
|
pyyaml = "^6.0.2"
|
79
|
-
qm-qua = { version = "1.2.
|
79
|
+
qm-qua = { version = "1.2.3", optional = true }
|
80
80
|
|
81
81
|
[tool.poetry.extras]
|
82
82
|
quantum-machines = ["qm-qua"]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/errors.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{boulder_opal_scale_up_sdk-1.0.6 → boulder_opal_scale_up_sdk-1.0.7}/boulderopalscaleupsdk/py.typed
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|