boulder-opal-scale-up-sdk 1.0.3__py3-none-any.whl → 1.0.5__py3-none-any.whl
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.3.dist-info → boulder_opal_scale_up_sdk-1.0.5.dist-info}/METADATA +1 -1
- boulder_opal_scale_up_sdk-1.0.5.dist-info/RECORD +73 -0
- boulderopalscaleupsdk/agent/worker.py +23 -4
- boulderopalscaleupsdk/common/dtypes.py +31 -1
- boulderopalscaleupsdk/device/__init__.py +0 -7
- boulderopalscaleupsdk/device/config_loader.py +1 -0
- boulderopalscaleupsdk/device/controller/qblox.py +222 -25
- boulderopalscaleupsdk/device/defcal.py +5 -44
- boulderopalscaleupsdk/device/device.py +45 -3
- boulderopalscaleupsdk/device/processor/__init__.py +0 -2
- boulderopalscaleupsdk/device/processor/common.py +1 -6
- boulderopalscaleupsdk/device/processor/superconducting_processor.py +34 -7
- boulderopalscaleupsdk/experiments/__init__.py +24 -2
- boulderopalscaleupsdk/experiments/chi01_scan.py +18 -15
- boulderopalscaleupsdk/experiments/common.py +0 -16
- boulderopalscaleupsdk/experiments/drag_leakage_calibration.py +66 -0
- boulderopalscaleupsdk/experiments/fine_amplitude_calibration.py +54 -0
- boulderopalscaleupsdk/experiments/power_rabi.py +22 -16
- boulderopalscaleupsdk/experiments/power_rabi_ef.py +67 -0
- boulderopalscaleupsdk/experiments/ramsey.py +21 -18
- boulderopalscaleupsdk/experiments/readout_classifier_calibration.py +30 -8
- boulderopalscaleupsdk/experiments/resonator_spectroscopy.py +20 -18
- boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_bias.py +23 -20
- boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_power.py +22 -21
- boulderopalscaleupsdk/experiments/t1.py +16 -22
- boulderopalscaleupsdk/experiments/t2.py +19 -16
- boulderopalscaleupsdk/experiments/t2_echo.py +51 -0
- boulderopalscaleupsdk/experiments/transmon_anharmonicity.py +26 -24
- boulderopalscaleupsdk/experiments/transmon_spectroscopy.py +19 -17
- boulderopalscaleupsdk/experiments/voltage_bias_fine_tune.py +58 -0
- boulderopalscaleupsdk/experiments/waveforms.py +63 -0
- boulderopalscaleupsdk/experiments/zz_ramsey.py +59 -0
- boulderopalscaleupsdk/plotting/dtypes.py +6 -3
- boulderopalscaleupsdk/protobuf/v1/agent_pb2.py +9 -3
- boulderopalscaleupsdk/protobuf/v1/agent_pb2.pyi +14 -0
- boulderopalscaleupsdk/protobuf/v1/agent_pb2_grpc.py +34 -0
- boulderopalscaleupsdk/protobuf/v1/device_pb2.py +32 -32
- boulderopalscaleupsdk/protobuf/v1/device_pb2.pyi +8 -4
- boulderopalscaleupsdk/routines/__init__.py +25 -1
- boulderopalscaleupsdk/routines/common.py +13 -0
- boulderopalscaleupsdk/routines/one_qubit_calibration.py +36 -0
- boulderopalscaleupsdk/routines/resonator_mapping.py +17 -1
- boulderopalscaleupsdk/routines/transmon_coherence.py +34 -0
- boulderopalscaleupsdk/routines/transmon_discovery.py +41 -0
- boulderopalscaleupsdk/routines/transmon_retuning.py +41 -0
- boulderopalscaleupsdk/stubs/maps.py +11 -2
- boulder_opal_scale_up_sdk-1.0.3.dist-info/RECORD +0 -62
- {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.5.dist-info}/LICENSE +0 -0
- {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.5.dist-info}/WHEEL +0 -0
@@ -0,0 +1,58 @@
|
|
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 typing import Literal
|
15
|
+
|
16
|
+
from pydantic import PrivateAttr
|
17
|
+
|
18
|
+
from .common import Experiment, RangeIterable
|
19
|
+
|
20
|
+
|
21
|
+
class VoltageBiasFineTune(Experiment):
|
22
|
+
"""
|
23
|
+
Parameters for running voltage bias fine-tune experiment.
|
24
|
+
|
25
|
+
Attributes
|
26
|
+
----------
|
27
|
+
transmon : str
|
28
|
+
The reference for the transmon to XY drive in the experiment.
|
29
|
+
delays_ns : list[int] or RangeIterable
|
30
|
+
The delay times, in nanoseconds.
|
31
|
+
flux_count : int
|
32
|
+
Number of flux bias points to sample around the current bias offset.
|
33
|
+
flux_delta : float
|
34
|
+
Flux difference between flux points, in units of the voltage period.
|
35
|
+
virtual_detuning : float
|
36
|
+
The difference between the drive signal frequency and the qubit frequency, in Hz.
|
37
|
+
bias_transmon : str or None, optional
|
38
|
+
The reference for the transmon to flux tune in the experiment.
|
39
|
+
Defaults to transmon.
|
40
|
+
recycle_delay_ns : int, optional
|
41
|
+
The delay time between consecutive shots of the experiment, in nanoseconds.
|
42
|
+
Defaults to 100_000 ns.
|
43
|
+
shot_count : int, optional
|
44
|
+
The number of shots to be taken in the experiment.
|
45
|
+
Defaults to 400.
|
46
|
+
"""
|
47
|
+
|
48
|
+
_experiment_name: str = PrivateAttr("voltage_bias_fine_tune")
|
49
|
+
|
50
|
+
transmon: str
|
51
|
+
delays_ns: list[int] | RangeIterable
|
52
|
+
flux_count: int
|
53
|
+
flux_delta: float
|
54
|
+
virtual_detuning: float
|
55
|
+
bias_transmon: str | None = None
|
56
|
+
recycle_delay_ns: int = 100_000
|
57
|
+
shot_count: int = 400
|
58
|
+
update: Literal["auto", "off", "prompt"] = "auto"
|
@@ -0,0 +1,63 @@
|
|
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 dataclasses import replace
|
15
|
+
from typing import Annotated, Literal, Protocol, TypeVar
|
16
|
+
|
17
|
+
from pydantic import Discriminator
|
18
|
+
from pydantic.dataclasses import dataclass
|
19
|
+
|
20
|
+
|
21
|
+
class _Waveform(Protocol): # pragma: no cover
|
22
|
+
duration_ns: int
|
23
|
+
amplitude: float
|
24
|
+
|
25
|
+
|
26
|
+
@dataclass
|
27
|
+
class ConstantWaveform(_Waveform): # pragma: no cover
|
28
|
+
duration_ns: int
|
29
|
+
amplitude: float
|
30
|
+
waveform_type: Literal["Constant"] = "Constant"
|
31
|
+
|
32
|
+
|
33
|
+
@dataclass
|
34
|
+
class GaussianWaveform(_Waveform): # pragma: no cover
|
35
|
+
duration_ns: int
|
36
|
+
amplitude: float
|
37
|
+
sigma: float
|
38
|
+
waveform_type: Literal["Gaussian"] = "Gaussian"
|
39
|
+
|
40
|
+
|
41
|
+
@dataclass
|
42
|
+
class DragCosineWaveform(_Waveform): # pragma: no cover
|
43
|
+
duration_ns: int
|
44
|
+
amplitude: float
|
45
|
+
drag: float
|
46
|
+
buffer_ns: int
|
47
|
+
center: float
|
48
|
+
waveform_type: Literal["DragCosineWaveform"] = "DragCosineWaveform"
|
49
|
+
|
50
|
+
|
51
|
+
Waveform = Annotated[
|
52
|
+
ConstantWaveform | GaussianWaveform | DragCosineWaveform,
|
53
|
+
Discriminator("waveform_type"),
|
54
|
+
]
|
55
|
+
|
56
|
+
T = TypeVar("T", bound=Waveform)
|
57
|
+
|
58
|
+
|
59
|
+
def update_amplitude(waveform: T, amplitude: float) -> T:
|
60
|
+
"""
|
61
|
+
Update the amplitude of a waveform.
|
62
|
+
"""
|
63
|
+
return replace(waveform, amplitude=amplitude)
|
@@ -0,0 +1,59 @@
|
|
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 typing import Literal
|
15
|
+
|
16
|
+
from pydantic import PrivateAttr
|
17
|
+
|
18
|
+
from .common import Experiment
|
19
|
+
|
20
|
+
|
21
|
+
class ZZRamsey(Experiment):
|
22
|
+
"""
|
23
|
+
Parameters for running a ZZ Ramsey experiment.
|
24
|
+
|
25
|
+
Attributes
|
26
|
+
----------
|
27
|
+
control_transmon : str
|
28
|
+
The control transmon to target in the experiment.
|
29
|
+
target_transmon : str
|
30
|
+
The target transmon to pair with the control transmon.
|
31
|
+
max_delay_ns : int
|
32
|
+
The maximum delay time, in nanoseconds.
|
33
|
+
min_delay_ns : int
|
34
|
+
The minimum delay time, in nanoseconds.
|
35
|
+
delay_step_ns : int
|
36
|
+
The step for generating the list of delays, in nanoseconds.
|
37
|
+
virtual_detuning : float
|
38
|
+
The difference between the drive signal frequency and the qubit frequency, in Hz.
|
39
|
+
recycle_delay_ns : int, optional
|
40
|
+
The delay time between consecutive shots of the experiment, in nanoseconds.
|
41
|
+
Defaults to 10,000 ns.
|
42
|
+
shot_count : int, optional
|
43
|
+
The number of shots to be taken in the experiment.
|
44
|
+
Defaults to 400.
|
45
|
+
update : "auto" or "off" or "prompt", optional
|
46
|
+
How the device should be updated after an experiment run. Defaults to auto.
|
47
|
+
"""
|
48
|
+
|
49
|
+
_experiment_name: str = PrivateAttr("zz_ramsey")
|
50
|
+
|
51
|
+
control_transmon: str
|
52
|
+
target_transmon: str
|
53
|
+
max_delay_ns: int
|
54
|
+
min_delay_ns: int
|
55
|
+
delay_step_ns: int
|
56
|
+
virtual_detuning: float
|
57
|
+
recycle_delay_ns: int = 10_000
|
58
|
+
shot_count: int = 400
|
59
|
+
update: Literal["auto", "off", "prompt"] = "auto"
|
@@ -28,9 +28,8 @@ from pydantic.dataclasses import dataclass
|
|
28
28
|
|
29
29
|
def _array_validator(value: Any) -> np.ndarray:
|
30
30
|
if isinstance(value, dict):
|
31
|
-
|
32
|
-
|
33
|
-
)
|
31
|
+
shape = [int(s) for s in value["shape"]]
|
32
|
+
array = np.frombuffer(base64.b64decode(value["data"]), dtype=value["dtype"]).reshape(shape)
|
34
33
|
else:
|
35
34
|
array = np.asarray(value, order="C")
|
36
35
|
|
@@ -71,6 +70,7 @@ class PlotConfig(BaseModel):
|
|
71
70
|
model_config = ConfigDict(extra="forbid")
|
72
71
|
|
73
72
|
title: str
|
73
|
+
subtitle: str | None = None
|
74
74
|
|
75
75
|
x_label: str
|
76
76
|
y_label: str
|
@@ -81,6 +81,7 @@ class PlotConfig(BaseModel):
|
|
81
81
|
x_ticks: Ticks | None = None
|
82
82
|
y_ticks: Ticks | None = None
|
83
83
|
|
84
|
+
axes_ratio: float | None = None
|
84
85
|
reverse_yaxis: bool = False
|
85
86
|
|
86
87
|
report: PlotReport | None = None
|
@@ -92,6 +93,7 @@ class PlotData1D:
|
|
92
93
|
y: _SerializableArray
|
93
94
|
|
94
95
|
style: Literal["dash", "solid", "scatter"]
|
96
|
+
color_index: int | None = None
|
95
97
|
|
96
98
|
x_error: _SerializableArray | None = None
|
97
99
|
y_error: _SerializableArray | None = None
|
@@ -166,6 +168,7 @@ class HistogramData:
|
|
166
168
|
data: _SerializableArray
|
167
169
|
label: str | None = None
|
168
170
|
opacity: float = 0.7
|
171
|
+
color_index: int | None = None
|
169
172
|
|
170
173
|
def __post_init__(self):
|
171
174
|
if self.data.ndim != 1:
|
@@ -17,7 +17,7 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
|
|
17
17
|
from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
|
18
18
|
|
19
19
|
|
20
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-boulderopalscaleupsdk/protobuf/v1/agent.proto\x12!boulderopalscaleupsdk.protobuf.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x85\x01\n\x11RunProgramRequest\x12\'\n\x0f\x63ontroller_type\x18\x01 \x01(\tR\x0e\x63ontrollerType\x12\x18\n\x07program\x18\x02 \x01(\tR\x07program\x12-\n\x12\x63\x61librate_elements\x18\x03 \x03(\tR\x11\x63\x61librateElements\"H\n\x12RunProgramResponse\x12\x32\n\x08raw_data\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07rawData\"_\n)RunQuantumMachinesMixerCalibrationRequest\x12\x1a\n\x08\x65lements\x18\x01 \x03(\tR\x08\x65lements\x12\x16\n\x06\x63onfig\x18\x02 \x01(\tR\x06\x63onfig\"k\n*RunQuantumMachinesMixerCalibrationResponse\x12\x18\n\x07success\x18\x01 \x01(\x08R\x07success\x12\x19\n\x05\x65rror\x18\x02 \x01(\tH\x00R\x05\x65rror\x88\x01\x01\x42\x08\n\x06_error\"G\n\x15\x44isplayResultsRequest\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x14\n\x05plots\x18\x02 \x03(\tR\x05plots\"F\n\x16\x44isplayResultsResponse\x12,\n\x05\x65mpty\x18\x01 \x01(\x0b\x32\x16.google.protobuf.EmptyR\x05\
|
20
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-boulderopalscaleupsdk/protobuf/v1/agent.proto\x12!boulderopalscaleupsdk.protobuf.v1\x1a\x1cgoogle/api/annotations.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\"\x85\x01\n\x11RunProgramRequest\x12\'\n\x0f\x63ontroller_type\x18\x01 \x01(\tR\x0e\x63ontrollerType\x12\x18\n\x07program\x18\x02 \x01(\tR\x07program\x12-\n\x12\x63\x61librate_elements\x18\x03 \x03(\tR\x11\x63\x61librateElements\"H\n\x12RunProgramResponse\x12\x32\n\x08raw_data\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07rawData\"_\n)RunQuantumMachinesMixerCalibrationRequest\x12\x1a\n\x08\x65lements\x18\x01 \x03(\tR\x08\x65lements\x12\x16\n\x06\x63onfig\x18\x02 \x01(\tR\x06\x63onfig\"k\n*RunQuantumMachinesMixerCalibrationResponse\x12\x18\n\x07success\x18\x01 \x01(\x08R\x07success\x12\x19\n\x05\x65rror\x18\x02 \x01(\tH\x00R\x05\x65rror\x88\x01\x01\x42\x08\n\x06_error\"G\n\x15\x44isplayResultsRequest\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x14\n\x05plots\x18\x02 \x03(\tR\x05plots\"F\n\x16\x44isplayResultsResponse\x12,\n\x05\x65mpty\x18\x01 \x01(\x0b\x32\x16.google.protobuf.EmptyR\x05\x65mpty\"\\\n\nAskRequest\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x34\n\x16\x65xpected_response_type\x18\x02 \x01(\tR\x14\x65xpectedResponseType\")\n\x0b\x41skResponse\x12\x1a\n\x08response\x18\x01 \x01(\tR\x08response2\xd0\x05\n\x0c\x41gentService\x12\x9b\x01\n\nRunProgram\x12\x34.boulderopalscaleupsdk.protobuf.v1.RunProgramRequest\x1a\x35.boulderopalscaleupsdk.protobuf.v1.RunProgramResponse\" \x82\xd3\xe4\x93\x02\x1a\"\x15/v1/agent/run_program:\x01*\x12\xf3\x01\n\"RunQuantumMachinesMixerCalibration\x12L.boulderopalscaleupsdk.protobuf.v1.RunQuantumMachinesMixerCalibrationRequest\x1aM.boulderopalscaleupsdk.protobuf.v1.RunQuantumMachinesMixerCalibrationResponse\"0\x82\xd3\xe4\x93\x02*\"%/v1/agent/run_qua_calibration_program:\x01*\x12\xab\x01\n\x0e\x44isplayResults\x12\x38.boulderopalscaleupsdk.protobuf.v1.DisplayResultsRequest\x1a\x39.boulderopalscaleupsdk.protobuf.v1.DisplayResultsResponse\"$\x82\xd3\xe4\x93\x02\x1e\"\x19/v1/agent/display_results:\x01*\x12~\n\x03\x41sk\x12-.boulderopalscaleupsdk.protobuf.v1.AskRequest\x1a..boulderopalscaleupsdk.protobuf.v1.AskResponse\"\x18\x82\xd3\xe4\x93\x02\x12\"\r/v1/agent/ask:\x01*B\xa9\x02\n%com.boulderopalscaleupsdk.protobuf.v1B\nAgentProtoP\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')
|
21
21
|
|
22
22
|
_globals = globals()
|
23
23
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -31,6 +31,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
31
31
|
_globals['_AGENTSERVICE'].methods_by_name['RunQuantumMachinesMixerCalibration']._serialized_options = b'\202\323\344\223\002*\"%/v1/agent/run_qua_calibration_program:\001*'
|
32
32
|
_globals['_AGENTSERVICE'].methods_by_name['DisplayResults']._loaded_options = None
|
33
33
|
_globals['_AGENTSERVICE'].methods_by_name['DisplayResults']._serialized_options = b'\202\323\344\223\002\036\"\031/v1/agent/display_results:\001*'
|
34
|
+
_globals['_AGENTSERVICE'].methods_by_name['Ask']._loaded_options = None
|
35
|
+
_globals['_AGENTSERVICE'].methods_by_name['Ask']._serialized_options = b'\202\323\344\223\002\022\"\r/v1/agent/ask:\001*'
|
34
36
|
_globals['_RUNPROGRAMREQUEST']._serialized_start=174
|
35
37
|
_globals['_RUNPROGRAMREQUEST']._serialized_end=307
|
36
38
|
_globals['_RUNPROGRAMRESPONSE']._serialized_start=309
|
@@ -43,6 +45,10 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
43
45
|
_globals['_DISPLAYRESULTSREQUEST']._serialized_end=660
|
44
46
|
_globals['_DISPLAYRESULTSRESPONSE']._serialized_start=662
|
45
47
|
_globals['_DISPLAYRESULTSRESPONSE']._serialized_end=732
|
46
|
-
_globals['
|
47
|
-
_globals['
|
48
|
+
_globals['_ASKREQUEST']._serialized_start=734
|
49
|
+
_globals['_ASKREQUEST']._serialized_end=826
|
50
|
+
_globals['_ASKRESPONSE']._serialized_start=828
|
51
|
+
_globals['_ASKRESPONSE']._serialized_end=869
|
52
|
+
_globals['_AGENTSERVICE']._serialized_start=872
|
53
|
+
_globals['_AGENTSERVICE']._serialized_end=1592
|
48
54
|
# @@protoc_insertion_point(module_scope)
|
@@ -53,3 +53,17 @@ class DisplayResultsResponse(_message.Message):
|
|
53
53
|
EMPTY_FIELD_NUMBER: _ClassVar[int]
|
54
54
|
empty: _empty_pb2.Empty
|
55
55
|
def __init__(self, empty: _Optional[_Union[_empty_pb2.Empty, _Mapping]] = ...) -> None: ...
|
56
|
+
|
57
|
+
class AskRequest(_message.Message):
|
58
|
+
__slots__ = ("message", "expected_response_type")
|
59
|
+
MESSAGE_FIELD_NUMBER: _ClassVar[int]
|
60
|
+
EXPECTED_RESPONSE_TYPE_FIELD_NUMBER: _ClassVar[int]
|
61
|
+
message: str
|
62
|
+
expected_response_type: str
|
63
|
+
def __init__(self, message: _Optional[str] = ..., expected_response_type: _Optional[str] = ...) -> None: ...
|
64
|
+
|
65
|
+
class AskResponse(_message.Message):
|
66
|
+
__slots__ = ("response",)
|
67
|
+
RESPONSE_FIELD_NUMBER: _ClassVar[int]
|
68
|
+
response: str
|
69
|
+
def __init__(self, response: _Optional[str] = ...) -> None: ...
|
@@ -30,6 +30,11 @@ class AgentServiceStub(object):
|
|
30
30
|
request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.DisplayResultsRequest.SerializeToString,
|
31
31
|
response_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.DisplayResultsResponse.FromString,
|
32
32
|
)
|
33
|
+
self.Ask = channel.unary_unary(
|
34
|
+
'/boulderopalscaleupsdk.protobuf.v1.AgentService/Ask',
|
35
|
+
request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.AskRequest.SerializeToString,
|
36
|
+
response_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.AskResponse.FromString,
|
37
|
+
)
|
33
38
|
|
34
39
|
|
35
40
|
class AgentServiceServicer(object):
|
@@ -57,6 +62,13 @@ class AgentServiceServicer(object):
|
|
57
62
|
context.set_details('Method not implemented!')
|
58
63
|
raise NotImplementedError('Method not implemented!')
|
59
64
|
|
65
|
+
def Ask(self, request, context):
|
66
|
+
"""Ask user for input.
|
67
|
+
"""
|
68
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
69
|
+
context.set_details('Method not implemented!')
|
70
|
+
raise NotImplementedError('Method not implemented!')
|
71
|
+
|
60
72
|
|
61
73
|
def add_AgentServiceServicer_to_server(servicer, server):
|
62
74
|
rpc_method_handlers = {
|
@@ -75,6 +87,11 @@ def add_AgentServiceServicer_to_server(servicer, server):
|
|
75
87
|
request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.DisplayResultsRequest.FromString,
|
76
88
|
response_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.DisplayResultsResponse.SerializeToString,
|
77
89
|
),
|
90
|
+
'Ask': grpc.unary_unary_rpc_method_handler(
|
91
|
+
servicer.Ask,
|
92
|
+
request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.AskRequest.FromString,
|
93
|
+
response_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.AskResponse.SerializeToString,
|
94
|
+
),
|
78
95
|
}
|
79
96
|
generic_handler = grpc.method_handlers_generic_handler(
|
80
97
|
'boulderopalscaleupsdk.protobuf.v1.AgentService', rpc_method_handlers)
|
@@ -136,3 +153,20 @@ class AgentService(object):
|
|
136
153
|
boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.DisplayResultsResponse.FromString,
|
137
154
|
options, channel_credentials,
|
138
155
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
156
|
+
|
157
|
+
@staticmethod
|
158
|
+
def Ask(request,
|
159
|
+
target,
|
160
|
+
options=(),
|
161
|
+
channel_credentials=None,
|
162
|
+
call_credentials=None,
|
163
|
+
insecure=False,
|
164
|
+
compression=None,
|
165
|
+
wait_for_ready=None,
|
166
|
+
timeout=None,
|
167
|
+
metadata=None):
|
168
|
+
return grpc.experimental.unary_unary(request, target, '/boulderopalscaleupsdk.protobuf.v1.AgentService/Ask',
|
169
|
+
boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.AskRequest.SerializeToString,
|
170
|
+
boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_agent__pb2.AskResponse.FromString,
|
171
|
+
options, channel_credentials,
|
172
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
@@ -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\"-\n\x14GetJobSummaryRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"Z\n\x15GetJobSummaryResponse\x12\x41\n\x10job_summary_data\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0ejobSummaryData\"&\n\rGetJobRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"D\n\x0eGetJobResponse\x12\x32\n\x08job_data\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07jobData\"\x96\x01\n\x0fListJobsRequest\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\x12\x19\n\x08job_name\x18\x02 \x01(\tR\x07jobName\x12\x12\n\x04page\x18\x03 \x01(\x05R\x04page\x12\x14\n\x05limit\x18\x04 \x01(\x05R\x05limit\x12\x1d\n\nsort_order\x18\x05 \x01(\x05R\tsortOrder\"
|
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\"-\n\x14GetJobSummaryRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"Z\n\x15GetJobSummaryResponse\x12\x41\n\x10job_summary_data\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x0ejobSummaryData\"&\n\rGetJobRequest\x12\x15\n\x06job_id\x18\x01 \x01(\tR\x05jobId\"D\n\x0eGetJobResponse\x12\x32\n\x08job_data\x18\x01 \x01(\x0b\x32\x17.google.protobuf.StructR\x07jobData\"\x96\x01\n\x0fListJobsRequest\x12\x1f\n\x0b\x64\x65vice_name\x18\x01 \x01(\tR\ndeviceName\x12\x19\n\x08job_name\x18\x02 \x01(\tR\x07jobName\x12\x12\n\x04page\x18\x03 \x01(\x05R\x04page\x12\x14\n\x05limit\x18\x04 \x01(\x05R\x05limit\x12\x1d\n\nsort_order\x18\x05 \x01(\x05R\tsortOrder\"`\n\x10ListJobsResponse\x12+\n\x04jobs\x18\x01 \x03(\x0b\x32\x17.google.protobuf.StructR\x04jobs\x12\x1f\n\x0btotal_pages\x18\x02 \x01(\x05R\ntotalPages\"\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\"\x1e\n\x1cGetAllDevicesMetadataRequest\"V\n\x1dGetAllDevicesMetadataResponse\x12\x35\n\tmetadatas\x18\x01 \x03(\x0b\x32\x17.google.protobuf.StructR\tmetadatas2\xb0\x0c\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\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\x94\x01\n\x08ListJobs\x12\x32.boulderopalscaleupsdk.protobuf.v1.ListJobsRequest\x1a\x33.boulderopalscaleupsdk.protobuf.v1.ListJobsResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/device/list_jobs:\x01*\x12\x8c\x01\n\x06GetJob\x12\x30.boulderopalscaleupsdk.protobuf.v1.GetJobRequest\x1a\x31.boulderopalscaleupsdk.protobuf.v1.GetJobResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\"\x12/v1/device/get_job:\x01*\x12\xa9\x01\n\rGetJobSummary\x12\x37.boulderopalscaleupsdk.protobuf.v1.GetJobSummaryRequest\x1a\x38.boulderopalscaleupsdk.protobuf.v1.GetJobSummaryResponse\"%\x82\xd3\xe4\x93\x02\x1f\"\x1a/v1/device/get_job_summary:\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*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)
|
@@ -55,35 +55,35 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
55
55
|
_globals['_LISTJOBSREQUEST']._serialized_start=395
|
56
56
|
_globals['_LISTJOBSREQUEST']._serialized_end=545
|
57
57
|
_globals['_LISTJOBSRESPONSE']._serialized_start=547
|
58
|
-
_globals['_LISTJOBSRESPONSE']._serialized_end=
|
59
|
-
_globals['_CREATEREQUEST']._serialized_start=
|
60
|
-
_globals['_CREATEREQUEST']._serialized_end=
|
61
|
-
_globals['_CREATERESPONSE']._serialized_start=
|
62
|
-
_globals['_CREATERESPONSE']._serialized_end=
|
63
|
-
_globals['_COPYREQUEST']._serialized_start=
|
64
|
-
_globals['_COPYREQUEST']._serialized_end=
|
65
|
-
_globals['_COPYRESPONSE']._serialized_start=
|
66
|
-
_globals['_COPYRESPONSE']._serialized_end=
|
67
|
-
_globals['_GETDATAREQUEST']._serialized_start=
|
68
|
-
_globals['_GETDATAREQUEST']._serialized_end=
|
69
|
-
_globals['_GETDATARESPONSE']._serialized_start=
|
70
|
-
_globals['_GETDATARESPONSE']._serialized_end=
|
71
|
-
_globals['_UPDATEREQUEST']._serialized_start=
|
72
|
-
_globals['_UPDATEREQUEST']._serialized_end=
|
73
|
-
_globals['_UPDATERESPONSE']._serialized_start=
|
74
|
-
_globals['_UPDATERESPONSE']._serialized_end=
|
75
|
-
_globals['_DELETEREQUEST']._serialized_start=
|
76
|
-
_globals['_DELETEREQUEST']._serialized_end=
|
77
|
-
_globals['_DELETERESPONSE']._serialized_start=
|
78
|
-
_globals['_DELETERESPONSE']._serialized_end=
|
79
|
-
_globals['_GETMETADATAREQUEST']._serialized_start=
|
80
|
-
_globals['_GETMETADATAREQUEST']._serialized_end=
|
81
|
-
_globals['_GETMETADATARESPONSE']._serialized_start=
|
82
|
-
_globals['_GETMETADATARESPONSE']._serialized_end=
|
83
|
-
_globals['_GETALLDEVICESMETADATAREQUEST']._serialized_start=
|
84
|
-
_globals['_GETALLDEVICESMETADATAREQUEST']._serialized_end=
|
85
|
-
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_start=
|
86
|
-
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_end=
|
87
|
-
_globals['_DEVICEMANAGERSERVICE']._serialized_start=
|
88
|
-
_globals['_DEVICEMANAGERSERVICE']._serialized_end=
|
58
|
+
_globals['_LISTJOBSRESPONSE']._serialized_end=643
|
59
|
+
_globals['_CREATEREQUEST']._serialized_start=646
|
60
|
+
_globals['_CREATEREQUEST']._serialized_end=779
|
61
|
+
_globals['_CREATERESPONSE']._serialized_start=781
|
62
|
+
_globals['_CREATERESPONSE']._serialized_end=817
|
63
|
+
_globals['_COPYREQUEST']._serialized_start=819
|
64
|
+
_globals['_COPYREQUEST']._serialized_end=912
|
65
|
+
_globals['_COPYRESPONSE']._serialized_start=914
|
66
|
+
_globals['_COPYRESPONSE']._serialized_end=948
|
67
|
+
_globals['_GETDATAREQUEST']._serialized_start=950
|
68
|
+
_globals['_GETDATAREQUEST']._serialized_end=1026
|
69
|
+
_globals['_GETDATARESPONSE']._serialized_start=1029
|
70
|
+
_globals['_GETDATARESPONSE']._serialized_end=1227
|
71
|
+
_globals['_UPDATEREQUEST']._serialized_start=1230
|
72
|
+
_globals['_UPDATEREQUEST']._serialized_end=1369
|
73
|
+
_globals['_UPDATERESPONSE']._serialized_start=1372
|
74
|
+
_globals['_UPDATERESPONSE']._serialized_end=1518
|
75
|
+
_globals['_DELETEREQUEST']._serialized_start=1520
|
76
|
+
_globals['_DELETEREQUEST']._serialized_end=1595
|
77
|
+
_globals['_DELETERESPONSE']._serialized_start=1597
|
78
|
+
_globals['_DELETERESPONSE']._serialized_end=1633
|
79
|
+
_globals['_GETMETADATAREQUEST']._serialized_start=1635
|
80
|
+
_globals['_GETMETADATAREQUEST']._serialized_end=1688
|
81
|
+
_globals['_GETMETADATARESPONSE']._serialized_start=1690
|
82
|
+
_globals['_GETMETADATARESPONSE']._serialized_end=1764
|
83
|
+
_globals['_GETALLDEVICESMETADATAREQUEST']._serialized_start=1766
|
84
|
+
_globals['_GETALLDEVICESMETADATAREQUEST']._serialized_end=1796
|
85
|
+
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_start=1798
|
86
|
+
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_end=1884
|
87
|
+
_globals['_DEVICEMANAGERSERVICE']._serialized_start=1887
|
88
|
+
_globals['_DEVICEMANAGERSERVICE']._serialized_end=3471
|
89
89
|
# @@protoc_insertion_point(module_scope)
|
@@ -46,10 +46,12 @@ class ListJobsRequest(_message.Message):
|
|
46
46
|
def __init__(self, device_name: _Optional[str] = ..., job_name: _Optional[str] = ..., page: _Optional[int] = ..., limit: _Optional[int] = ..., sort_order: _Optional[int] = ...) -> None: ...
|
47
47
|
|
48
48
|
class ListJobsResponse(_message.Message):
|
49
|
-
__slots__ = ("jobs",)
|
49
|
+
__slots__ = ("jobs", "total_pages")
|
50
50
|
JOBS_FIELD_NUMBER: _ClassVar[int]
|
51
|
+
TOTAL_PAGES_FIELD_NUMBER: _ClassVar[int]
|
51
52
|
jobs: _containers.RepeatedCompositeFieldContainer[_struct_pb2.Struct]
|
52
|
-
|
53
|
+
total_pages: int
|
54
|
+
def __init__(self, jobs: _Optional[_Iterable[_Union[_struct_pb2.Struct, _Mapping]]] = ..., total_pages: _Optional[int] = ...) -> None: ...
|
53
55
|
|
54
56
|
class CreateRequest(_message.Message):
|
55
57
|
__slots__ = ("app_name", "device_name", "device_data")
|
@@ -90,12 +92,14 @@ class GetDataRequest(_message.Message):
|
|
90
92
|
def __init__(self, app_name: _Optional[str] = ..., device_name: _Optional[str] = ...) -> None: ...
|
91
93
|
|
92
94
|
class GetDataResponse(_message.Message):
|
93
|
-
__slots__ = ("processor_data", "controller_data")
|
95
|
+
__slots__ = ("processor_data", "controller_data", "defcals")
|
94
96
|
PROCESSOR_DATA_FIELD_NUMBER: _ClassVar[int]
|
95
97
|
CONTROLLER_DATA_FIELD_NUMBER: _ClassVar[int]
|
98
|
+
DEFCALS_FIELD_NUMBER: _ClassVar[int]
|
96
99
|
processor_data: _struct_pb2.Struct
|
97
100
|
controller_data: _struct_pb2.Struct
|
98
|
-
|
101
|
+
defcals: _containers.RepeatedCompositeFieldContainer[_struct_pb2.Struct]
|
102
|
+
def __init__(self, processor_data: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., controller_data: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., defcals: _Optional[_Iterable[_Union[_struct_pb2.Struct, _Mapping]]] = ...) -> None: ...
|
99
103
|
|
100
104
|
class UpdateRequest(_message.Message):
|
101
105
|
__slots__ = ("app_name", "device_name", "processor_data")
|
@@ -1,6 +1,30 @@
|
|
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
|
+
|
1
14
|
"""Routine library."""
|
2
15
|
|
3
|
-
__all__ = [
|
16
|
+
__all__ = [
|
17
|
+
"OneQubitCalibration",
|
18
|
+
"ResonatorMapping",
|
19
|
+
"Routine",
|
20
|
+
"TransmonCoherence",
|
21
|
+
"TransmonDiscovery",
|
22
|
+
"TransmonRetuning",
|
23
|
+
]
|
4
24
|
|
5
25
|
from .common import Routine
|
26
|
+
from .one_qubit_calibration import OneQubitCalibration
|
6
27
|
from .resonator_mapping import ResonatorMapping
|
28
|
+
from .transmon_coherence import TransmonCoherence
|
29
|
+
from .transmon_discovery import TransmonDiscovery
|
30
|
+
from .transmon_retuning import TransmonRetuning
|
@@ -1,3 +1,16 @@
|
|
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
|
+
|
1
14
|
from pydantic import BaseModel, ConfigDict
|
2
15
|
|
3
16
|
|
@@ -0,0 +1,36 @@
|
|
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 typing import Literal
|
15
|
+
|
16
|
+
from pydantic import PrivateAttr
|
17
|
+
|
18
|
+
from .common import Routine
|
19
|
+
|
20
|
+
|
21
|
+
class OneQubitCalibration(Routine):
|
22
|
+
"""
|
23
|
+
Parameters for running one qubit calibration routine.
|
24
|
+
|
25
|
+
Attributes
|
26
|
+
----------
|
27
|
+
transmon : str
|
28
|
+
The reference for the transmon to target.
|
29
|
+
gate : "sx" or "x"
|
30
|
+
The gate to calibrate.
|
31
|
+
"""
|
32
|
+
|
33
|
+
_routine_name: str = PrivateAttr("one_qubit_calibration")
|
34
|
+
|
35
|
+
transmon: str
|
36
|
+
gate: Literal["x", "sx"]
|
@@ -1,3 +1,16 @@
|
|
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
|
+
|
1
14
|
from pydantic import PrivateAttr
|
2
15
|
|
3
16
|
from boulderopalscaleupsdk.routines import Routine
|
@@ -7,13 +20,16 @@ class ResonatorMapping(Routine):
|
|
7
20
|
"""
|
8
21
|
Parameters for running a resonator mapping routine.
|
9
22
|
|
10
|
-
|
23
|
+
Attributes
|
11
24
|
----------
|
12
25
|
feedlines : list[str] or None
|
13
26
|
The feedlines to target in the routine.
|
14
27
|
If not provided, all feedlines in the device will be targeted.
|
28
|
+
run_mixer_calibration: bool
|
29
|
+
Whether to run mixer calibrations before running each program. Defaults to True.
|
15
30
|
"""
|
16
31
|
|
17
32
|
_routine_name: str = PrivateAttr("resonator_mapping")
|
18
33
|
|
19
34
|
feedlines: list[str] | None = None
|
35
|
+
run_mixer_calibration: bool = True
|
@@ -0,0 +1,34 @@
|
|
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 TransmonCoherence(Routine):
|
20
|
+
"""
|
21
|
+
Parameters for running a transmon coherence routine.
|
22
|
+
|
23
|
+
Attributes
|
24
|
+
----------
|
25
|
+
transmon : str
|
26
|
+
The reference for the transmon to target.
|
27
|
+
run_mixer_calibration : bool, optional
|
28
|
+
Whether to run mixer calibrations before running each program. Defaults to False.
|
29
|
+
"""
|
30
|
+
|
31
|
+
_routine_name: str = PrivateAttr("transmon_coherence")
|
32
|
+
|
33
|
+
transmon: str
|
34
|
+
run_mixer_calibration: bool = False
|