boulder-opal-scale-up-sdk 1.0.5__py3-none-any.whl → 1.0.6__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.5.dist-info → boulder_opal_scale_up_sdk-1.0.6.dist-info}/METADATA +1 -1
- {boulder_opal_scale_up_sdk-1.0.5.dist-info → boulder_opal_scale_up_sdk-1.0.6.dist-info}/RECORD +27 -21
- boulderopalscaleupsdk/agent/worker.py +15 -2
- boulderopalscaleupsdk/common/dtypes.py +21 -1
- boulderopalscaleupsdk/{stubs/__init__.py → constants.py} +3 -0
- boulderopalscaleupsdk/device/controller/quantum_machines.py +86 -17
- boulderopalscaleupsdk/device/processor/common.py +3 -3
- boulderopalscaleupsdk/errors.py +21 -0
- boulderopalscaleupsdk/experiments/__init__.py +8 -2
- boulderopalscaleupsdk/experiments/cz_spectroscopy_by_bias.py +84 -0
- boulderopalscaleupsdk/experiments/ramsey_ef.py +62 -0
- boulderopalscaleupsdk/experiments/{readout_classifier_calibration.py → readout_classifier.py} +7 -3
- boulderopalscaleupsdk/experiments/readout_optimization.py +57 -0
- boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_bias.py +1 -3
- boulderopalscaleupsdk/experiments/transmon_anharmonicity.py +0 -2
- boulderopalscaleupsdk/grpc_interceptors/error.py +318 -0
- boulderopalscaleupsdk/plotting/dtypes.py +5 -5
- boulderopalscaleupsdk/protobuf/v1/device_pb2.py +57 -49
- boulderopalscaleupsdk/protobuf/v1/device_pb2.pyi +67 -43
- boulderopalscaleupsdk/protobuf/v1/device_pb2_grpc.py +100 -66
- boulderopalscaleupsdk/protobuf/v1/job_pb2.py +47 -0
- boulderopalscaleupsdk/protobuf/v1/job_pb2.pyi +54 -0
- boulderopalscaleupsdk/protobuf/v1/job_pb2_grpc.py +138 -0
- boulderopalscaleupsdk/third_party/quantum_machines/__init__.py +1 -1
- boulderopalscaleupsdk/third_party/quantum_machines/config.py +51 -48
- boulderopalscaleupsdk/stubs/dtypes.py +0 -47
- boulderopalscaleupsdk/stubs/maps.py +0 -18
- {boulder_opal_scale_up_sdk-1.0.5.dist-info → boulder_opal_scale_up_sdk-1.0.6.dist-info}/LICENSE +0 -0
- {boulder_opal_scale_up_sdk-1.0.5.dist-info → boulder_opal_scale_up_sdk-1.0.6.dist-info}/WHEEL +0 -0
@@ -0,0 +1,138 @@
|
|
1
|
+
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
2
|
+
"""Client and server classes corresponding to protobuf-defined services."""
|
3
|
+
import grpc
|
4
|
+
|
5
|
+
from boulderopalscaleupsdk.protobuf.v1 import job_pb2 as boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2
|
6
|
+
|
7
|
+
|
8
|
+
class JobManagerServiceStub(object):
|
9
|
+
"""Job manager service.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def __init__(self, channel):
|
13
|
+
"""Constructor.
|
14
|
+
|
15
|
+
Args:
|
16
|
+
channel: A grpc.Channel.
|
17
|
+
"""
|
18
|
+
self.List = channel.unary_unary(
|
19
|
+
'/boulderopalscaleupsdk.protobuf.v1.JobManagerService/List',
|
20
|
+
request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.ListRequest.SerializeToString,
|
21
|
+
response_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.ListResponse.FromString,
|
22
|
+
)
|
23
|
+
self.Get = channel.unary_unary(
|
24
|
+
'/boulderopalscaleupsdk.protobuf.v1.JobManagerService/Get',
|
25
|
+
request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetRequest.SerializeToString,
|
26
|
+
response_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetResponse.FromString,
|
27
|
+
)
|
28
|
+
self.GetSummary = channel.unary_unary(
|
29
|
+
'/boulderopalscaleupsdk.protobuf.v1.JobManagerService/GetSummary',
|
30
|
+
request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetSummaryRequest.SerializeToString,
|
31
|
+
response_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetSummaryResponse.FromString,
|
32
|
+
)
|
33
|
+
|
34
|
+
|
35
|
+
class JobManagerServiceServicer(object):
|
36
|
+
"""Job manager service.
|
37
|
+
"""
|
38
|
+
|
39
|
+
def List(self, request, context):
|
40
|
+
"""Fetch all the jobs that have been run on the device.
|
41
|
+
"""
|
42
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
43
|
+
context.set_details('Method not implemented!')
|
44
|
+
raise NotImplementedError('Method not implemented!')
|
45
|
+
|
46
|
+
def Get(self, request, context):
|
47
|
+
"""Fetch the results of a specific job executed on the device previously.
|
48
|
+
"""
|
49
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
50
|
+
context.set_details('Method not implemented!')
|
51
|
+
raise NotImplementedError('Method not implemented!')
|
52
|
+
|
53
|
+
def GetSummary(self, request, context):
|
54
|
+
"""Fetch the results view of a previously executed job.
|
55
|
+
"""
|
56
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
57
|
+
context.set_details('Method not implemented!')
|
58
|
+
raise NotImplementedError('Method not implemented!')
|
59
|
+
|
60
|
+
|
61
|
+
def add_JobManagerServiceServicer_to_server(servicer, server):
|
62
|
+
rpc_method_handlers = {
|
63
|
+
'List': grpc.unary_unary_rpc_method_handler(
|
64
|
+
servicer.List,
|
65
|
+
request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.ListRequest.FromString,
|
66
|
+
response_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.ListResponse.SerializeToString,
|
67
|
+
),
|
68
|
+
'Get': grpc.unary_unary_rpc_method_handler(
|
69
|
+
servicer.Get,
|
70
|
+
request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetRequest.FromString,
|
71
|
+
response_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetResponse.SerializeToString,
|
72
|
+
),
|
73
|
+
'GetSummary': grpc.unary_unary_rpc_method_handler(
|
74
|
+
servicer.GetSummary,
|
75
|
+
request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetSummaryRequest.FromString,
|
76
|
+
response_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetSummaryResponse.SerializeToString,
|
77
|
+
),
|
78
|
+
}
|
79
|
+
generic_handler = grpc.method_handlers_generic_handler(
|
80
|
+
'boulderopalscaleupsdk.protobuf.v1.JobManagerService', rpc_method_handlers)
|
81
|
+
server.add_generic_rpc_handlers((generic_handler,))
|
82
|
+
|
83
|
+
|
84
|
+
# This class is part of an EXPERIMENTAL API.
|
85
|
+
class JobManagerService(object):
|
86
|
+
"""Job manager service.
|
87
|
+
"""
|
88
|
+
|
89
|
+
@staticmethod
|
90
|
+
def List(request,
|
91
|
+
target,
|
92
|
+
options=(),
|
93
|
+
channel_credentials=None,
|
94
|
+
call_credentials=None,
|
95
|
+
insecure=False,
|
96
|
+
compression=None,
|
97
|
+
wait_for_ready=None,
|
98
|
+
timeout=None,
|
99
|
+
metadata=None):
|
100
|
+
return grpc.experimental.unary_unary(request, target, '/boulderopalscaleupsdk.protobuf.v1.JobManagerService/List',
|
101
|
+
boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.ListRequest.SerializeToString,
|
102
|
+
boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.ListResponse.FromString,
|
103
|
+
options, channel_credentials,
|
104
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
105
|
+
|
106
|
+
@staticmethod
|
107
|
+
def Get(request,
|
108
|
+
target,
|
109
|
+
options=(),
|
110
|
+
channel_credentials=None,
|
111
|
+
call_credentials=None,
|
112
|
+
insecure=False,
|
113
|
+
compression=None,
|
114
|
+
wait_for_ready=None,
|
115
|
+
timeout=None,
|
116
|
+
metadata=None):
|
117
|
+
return grpc.experimental.unary_unary(request, target, '/boulderopalscaleupsdk.protobuf.v1.JobManagerService/Get',
|
118
|
+
boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetRequest.SerializeToString,
|
119
|
+
boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetResponse.FromString,
|
120
|
+
options, channel_credentials,
|
121
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
122
|
+
|
123
|
+
@staticmethod
|
124
|
+
def GetSummary(request,
|
125
|
+
target,
|
126
|
+
options=(),
|
127
|
+
channel_credentials=None,
|
128
|
+
call_credentials=None,
|
129
|
+
insecure=False,
|
130
|
+
compression=None,
|
131
|
+
wait_for_ready=None,
|
132
|
+
timeout=None,
|
133
|
+
metadata=None):
|
134
|
+
return grpc.experimental.unary_unary(request, target, '/boulderopalscaleupsdk.protobuf.v1.JobManagerService/GetSummary',
|
135
|
+
boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetSummaryRequest.SerializeToString,
|
136
|
+
boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_job__pb2.GetSummaryResponse.FromString,
|
137
|
+
options, channel_credentials,
|
138
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
@@ -34,7 +34,7 @@ from unittest.mock import patch
|
|
34
34
|
|
35
35
|
from packaging.version import Version
|
36
36
|
|
37
|
-
if os.
|
37
|
+
if os.getenv("QCTRL_SU_DISABLE_QM_LOGGING", "False") == "True":
|
38
38
|
# Disable QM logging and telemetry
|
39
39
|
os.environ["QM_DISABLE_STREAMOUTPUT"] = "true" # Used in 1.1.0
|
40
40
|
_qm_logger = logging.getLogger("qm")
|
@@ -84,13 +84,12 @@ For information about PyPA's version specifiers:
|
|
84
84
|
|
85
85
|
# ruff: noqa: UP007, N815, E741
|
86
86
|
from collections.abc import MutableMapping
|
87
|
-
from typing import Annotated,
|
87
|
+
from typing import Annotated, Literal, NamedTuple, Self, TypeVar, Union
|
88
88
|
|
89
89
|
from packaging.specifiers import SpecifierSet
|
90
90
|
from packaging.version import Version
|
91
91
|
from pydantic import (
|
92
92
|
BaseModel,
|
93
|
-
BeforeValidator,
|
94
93
|
Discriminator,
|
95
94
|
Field,
|
96
95
|
PrivateAttr,
|
@@ -125,8 +124,18 @@ class Constants(BaseSettings):
|
|
125
124
|
CONST = Constants()
|
126
125
|
|
127
126
|
|
128
|
-
|
129
|
-
|
127
|
+
class NativeOPXPortType(NamedTuple):
|
128
|
+
controller_id: str
|
129
|
+
port_id: int
|
130
|
+
|
131
|
+
|
132
|
+
class NativeOPX1000PortType(NamedTuple):
|
133
|
+
controller_id: str
|
134
|
+
fem_id: int
|
135
|
+
port_id: int
|
136
|
+
|
137
|
+
|
138
|
+
QMPortTypes = NativeOPXPortType | NativeOPX1000PortType
|
130
139
|
|
131
140
|
|
132
141
|
class AnalogOutputFilterConfigType(BaseModel):
|
@@ -134,24 +143,19 @@ class AnalogOutputFilterConfigType(BaseModel):
|
|
134
143
|
feedback: list[float] = []
|
135
144
|
|
136
145
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
case _:
|
144
|
-
raise ValueError("Field must be convertible to int.")
|
145
|
-
|
146
|
-
|
147
|
-
IntLike = Annotated[int, BeforeValidator(ensure_int)]
|
146
|
+
class AnalogOutputFilterConfigType123(BaseModel):
|
147
|
+
feedforward: list[float] = []
|
148
|
+
feedback: list[float] = []
|
149
|
+
exponential: list[tuple[float, int]] = []
|
150
|
+
exponential_dc_gain: float | None = None
|
151
|
+
high_pass: float | None = None
|
148
152
|
|
149
153
|
|
150
154
|
class AnalogOutputPortConfigType(BaseModel):
|
151
155
|
offset: Number | None = None
|
152
156
|
filter: AnalogOutputFilterConfigType | None = None
|
153
157
|
delay: int | None = None
|
154
|
-
crosstalk: Mapping[
|
158
|
+
crosstalk: Mapping[int, Number] = {}
|
155
159
|
shareable: bool | None = None
|
156
160
|
|
157
161
|
|
@@ -175,13 +179,12 @@ class DigitalInputPortConfigType(BaseModel):
|
|
175
179
|
threshold: Number | None = None
|
176
180
|
|
177
181
|
|
178
|
-
class
|
182
|
+
class LfAnalogOutputPortConfigType(BaseModel):
|
179
183
|
offset: Number | None = None
|
180
|
-
filter: AnalogOutputFilterConfigType | None = None
|
184
|
+
filter: AnalogOutputFilterConfigType | AnalogOutputFilterConfigType123 | None = None
|
181
185
|
delay: int | None = None
|
182
186
|
crosstalk: Mapping[int, Number] = {}
|
183
187
|
shareable: bool | None = None
|
184
|
-
connectivity: tuple[str, str] | None = None
|
185
188
|
sampling_rate: float | None = None
|
186
189
|
upsampling_mode: Literal["mw", "pulse"] | None = None
|
187
190
|
output_mode: Literal["direct", "amplified"] | None = None
|
@@ -189,10 +192,10 @@ class AnalogOutputPortConfigTypeOctoDac(BaseModel):
|
|
189
192
|
|
190
193
|
class LfFemConfigType(BaseModel):
|
191
194
|
type: Literal["LF"] | None = None
|
192
|
-
analog_outputs: Mapping[int
|
193
|
-
analog_inputs: Mapping[int
|
194
|
-
digital_outputs: Mapping[int
|
195
|
-
digital_inputs: Mapping[int
|
195
|
+
analog_outputs: Mapping[int, LfAnalogOutputPortConfigType] = {}
|
196
|
+
analog_inputs: Mapping[int, AnalogInputPortConfigType] = {}
|
197
|
+
digital_outputs: Mapping[int, DigitalOutputPortConfigType] = {}
|
198
|
+
digital_inputs: Mapping[int, DigitalInputPortConfigType] = {}
|
196
199
|
|
197
200
|
|
198
201
|
Band = Literal[1, 2, 3]
|
@@ -216,16 +219,16 @@ class MwFemAnalogOutputPortConfigType(BaseModel):
|
|
216
219
|
band: Band | None = None
|
217
220
|
delay: int | None = None
|
218
221
|
shareable: bool | None = None
|
219
|
-
upconverters: Mapping[
|
222
|
+
upconverters: Mapping[int, MwUpconverterConfigType] | None = None
|
220
223
|
upconverter_frequency: float | None = None
|
221
224
|
|
222
225
|
|
223
226
|
class MwFemConfigType(BaseModel):
|
224
227
|
type: Literal["MW"] | None = None
|
225
|
-
analog_outputs: Mapping[int
|
226
|
-
analog_inputs: Mapping[int
|
227
|
-
digital_outputs: Mapping[int
|
228
|
-
digital_inputs: Mapping[int
|
228
|
+
analog_outputs: Mapping[int, MwFemAnalogOutputPortConfigType] = {}
|
229
|
+
analog_inputs: Mapping[int, MwFemAnalogInputPortConfigType] = {}
|
230
|
+
digital_outputs: Mapping[int, DigitalOutputPortConfigType] = {}
|
231
|
+
digital_inputs: Mapping[int, DigitalInputPortConfigType] = {}
|
229
232
|
|
230
233
|
|
231
234
|
class ControllerConfigType(BaseModel):
|
@@ -247,8 +250,8 @@ class OctaveRFOutputConfigType(BaseModel):
|
|
247
250
|
] = "always_off"
|
248
251
|
gain: int | float = Field(default=0, ge=-20, le=20, multiple_of=0.5)
|
249
252
|
input_attenuators: Literal["ON", "OFF"] = "OFF"
|
250
|
-
I_connection:
|
251
|
-
Q_connection:
|
253
|
+
I_connection: NativeOPXPortType | None = None
|
254
|
+
Q_connection: NativeOPXPortType | None = None
|
252
255
|
|
253
256
|
|
254
257
|
_RF_SOURCES = Literal[
|
@@ -270,7 +273,7 @@ class OctaveRFInputConfigType(BaseModel):
|
|
270
273
|
|
271
274
|
|
272
275
|
class OctaveSingleIfOutputConfigType(BaseModel):
|
273
|
-
port:
|
276
|
+
port: NativeOPXPortType | None = None
|
274
277
|
name: str | None = None
|
275
278
|
|
276
279
|
|
@@ -279,7 +282,7 @@ class OctaveIfOutputsConfigType(BaseModel):
|
|
279
282
|
IF_out2: OctaveSingleIfOutputConfigType | None = None
|
280
283
|
|
281
284
|
|
282
|
-
FEM_IDX =
|
285
|
+
FEM_IDX = Annotated[int, Field(ge=1, le=8)]
|
283
286
|
|
284
287
|
|
285
288
|
class OPX1000ControllerConfigType(BaseModel):
|
@@ -296,13 +299,13 @@ LoopbackType = tuple[
|
|
296
299
|
class OctaveConfig(BaseModel):
|
297
300
|
"""Octave configuration for qm-qua 1.1.7."""
|
298
301
|
|
299
|
-
RF_outputs: Mapping[
|
302
|
+
RF_outputs: Mapping[int, OctaveRFOutputConfigType] = {}
|
300
303
|
"""
|
301
304
|
RF Outputs in Octave's up-converter chain.
|
302
305
|
OPX/AnalogOutput -> Octave/IFInput -> Octave/RFOutput -> Fridge.
|
303
306
|
"""
|
304
307
|
|
305
|
-
RF_inputs: Mapping[
|
308
|
+
RF_inputs: Mapping[int, OctaveRFInputConfigType] = {}
|
306
309
|
"""RF Inputs in Octave's down-converter chain. See IF_Outputs."""
|
307
310
|
|
308
311
|
IF_outputs: OctaveIfOutputsConfigType | None = None
|
@@ -367,7 +370,7 @@ class OctaveConfig121(OctaveConfig):
|
|
367
370
|
class DigitalInputConfigType(BaseModel):
|
368
371
|
delay: int | None = None
|
369
372
|
buffer: int | None = None
|
370
|
-
port:
|
373
|
+
port: QMPortTypes | None = None
|
371
374
|
|
372
375
|
|
373
376
|
class IntegrationWeightConfigType(BaseModel):
|
@@ -413,16 +416,16 @@ class PulseConfigType(BaseModel):
|
|
413
416
|
|
414
417
|
|
415
418
|
class SingleInputConfigType(BaseModel):
|
416
|
-
port:
|
419
|
+
port: QMPortTypes | None = None
|
417
420
|
|
418
421
|
|
419
422
|
class MwInputConfigType(BaseModel):
|
420
|
-
port:
|
421
|
-
upconverter: int
|
423
|
+
port: NativeOPX1000PortType | None = None
|
424
|
+
upconverter: int = Field(default=1, description="The index of the upconverter to use.")
|
422
425
|
|
423
426
|
|
424
427
|
class MwOutputConfigType(BaseModel):
|
425
|
-
port:
|
428
|
+
port: NativeOPX1000PortType | None = None
|
426
429
|
|
427
430
|
|
428
431
|
class HoldOffsetConfigType(BaseModel):
|
@@ -436,14 +439,14 @@ class StickyConfigType(BaseModel):
|
|
436
439
|
|
437
440
|
|
438
441
|
class MixInputConfigType(BaseModel):
|
439
|
-
I:
|
440
|
-
Q:
|
442
|
+
I: QMPortTypes | None = None
|
443
|
+
Q: QMPortTypes | None = None
|
441
444
|
mixer: str | None = None
|
442
445
|
lo_frequency: float | None = None
|
443
446
|
|
444
447
|
|
445
448
|
class InputCollectionConfigType(BaseModel):
|
446
|
-
inputs: Mapping[str,
|
449
|
+
inputs: Mapping[str, QMPortTypes] = {}
|
447
450
|
|
448
451
|
|
449
452
|
class OscillatorConfigType(BaseModel):
|
@@ -472,15 +475,15 @@ class ElementConfig(BaseModel):
|
|
472
475
|
multipleInputs: InputCollectionConfigType | None = None
|
473
476
|
time_of_flight: int | None = None
|
474
477
|
smearing: int | None = None
|
475
|
-
outputs: Mapping[str,
|
478
|
+
outputs: Mapping[str, QMPortTypes] = {}
|
476
479
|
digitalInputs: Mapping[str, DigitalInputConfigType] | None = None
|
477
|
-
digitalOutputs: Mapping[str,
|
480
|
+
digitalOutputs: Mapping[str, QMPortTypes] | None = None
|
478
481
|
outputPulseParameters: OutputPulseParameterConfigType | None = None
|
479
482
|
hold_offset: HoldOffsetConfigType | None = None
|
480
483
|
sticky: StickyConfigType | None = None
|
481
484
|
thread: str | None = None
|
482
|
-
RF_inputs: Mapping[str,
|
483
|
-
RF_outputs: Mapping[str,
|
485
|
+
RF_inputs: Mapping[str, NativeOPXPortType] | None = None
|
486
|
+
RF_outputs: Mapping[str, NativeOPXPortType] | None = None
|
484
487
|
|
485
488
|
@model_validator(mode="after")
|
486
489
|
def validator_oscillators(self) -> Self:
|
@@ -499,7 +502,7 @@ class ElementConfig121(ElementConfig):
|
|
499
502
|
|
500
503
|
@model_validator(mode="after")
|
501
504
|
def validate_outputs(self) -> Self:
|
502
|
-
if self.RF_outputs:
|
505
|
+
if self.RF_outputs or self.MWOutput:
|
503
506
|
if self.smearing is None:
|
504
507
|
raise ValueError("Element with output must have smearing defined.")
|
505
508
|
if self.time_of_flight is None:
|
@@ -529,7 +532,7 @@ class _BaseQuaConfig(BaseModel):
|
|
529
532
|
qm_version: str
|
530
533
|
"""The qm-qua package version used."""
|
531
534
|
|
532
|
-
version:
|
535
|
+
version: int = 1
|
533
536
|
"""The configuration version. This is a field used in Qua's configuration API."""
|
534
537
|
|
535
538
|
oscillators: Mapping[str, OscillatorConfigType] = {}
|
@@ -1,47 +0,0 @@
|
|
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 pathlib import Path
|
15
|
-
from typing import Any
|
16
|
-
|
17
|
-
from pydantic import TypeAdapter
|
18
|
-
from pydantic.dataclasses import dataclass
|
19
|
-
|
20
|
-
|
21
|
-
@dataclass
|
22
|
-
class StubMetadata:
|
23
|
-
api_url: str
|
24
|
-
app_name: str
|
25
|
-
device_name: str
|
26
|
-
controller_type: str
|
27
|
-
routine_name: str
|
28
|
-
parameters: dict[str, Any]
|
29
|
-
created_at: str
|
30
|
-
|
31
|
-
|
32
|
-
@dataclass
|
33
|
-
class StubData:
|
34
|
-
raw_data: dict[str, Any]
|
35
|
-
metadata: StubMetadata | None = None
|
36
|
-
|
37
|
-
def to_dict(self) -> dict[str, Any]:
|
38
|
-
return TypeAdapter(type(self)).dump_python(self)
|
39
|
-
|
40
|
-
@classmethod
|
41
|
-
def from_str(cls, data: str) -> "StubData":
|
42
|
-
return TypeAdapter(cls).validate_json(data)
|
43
|
-
|
44
|
-
@classmethod
|
45
|
-
def load_from_file(cls, file_path: Path) -> "StubData":
|
46
|
-
with file_path.open("rb") as file:
|
47
|
-
return cls.from_str(file.read().decode("utf-8"))
|
@@ -1,18 +0,0 @@
|
|
1
|
-
STUB_DATA_FILE_MAPPING: dict[str, list[str]] = {
|
2
|
-
# Experiments
|
3
|
-
"chi01_scan": ["QM/Tuna-5/chi01_scan.json"],
|
4
|
-
"coherence_t1": ["QM/Tuna-5/coherence_t1.json"],
|
5
|
-
"coherence_t2": ["QM/Tuna-5/coherence_t2.json"],
|
6
|
-
"readout_classifier_calibration": ["QM/Tuna-5/readout_classifier_calibration.json"],
|
7
|
-
"resonator_spectroscopy": ["QM/Tuna-5/resonator_spectroscopy.json"],
|
8
|
-
"resonator_spectroscopy_by_power": ["QM/Tuna-5/resonator_spectroscopy_by_power.json"],
|
9
|
-
"resonator_spectroscopy_by_bias": ["QM/Tuna-5/resonator_spectroscopy_by_bias.json"],
|
10
|
-
"ramsey": ["QM/Tuna-5/ramsey.json"],
|
11
|
-
"power_rabi": ["QM/Tuna-5/power_rabi.json"],
|
12
|
-
"transmon_anharmonicity": ["QM/Tuna-5/transmon_anharmonicity.json"],
|
13
|
-
"transmon_spectroscopy": ["QM/Tuna-5/transmon_spectroscopy.json"],
|
14
|
-
# Routines
|
15
|
-
"feedline_discovery": [f"QM/Tuna-5/feedline_discovery/{n}.json" for n in range(1, 7)],
|
16
|
-
"resonator_mapping": [f"QM/Tuna-5/resonator_mapping/{n}.json" for n in range(1, 17)],
|
17
|
-
"transmon_discovery": [f"QM/Tuna-5/transmon_discovery/{n}.json" for n in range(1, 8)],
|
18
|
-
}
|
{boulder_opal_scale_up_sdk-1.0.5.dist-info → boulder_opal_scale_up_sdk-1.0.6.dist-info}/LICENSE
RENAMED
File without changes
|
{boulder_opal_scale_up_sdk-1.0.5.dist-info → boulder_opal_scale_up_sdk-1.0.6.dist-info}/WHEEL
RENAMED
File without changes
|