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.
Files changed (49) hide show
  1. {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.5.dist-info}/METADATA +1 -1
  2. boulder_opal_scale_up_sdk-1.0.5.dist-info/RECORD +73 -0
  3. boulderopalscaleupsdk/agent/worker.py +23 -4
  4. boulderopalscaleupsdk/common/dtypes.py +31 -1
  5. boulderopalscaleupsdk/device/__init__.py +0 -7
  6. boulderopalscaleupsdk/device/config_loader.py +1 -0
  7. boulderopalscaleupsdk/device/controller/qblox.py +222 -25
  8. boulderopalscaleupsdk/device/defcal.py +5 -44
  9. boulderopalscaleupsdk/device/device.py +45 -3
  10. boulderopalscaleupsdk/device/processor/__init__.py +0 -2
  11. boulderopalscaleupsdk/device/processor/common.py +1 -6
  12. boulderopalscaleupsdk/device/processor/superconducting_processor.py +34 -7
  13. boulderopalscaleupsdk/experiments/__init__.py +24 -2
  14. boulderopalscaleupsdk/experiments/chi01_scan.py +18 -15
  15. boulderopalscaleupsdk/experiments/common.py +0 -16
  16. boulderopalscaleupsdk/experiments/drag_leakage_calibration.py +66 -0
  17. boulderopalscaleupsdk/experiments/fine_amplitude_calibration.py +54 -0
  18. boulderopalscaleupsdk/experiments/power_rabi.py +22 -16
  19. boulderopalscaleupsdk/experiments/power_rabi_ef.py +67 -0
  20. boulderopalscaleupsdk/experiments/ramsey.py +21 -18
  21. boulderopalscaleupsdk/experiments/readout_classifier_calibration.py +30 -8
  22. boulderopalscaleupsdk/experiments/resonator_spectroscopy.py +20 -18
  23. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_bias.py +23 -20
  24. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_power.py +22 -21
  25. boulderopalscaleupsdk/experiments/t1.py +16 -22
  26. boulderopalscaleupsdk/experiments/t2.py +19 -16
  27. boulderopalscaleupsdk/experiments/t2_echo.py +51 -0
  28. boulderopalscaleupsdk/experiments/transmon_anharmonicity.py +26 -24
  29. boulderopalscaleupsdk/experiments/transmon_spectroscopy.py +19 -17
  30. boulderopalscaleupsdk/experiments/voltage_bias_fine_tune.py +58 -0
  31. boulderopalscaleupsdk/experiments/waveforms.py +63 -0
  32. boulderopalscaleupsdk/experiments/zz_ramsey.py +59 -0
  33. boulderopalscaleupsdk/plotting/dtypes.py +6 -3
  34. boulderopalscaleupsdk/protobuf/v1/agent_pb2.py +9 -3
  35. boulderopalscaleupsdk/protobuf/v1/agent_pb2.pyi +14 -0
  36. boulderopalscaleupsdk/protobuf/v1/agent_pb2_grpc.py +34 -0
  37. boulderopalscaleupsdk/protobuf/v1/device_pb2.py +32 -32
  38. boulderopalscaleupsdk/protobuf/v1/device_pb2.pyi +8 -4
  39. boulderopalscaleupsdk/routines/__init__.py +25 -1
  40. boulderopalscaleupsdk/routines/common.py +13 -0
  41. boulderopalscaleupsdk/routines/one_qubit_calibration.py +36 -0
  42. boulderopalscaleupsdk/routines/resonator_mapping.py +17 -1
  43. boulderopalscaleupsdk/routines/transmon_coherence.py +34 -0
  44. boulderopalscaleupsdk/routines/transmon_discovery.py +41 -0
  45. boulderopalscaleupsdk/routines/transmon_retuning.py +41 -0
  46. boulderopalscaleupsdk/stubs/maps.py +11 -2
  47. boulder_opal_scale_up_sdk-1.0.3.dist-info/RECORD +0 -62
  48. {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.5.dist-info}/LICENSE +0 -0
  49. {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
- array = np.frombuffer(base64.b64decode(value["data"]), dtype=value["dtype"]).reshape(
32
- value["shape"],
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\x65mpty2\xd0\x04\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*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')
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['_AGENTSERVICE']._serialized_start=735
47
- _globals['_AGENTSERVICE']._serialized_end=1327
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\"?\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\"\x93\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\"\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')
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=610
59
- _globals['_CREATEREQUEST']._serialized_start=613
60
- _globals['_CREATEREQUEST']._serialized_end=746
61
- _globals['_CREATERESPONSE']._serialized_start=748
62
- _globals['_CREATERESPONSE']._serialized_end=784
63
- _globals['_COPYREQUEST']._serialized_start=786
64
- _globals['_COPYREQUEST']._serialized_end=879
65
- _globals['_COPYRESPONSE']._serialized_start=881
66
- _globals['_COPYRESPONSE']._serialized_end=915
67
- _globals['_GETDATAREQUEST']._serialized_start=917
68
- _globals['_GETDATAREQUEST']._serialized_end=993
69
- _globals['_GETDATARESPONSE']._serialized_start=996
70
- _globals['_GETDATARESPONSE']._serialized_end=1143
71
- _globals['_UPDATEREQUEST']._serialized_start=1146
72
- _globals['_UPDATEREQUEST']._serialized_end=1285
73
- _globals['_UPDATERESPONSE']._serialized_start=1288
74
- _globals['_UPDATERESPONSE']._serialized_end=1434
75
- _globals['_DELETEREQUEST']._serialized_start=1436
76
- _globals['_DELETEREQUEST']._serialized_end=1511
77
- _globals['_DELETERESPONSE']._serialized_start=1513
78
- _globals['_DELETERESPONSE']._serialized_end=1549
79
- _globals['_GETMETADATAREQUEST']._serialized_start=1551
80
- _globals['_GETMETADATAREQUEST']._serialized_end=1604
81
- _globals['_GETMETADATARESPONSE']._serialized_start=1606
82
- _globals['_GETMETADATARESPONSE']._serialized_end=1680
83
- _globals['_GETALLDEVICESMETADATAREQUEST']._serialized_start=1682
84
- _globals['_GETALLDEVICESMETADATAREQUEST']._serialized_end=1712
85
- _globals['_GETALLDEVICESMETADATARESPONSE']._serialized_start=1714
86
- _globals['_GETALLDEVICESMETADATARESPONSE']._serialized_end=1800
87
- _globals['_DEVICEMANAGERSERVICE']._serialized_start=1803
88
- _globals['_DEVICEMANAGERSERVICE']._serialized_end=3387
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
- def __init__(self, jobs: _Optional[_Iterable[_Union[_struct_pb2.Struct, _Mapping]]] = ...) -> None: ...
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
- def __init__(self, processor_data: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ..., controller_data: _Optional[_Union[_struct_pb2.Struct, _Mapping]] = ...) -> None: ...
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__ = ["ResonatorMapping", "Routine"]
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
- Parameters
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