boulder-opal-scale-up-sdk 1.0.3__py3-none-any.whl → 1.0.4__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.4.dist-info}/METADATA +1 -1
- {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.4.dist-info}/RECORD +38 -33
- boulderopalscaleupsdk/common/dtypes.py +12 -1
- boulderopalscaleupsdk/device/__init__.py +0 -7
- boulderopalscaleupsdk/device/config_loader.py +1 -0
- boulderopalscaleupsdk/device/controller/qblox.py +129 -0
- boulderopalscaleupsdk/device/defcal.py +5 -44
- boulderopalscaleupsdk/device/device.py +41 -3
- boulderopalscaleupsdk/device/processor/__init__.py +0 -2
- boulderopalscaleupsdk/device/processor/common.py +1 -6
- boulderopalscaleupsdk/device/processor/superconducting_processor.py +11 -4
- boulderopalscaleupsdk/experiments/__init__.py +16 -2
- boulderopalscaleupsdk/experiments/chi01_scan.py +10 -9
- boulderopalscaleupsdk/experiments/common.py +0 -16
- boulderopalscaleupsdk/experiments/power_rabi.py +13 -10
- boulderopalscaleupsdk/experiments/power_rabi_ef.py +66 -0
- boulderopalscaleupsdk/experiments/ramsey.py +13 -12
- boulderopalscaleupsdk/experiments/readout_classifier_calibration.py +22 -6
- boulderopalscaleupsdk/experiments/resonator_spectroscopy.py +11 -11
- boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_bias.py +13 -13
- boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_power.py +12 -12
- boulderopalscaleupsdk/experiments/t1.py +8 -16
- boulderopalscaleupsdk/experiments/t2.py +9 -8
- boulderopalscaleupsdk/experiments/t2_echo.py +49 -0
- boulderopalscaleupsdk/experiments/transmon_anharmonicity.py +16 -17
- boulderopalscaleupsdk/experiments/transmon_spectroscopy.py +10 -10
- boulderopalscaleupsdk/experiments/waveforms.py +63 -0
- boulderopalscaleupsdk/plotting/dtypes.py +1 -0
- boulderopalscaleupsdk/protobuf/v1/device_pb2.py +20 -20
- boulderopalscaleupsdk/protobuf/v1/device_pb2.pyi +4 -2
- boulderopalscaleupsdk/routines/__init__.py +16 -1
- boulderopalscaleupsdk/routines/common.py +13 -0
- boulderopalscaleupsdk/routines/resonator_mapping.py +16 -0
- boulderopalscaleupsdk/routines/transmon_discovery.py +45 -0
- boulderopalscaleupsdk/routines/transmon_retuning.py +31 -0
- boulderopalscaleupsdk/stubs/maps.py +11 -2
- {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.4.dist-info}/LICENSE +0 -0
- {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.4.dist-info}/WHEEL +0 -0
@@ -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)
|
@@ -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\"?\n\x10ListJobsResponse\x12+\n\x04jobs\x18\x01 \x03(\x0b\x32\x17.google.protobuf.StructR\x04jobs\"\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\"\
|
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\"\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)
|
@@ -67,23 +67,23 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
67
67
|
_globals['_GETDATAREQUEST']._serialized_start=917
|
68
68
|
_globals['_GETDATAREQUEST']._serialized_end=993
|
69
69
|
_globals['_GETDATARESPONSE']._serialized_start=996
|
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=
|
70
|
+
_globals['_GETDATARESPONSE']._serialized_end=1194
|
71
|
+
_globals['_UPDATEREQUEST']._serialized_start=1197
|
72
|
+
_globals['_UPDATEREQUEST']._serialized_end=1336
|
73
|
+
_globals['_UPDATERESPONSE']._serialized_start=1339
|
74
|
+
_globals['_UPDATERESPONSE']._serialized_end=1485
|
75
|
+
_globals['_DELETEREQUEST']._serialized_start=1487
|
76
|
+
_globals['_DELETEREQUEST']._serialized_end=1562
|
77
|
+
_globals['_DELETERESPONSE']._serialized_start=1564
|
78
|
+
_globals['_DELETERESPONSE']._serialized_end=1600
|
79
|
+
_globals['_GETMETADATAREQUEST']._serialized_start=1602
|
80
|
+
_globals['_GETMETADATAREQUEST']._serialized_end=1655
|
81
|
+
_globals['_GETMETADATARESPONSE']._serialized_start=1657
|
82
|
+
_globals['_GETMETADATARESPONSE']._serialized_end=1731
|
83
|
+
_globals['_GETALLDEVICESMETADATAREQUEST']._serialized_start=1733
|
84
|
+
_globals['_GETALLDEVICESMETADATAREQUEST']._serialized_end=1763
|
85
|
+
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_start=1765
|
86
|
+
_globals['_GETALLDEVICESMETADATARESPONSE']._serialized_end=1851
|
87
|
+
_globals['_DEVICEMANAGERSERVICE']._serialized_start=1854
|
88
|
+
_globals['_DEVICEMANAGERSERVICE']._serialized_end=3438
|
89
89
|
# @@protoc_insertion_point(module_scope)
|
@@ -90,12 +90,14 @@ class GetDataRequest(_message.Message):
|
|
90
90
|
def __init__(self, app_name: _Optional[str] = ..., device_name: _Optional[str] = ...) -> None: ...
|
91
91
|
|
92
92
|
class GetDataResponse(_message.Message):
|
93
|
-
__slots__ = ("processor_data", "controller_data")
|
93
|
+
__slots__ = ("processor_data", "controller_data", "defcals")
|
94
94
|
PROCESSOR_DATA_FIELD_NUMBER: _ClassVar[int]
|
95
95
|
CONTROLLER_DATA_FIELD_NUMBER: _ClassVar[int]
|
96
|
+
DEFCALS_FIELD_NUMBER: _ClassVar[int]
|
96
97
|
processor_data: _struct_pb2.Struct
|
97
98
|
controller_data: _struct_pb2.Struct
|
98
|
-
|
99
|
+
defcals: _containers.RepeatedCompositeFieldContainer[_struct_pb2.Struct]
|
100
|
+
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
101
|
|
100
102
|
class UpdateRequest(_message.Message):
|
101
103
|
__slots__ = ("app_name", "device_name", "processor_data")
|
@@ -1,6 +1,21 @@
|
|
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__ = ["ResonatorMapping", "Routine"]
|
16
|
+
__all__ = ["ResonatorMapping", "Routine", "TransmonDiscovery", "TransmonRetuning"]
|
4
17
|
|
5
18
|
from .common import Routine
|
6
19
|
from .resonator_mapping import ResonatorMapping
|
20
|
+
from .transmon_discovery import TransmonDiscovery
|
21
|
+
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
|
|
@@ -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
|
@@ -12,8 +25,11 @@ class ResonatorMapping(Routine):
|
|
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,45 @@
|
|
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 boulderopalscaleupsdk.experiments import ConstantWaveform
|
17
|
+
|
18
|
+
from .common import Routine
|
19
|
+
|
20
|
+
|
21
|
+
class TransmonDiscovery(Routine):
|
22
|
+
"""
|
23
|
+
Parameters for running a transmon discovery routine.
|
24
|
+
|
25
|
+
Parameters
|
26
|
+
----------
|
27
|
+
transmon : str
|
28
|
+
The reference for the transmon to target.
|
29
|
+
recycle_delay_ns : int, optional
|
30
|
+
The delay between consecutive shots, in nanoseconds. Defaults to 100,000.
|
31
|
+
readout_waveform : ConstantWaveform or None, optional
|
32
|
+
The readout pulse used in transmon spectroscopy.
|
33
|
+
Defaults to a constant waveform with a duration of 10,000 ns
|
34
|
+
and an amplitude of 0.01.
|
35
|
+
spectroscopy_waveform : ConstantWaveform or None, optional
|
36
|
+
The drive pulse used during transmon spectroscopy and transmon anharmonicity.
|
37
|
+
Defaults to a 10,000 ns pulse whose amplitude is defined by the logic of the experiment.
|
38
|
+
"""
|
39
|
+
|
40
|
+
_routine_name: str = PrivateAttr("transmon_discovery")
|
41
|
+
|
42
|
+
transmon: str
|
43
|
+
recycle_delay_ns: int = 100_000
|
44
|
+
readout_waveform: ConstantWaveform | None = None
|
45
|
+
spectroscopy_waveform: ConstantWaveform | None = None
|
@@ -0,0 +1,31 @@
|
|
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
|
+
|
15
|
+
from pydantic import PrivateAttr
|
16
|
+
|
17
|
+
from boulderopalscaleupsdk.routines import Routine
|
18
|
+
|
19
|
+
|
20
|
+
class TransmonRetuning(Routine):
|
21
|
+
"""
|
22
|
+
Parameters for running a transmon retuning routine.
|
23
|
+
|
24
|
+
Parameters
|
25
|
+
----------
|
26
|
+
transmon : str
|
27
|
+
The reference for the transmon to target.
|
28
|
+
"""
|
29
|
+
|
30
|
+
_routine_name: str = PrivateAttr("transmon_retuning")
|
31
|
+
transmon: str
|
@@ -1,9 +1,18 @@
|
|
1
1
|
STUB_DATA_FILE_MAPPING: dict[str, list[str]] = {
|
2
|
-
|
3
|
-
"
|
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"],
|
4
7
|
"resonator_spectroscopy": ["QM/Tuna-5/resonator_spectroscopy.json"],
|
5
8
|
"resonator_spectroscopy_by_power": ["QM/Tuna-5/resonator_spectroscopy_by_power.json"],
|
6
9
|
"resonator_spectroscopy_by_bias": ["QM/Tuna-5/resonator_spectroscopy_by_bias.json"],
|
7
10
|
"ramsey": ["QM/Tuna-5/ramsey.json"],
|
8
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)],
|
9
18
|
}
|
{boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.4.dist-info}/LICENSE
RENAMED
File without changes
|
{boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.4.dist-info}/WHEEL
RENAMED
File without changes
|