boulder-opal-scale-up-sdk 1.0.7__py3-none-any.whl → 1.0.8__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.
Files changed (38) hide show
  1. {boulder_opal_scale_up_sdk-1.0.7.dist-info → boulder_opal_scale_up_sdk-1.0.8.dist-info}/METADATA +4 -6
  2. {boulder_opal_scale_up_sdk-1.0.7.dist-info → boulder_opal_scale_up_sdk-1.0.8.dist-info}/RECORD +38 -35
  3. boulderopalscaleupsdk/common/dtypes.py +7 -5
  4. boulderopalscaleupsdk/device/controller/qblox.py +149 -52
  5. boulderopalscaleupsdk/device/device.py +0 -1
  6. boulderopalscaleupsdk/device/processor/superconducting_processor.py +21 -1
  7. boulderopalscaleupsdk/experiments/chi01_scan.py +1 -1
  8. boulderopalscaleupsdk/experiments/cz_spectroscopy_by_bias.py +29 -48
  9. boulderopalscaleupsdk/experiments/drag_leakage_calibration.py +1 -4
  10. boulderopalscaleupsdk/experiments/fine_amplitude_calibration.py +4 -3
  11. boulderopalscaleupsdk/experiments/power_rabi.py +2 -2
  12. boulderopalscaleupsdk/experiments/power_rabi_ef.py +2 -2
  13. boulderopalscaleupsdk/experiments/ramsey.py +1 -1
  14. boulderopalscaleupsdk/experiments/ramsey_ef.py +1 -1
  15. boulderopalscaleupsdk/experiments/readout_classifier.py +2 -2
  16. boulderopalscaleupsdk/experiments/readout_optimization.py +3 -3
  17. boulderopalscaleupsdk/experiments/resonator_spectroscopy.py +1 -1
  18. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_bias.py +2 -2
  19. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_power.py +1 -1
  20. boulderopalscaleupsdk/experiments/t1.py +1 -1
  21. boulderopalscaleupsdk/experiments/t2.py +1 -1
  22. boulderopalscaleupsdk/experiments/t2_echo.py +1 -1
  23. boulderopalscaleupsdk/experiments/transmon_anharmonicity.py +1 -1
  24. boulderopalscaleupsdk/experiments/transmon_spectroscopy.py +2 -2
  25. boulderopalscaleupsdk/experiments/voltage_bias_fine_tune.py +7 -5
  26. boulderopalscaleupsdk/experiments/zz_ramsey.py +8 -14
  27. boulderopalscaleupsdk/plotting/dtypes.py +1 -1
  28. boulderopalscaleupsdk/protobuf/v1/device_pb2.py +33 -39
  29. boulderopalscaleupsdk/protobuf/v1/device_pb2.pyi +0 -14
  30. boulderopalscaleupsdk/protobuf/v1/device_pb2_grpc.py +0 -34
  31. boulderopalscaleupsdk/protobuf/v1/resource_pb2.py +40 -0
  32. boulderopalscaleupsdk/protobuf/v1/resource_pb2.pyi +52 -0
  33. boulderopalscaleupsdk/protobuf/v1/resource_pb2_grpc.py +104 -0
  34. boulderopalscaleupsdk/routines/coupler_discovery.py +4 -4
  35. boulderopalscaleupsdk/routines/one_qubit_calibration.py +4 -0
  36. boulderopalscaleupsdk/routines/resonator_mapping.py +1 -1
  37. {boulder_opal_scale_up_sdk-1.0.7.dist-info → boulder_opal_scale_up_sdk-1.0.8.dist-info}/LICENSE +0 -0
  38. {boulder_opal_scale_up_sdk-1.0.7.dist-info → boulder_opal_scale_up_sdk-1.0.8.dist-info}/WHEEL +0 -0
@@ -20,11 +20,6 @@ class DeviceManagerServiceStub(object):
20
20
  request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CreateRequest.SerializeToString,
21
21
  response_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CreateResponse.FromString,
22
22
  )
23
- self.Copy = channel.unary_unary(
24
- '/boulderopalscaleupsdk.protobuf.v1.DeviceManagerService/Copy',
25
- request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CopyRequest.SerializeToString,
26
- response_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CopyResponse.FromString,
27
- )
28
23
  self.GetData = channel.unary_unary(
29
24
  '/boulderopalscaleupsdk.protobuf.v1.DeviceManagerService/GetData',
30
25
  request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.GetDataRequest.SerializeToString,
@@ -83,13 +78,6 @@ class DeviceManagerServiceServicer(object):
83
78
  context.set_details('Method not implemented!')
84
79
  raise NotImplementedError('Method not implemented!')
85
80
 
86
- def Copy(self, request, context):
87
- """Make a copy of an existing device with a new name
88
- """
89
- context.set_code(grpc.StatusCode.UNIMPLEMENTED)
90
- context.set_details('Method not implemented!')
91
- raise NotImplementedError('Method not implemented!')
92
-
93
81
  def GetData(self, request, context):
94
82
  """Retrieve the device and controller states.
95
83
  """
@@ -161,11 +149,6 @@ def add_DeviceManagerServiceServicer_to_server(servicer, server):
161
149
  request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CreateRequest.FromString,
162
150
  response_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CreateResponse.SerializeToString,
163
151
  ),
164
- 'Copy': grpc.unary_unary_rpc_method_handler(
165
- servicer.Copy,
166
- request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CopyRequest.FromString,
167
- response_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CopyResponse.SerializeToString,
168
- ),
169
152
  'GetData': grpc.unary_unary_rpc_method_handler(
170
153
  servicer.GetData,
171
154
  request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.GetDataRequest.FromString,
@@ -239,23 +222,6 @@ class DeviceManagerService(object):
239
222
  options, channel_credentials,
240
223
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
241
224
 
242
- @staticmethod
243
- def Copy(request,
244
- target,
245
- options=(),
246
- channel_credentials=None,
247
- call_credentials=None,
248
- insecure=False,
249
- compression=None,
250
- wait_for_ready=None,
251
- timeout=None,
252
- metadata=None):
253
- return grpc.experimental.unary_unary(request, target, '/boulderopalscaleupsdk.protobuf.v1.DeviceManagerService/Copy',
254
- boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CopyRequest.SerializeToString,
255
- boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_device__pb2.CopyResponse.FromString,
256
- options, channel_credentials,
257
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
258
-
259
225
  @staticmethod
260
226
  def GetData(request,
261
227
  target,
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: boulderopalscaleupsdk/protobuf/v1/resource.proto
4
+ # Protobuf Python Version: 5.26.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
16
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n0boulderopalscaleupsdk/protobuf/v1/resource.proto\x12!boulderopalscaleupsdk.protobuf.v1\x1a\x1cgoogle/api/annotations.proto\"{\n\x0e\x41\x63quireRequest\x12#\n\rresource_name\x18\x01 \x01(\tR\x0cresourceName\x12!\n\x0cresource_key\x18\x02 \x01(\tR\x0bresourceKey\x12!\n\x0cprincipal_id\x18\x03 \x01(\tR\x0bprincipalId\"\x9e\x01\n\x0f\x41\x63quireResponse\x12\x1f\n\x0b\x61\x63quired_by\x18\x01 \x01(\tR\nacquiredBy\x12(\n\x10\x61\x63quired_by_name\x18\x02 \x01(\tR\x0e\x61\x63quiredByName\x12\x1f\n\x0b\x61\x63quired_at\x18\x03 \x01(\tR\nacquiredAt\x12\x1f\n\x0bretry_after\x18\x04 \x01(\x05R\nretryAfter\"\xb9\x01\n\x0eReleaseRequest\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x1c\n\tprincipal\x18\x02 \x01(\tR\tprincipal\x12\x1b\n\tissued_at\x18\x03 \x01(\tR\x08issuedAt\x12\x1d\n\nexpires_at\x18\x04 \x01(\tR\texpiresAt\x12\x1a\n\x08resource\x18\x05 \x01(\tR\x08resource\x12!\n\x0cresource_key\x18\x06 \x01(\tR\x0bresourceKey\"A\n\x0fReleaseResponse\x12\x18\n\x07success\x18\x01 \x01(\x08R\x07success\x12\x14\n\x05\x65rror\x18\x02 \x01(\tR\x05\x65rror2\xc0\x02\n\x16ResourceManagerService\x12\x91\x01\n\x07\x41\x63quire\x12\x31.boulderopalscaleupsdk.protobuf.v1.AcquireRequest\x1a\x32.boulderopalscaleupsdk.protobuf.v1.AcquireResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/resource/acquire:\x01*\x12\x91\x01\n\x07Release\x12\x31.boulderopalscaleupsdk.protobuf.v1.ReleaseRequest\x1a\x32.boulderopalscaleupsdk.protobuf.v1.ReleaseResponse\"\x1f\x82\xd3\xe4\x93\x02\x19\"\x14/v1/resource/release:\x01*B\xac\x02\n%com.boulderopalscaleupsdk.protobuf.v1B\rResourceProtoP\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')
19
+
20
+ _globals = globals()
21
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'boulderopalscaleupsdk.protobuf.v1.resource_pb2', _globals)
23
+ if not _descriptor._USE_C_DESCRIPTORS:
24
+ _globals['DESCRIPTOR']._loaded_options = None
25
+ _globals['DESCRIPTOR']._serialized_options = b'\n%com.boulderopalscaleupsdk.protobuf.v1B\rResourceProtoP\001ZNgithub.com/qctrl/boulder-opal-scale-up/proto/boulderopalscaleupsdk/protobuf/v1\242\002\003BPX\252\002!Boulderopalscaleupsdk.Protobuf.V1\312\002!Boulderopalscaleupsdk\\Protobuf\\V1\342\002-Boulderopalscaleupsdk\\Protobuf\\V1\\GPBMetadata\352\002#Boulderopalscaleupsdk::Protobuf::V1'
26
+ _globals['_RESOURCEMANAGERSERVICE'].methods_by_name['Acquire']._loaded_options = None
27
+ _globals['_RESOURCEMANAGERSERVICE'].methods_by_name['Acquire']._serialized_options = b'\202\323\344\223\002\031\"\024/v1/resource/acquire:\001*'
28
+ _globals['_RESOURCEMANAGERSERVICE'].methods_by_name['Release']._loaded_options = None
29
+ _globals['_RESOURCEMANAGERSERVICE'].methods_by_name['Release']._serialized_options = b'\202\323\344\223\002\031\"\024/v1/resource/release:\001*'
30
+ _globals['_ACQUIREREQUEST']._serialized_start=117
31
+ _globals['_ACQUIREREQUEST']._serialized_end=240
32
+ _globals['_ACQUIRERESPONSE']._serialized_start=243
33
+ _globals['_ACQUIRERESPONSE']._serialized_end=401
34
+ _globals['_RELEASEREQUEST']._serialized_start=404
35
+ _globals['_RELEASEREQUEST']._serialized_end=589
36
+ _globals['_RELEASERESPONSE']._serialized_start=591
37
+ _globals['_RELEASERESPONSE']._serialized_end=656
38
+ _globals['_RESOURCEMANAGERSERVICE']._serialized_start=659
39
+ _globals['_RESOURCEMANAGERSERVICE']._serialized_end=979
40
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,52 @@
1
+ from google.api import annotations_pb2 as _annotations_pb2
2
+ from google.protobuf import descriptor as _descriptor
3
+ from google.protobuf import message as _message
4
+ from typing import ClassVar as _ClassVar, Optional as _Optional
5
+
6
+ DESCRIPTOR: _descriptor.FileDescriptor
7
+
8
+ class AcquireRequest(_message.Message):
9
+ __slots__ = ("resource_name", "resource_key", "principal_id")
10
+ RESOURCE_NAME_FIELD_NUMBER: _ClassVar[int]
11
+ RESOURCE_KEY_FIELD_NUMBER: _ClassVar[int]
12
+ PRINCIPAL_ID_FIELD_NUMBER: _ClassVar[int]
13
+ resource_name: str
14
+ resource_key: str
15
+ principal_id: str
16
+ def __init__(self, resource_name: _Optional[str] = ..., resource_key: _Optional[str] = ..., principal_id: _Optional[str] = ...) -> None: ...
17
+
18
+ class AcquireResponse(_message.Message):
19
+ __slots__ = ("acquired_by", "acquired_by_name", "acquired_at", "retry_after")
20
+ ACQUIRED_BY_FIELD_NUMBER: _ClassVar[int]
21
+ ACQUIRED_BY_NAME_FIELD_NUMBER: _ClassVar[int]
22
+ ACQUIRED_AT_FIELD_NUMBER: _ClassVar[int]
23
+ RETRY_AFTER_FIELD_NUMBER: _ClassVar[int]
24
+ acquired_by: str
25
+ acquired_by_name: str
26
+ acquired_at: str
27
+ retry_after: int
28
+ def __init__(self, acquired_by: _Optional[str] = ..., acquired_by_name: _Optional[str] = ..., acquired_at: _Optional[str] = ..., retry_after: _Optional[int] = ...) -> None: ...
29
+
30
+ class ReleaseRequest(_message.Message):
31
+ __slots__ = ("id", "principal", "issued_at", "expires_at", "resource", "resource_key")
32
+ ID_FIELD_NUMBER: _ClassVar[int]
33
+ PRINCIPAL_FIELD_NUMBER: _ClassVar[int]
34
+ ISSUED_AT_FIELD_NUMBER: _ClassVar[int]
35
+ EXPIRES_AT_FIELD_NUMBER: _ClassVar[int]
36
+ RESOURCE_FIELD_NUMBER: _ClassVar[int]
37
+ RESOURCE_KEY_FIELD_NUMBER: _ClassVar[int]
38
+ id: str
39
+ principal: str
40
+ issued_at: str
41
+ expires_at: str
42
+ resource: str
43
+ resource_key: str
44
+ def __init__(self, id: _Optional[str] = ..., principal: _Optional[str] = ..., issued_at: _Optional[str] = ..., expires_at: _Optional[str] = ..., resource: _Optional[str] = ..., resource_key: _Optional[str] = ...) -> None: ...
45
+
46
+ class ReleaseResponse(_message.Message):
47
+ __slots__ = ("success", "error")
48
+ SUCCESS_FIELD_NUMBER: _ClassVar[int]
49
+ ERROR_FIELD_NUMBER: _ClassVar[int]
50
+ success: bool
51
+ error: str
52
+ def __init__(self, success: bool = ..., error: _Optional[str] = ...) -> None: ...
@@ -0,0 +1,104 @@
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 resource_pb2 as boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2
6
+
7
+
8
+ class ResourceManagerServiceStub(object):
9
+ """Resource manager service.
10
+ """
11
+
12
+ def __init__(self, channel):
13
+ """Constructor.
14
+
15
+ Args:
16
+ channel: A grpc.Channel.
17
+ """
18
+ self.Acquire = channel.unary_unary(
19
+ '/boulderopalscaleupsdk.protobuf.v1.ResourceManagerService/Acquire',
20
+ request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.AcquireRequest.SerializeToString,
21
+ response_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.AcquireResponse.FromString,
22
+ )
23
+ self.Release = channel.unary_unary(
24
+ '/boulderopalscaleupsdk.protobuf.v1.ResourceManagerService/Release',
25
+ request_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.ReleaseRequest.SerializeToString,
26
+ response_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.ReleaseResponse.FromString,
27
+ )
28
+
29
+
30
+ class ResourceManagerServiceServicer(object):
31
+ """Resource manager service.
32
+ """
33
+
34
+ def Acquire(self, request, context):
35
+ """Acquire access to the given resource.
36
+ """
37
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
38
+ context.set_details('Method not implemented!')
39
+ raise NotImplementedError('Method not implemented!')
40
+
41
+ def Release(self, request, context):
42
+ """Release access to the given resource.
43
+ """
44
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
45
+ context.set_details('Method not implemented!')
46
+ raise NotImplementedError('Method not implemented!')
47
+
48
+
49
+ def add_ResourceManagerServiceServicer_to_server(servicer, server):
50
+ rpc_method_handlers = {
51
+ 'Acquire': grpc.unary_unary_rpc_method_handler(
52
+ servicer.Acquire,
53
+ request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.AcquireRequest.FromString,
54
+ response_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.AcquireResponse.SerializeToString,
55
+ ),
56
+ 'Release': grpc.unary_unary_rpc_method_handler(
57
+ servicer.Release,
58
+ request_deserializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.ReleaseRequest.FromString,
59
+ response_serializer=boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.ReleaseResponse.SerializeToString,
60
+ ),
61
+ }
62
+ generic_handler = grpc.method_handlers_generic_handler(
63
+ 'boulderopalscaleupsdk.protobuf.v1.ResourceManagerService', rpc_method_handlers)
64
+ server.add_generic_rpc_handlers((generic_handler,))
65
+
66
+
67
+ # This class is part of an EXPERIMENTAL API.
68
+ class ResourceManagerService(object):
69
+ """Resource manager service.
70
+ """
71
+
72
+ @staticmethod
73
+ def Acquire(request,
74
+ target,
75
+ options=(),
76
+ channel_credentials=None,
77
+ call_credentials=None,
78
+ insecure=False,
79
+ compression=None,
80
+ wait_for_ready=None,
81
+ timeout=None,
82
+ metadata=None):
83
+ return grpc.experimental.unary_unary(request, target, '/boulderopalscaleupsdk.protobuf.v1.ResourceManagerService/Acquire',
84
+ boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.AcquireRequest.SerializeToString,
85
+ boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.AcquireResponse.FromString,
86
+ options, channel_credentials,
87
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
88
+
89
+ @staticmethod
90
+ def Release(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.ResourceManagerService/Release',
101
+ boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.ReleaseRequest.SerializeToString,
102
+ boulderopalscaleupsdk_dot_protobuf_dot_v1_dot_resource__pb2.ReleaseResponse.FromString,
103
+ options, channel_credentials,
104
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -25,13 +25,13 @@ class CouplerDiscovery(Routine):
25
25
  control_transmon : str
26
26
  The reference for the transmon to use as control.
27
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.
28
+ The reference for the transmon to use as target.
29
+ biases : list[float]
30
+ The biases to sweep the coupler through.
31
31
  """
32
32
 
33
33
  _routine_name: str = PrivateAttr("coupler_discovery")
34
34
 
35
35
  control_transmon: str
36
36
  target_transmon: str
37
- bias_values: list[float]
37
+ biases: list[float]
@@ -28,9 +28,13 @@ class OneQubitCalibration(Routine):
28
28
  The reference for the transmon to target.
29
29
  gate : "sx" or "x"
30
30
  The gate to calibrate.
31
+ repetitions : list[int] or None, optional
32
+ List of repetition counts for the calibration experiment.
33
+ If not provided, a set of repetitions will be chosen based on the gate.
31
34
  """
32
35
 
33
36
  _routine_name: str = PrivateAttr("one_qubit_calibration")
34
37
 
35
38
  transmon: str
36
39
  gate: Literal["x", "sx"]
40
+ repetitions: list[int] | None = None
@@ -25,7 +25,7 @@ class ResonatorMapping(Routine):
25
25
  feedlines : list[str] or None
26
26
  The feedlines to target in the routine.
27
27
  If not provided, all feedlines in the device will be targeted.
28
- run_mixer_calibration: bool
28
+ run_mixer_calibration: bool, optional
29
29
  Whether to run mixer calibrations before running each program. Defaults to True.
30
30
  """
31
31