boulder-opal-scale-up-sdk 1.0.4__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 (39) hide show
  1. {boulder_opal_scale_up_sdk-1.0.4.dist-info → boulder_opal_scale_up_sdk-1.0.5.dist-info}/METADATA +1 -1
  2. {boulder_opal_scale_up_sdk-1.0.4.dist-info → boulder_opal_scale_up_sdk-1.0.5.dist-info}/RECORD +39 -33
  3. boulderopalscaleupsdk/agent/worker.py +23 -4
  4. boulderopalscaleupsdk/common/dtypes.py +20 -1
  5. boulderopalscaleupsdk/device/controller/qblox.py +94 -26
  6. boulderopalscaleupsdk/device/device.py +5 -1
  7. boulderopalscaleupsdk/device/processor/superconducting_processor.py +23 -3
  8. boulderopalscaleupsdk/experiments/__init__.py +8 -0
  9. boulderopalscaleupsdk/experiments/chi01_scan.py +9 -7
  10. boulderopalscaleupsdk/experiments/drag_leakage_calibration.py +66 -0
  11. boulderopalscaleupsdk/experiments/fine_amplitude_calibration.py +54 -0
  12. boulderopalscaleupsdk/experiments/power_rabi.py +10 -7
  13. boulderopalscaleupsdk/experiments/power_rabi_ef.py +10 -9
  14. boulderopalscaleupsdk/experiments/ramsey.py +9 -7
  15. boulderopalscaleupsdk/experiments/readout_classifier_calibration.py +9 -3
  16. boulderopalscaleupsdk/experiments/resonator_spectroscopy.py +9 -7
  17. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_bias.py +11 -8
  18. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_power.py +10 -9
  19. boulderopalscaleupsdk/experiments/t1.py +8 -6
  20. boulderopalscaleupsdk/experiments/t2.py +12 -10
  21. boulderopalscaleupsdk/experiments/t2_echo.py +12 -10
  22. boulderopalscaleupsdk/experiments/transmon_anharmonicity.py +13 -10
  23. boulderopalscaleupsdk/experiments/transmon_spectroscopy.py +10 -8
  24. boulderopalscaleupsdk/experiments/voltage_bias_fine_tune.py +58 -0
  25. boulderopalscaleupsdk/experiments/zz_ramsey.py +59 -0
  26. boulderopalscaleupsdk/plotting/dtypes.py +5 -3
  27. boulderopalscaleupsdk/protobuf/v1/agent_pb2.py +9 -3
  28. boulderopalscaleupsdk/protobuf/v1/agent_pb2.pyi +14 -0
  29. boulderopalscaleupsdk/protobuf/v1/agent_pb2_grpc.py +34 -0
  30. boulderopalscaleupsdk/protobuf/v1/device_pb2.py +32 -32
  31. boulderopalscaleupsdk/protobuf/v1/device_pb2.pyi +4 -2
  32. boulderopalscaleupsdk/routines/__init__.py +10 -1
  33. boulderopalscaleupsdk/routines/one_qubit_calibration.py +36 -0
  34. boulderopalscaleupsdk/routines/resonator_mapping.py +1 -1
  35. boulderopalscaleupsdk/routines/transmon_coherence.py +34 -0
  36. boulderopalscaleupsdk/routines/transmon_discovery.py +5 -9
  37. boulderopalscaleupsdk/routines/transmon_retuning.py +13 -3
  38. {boulder_opal_scale_up_sdk-1.0.4.dist-info → boulder_opal_scale_up_sdk-1.0.5.dist-info}/LICENSE +0 -0
  39. {boulder_opal_scale_up_sdk-1.0.4.dist-info → boulder_opal_scale_up_sdk-1.0.5.dist-info}/WHEEL +0 -0
@@ -11,6 +11,8 @@
11
11
  # distributed under the License is distributed on an "AS IS" BASIS. See the
12
12
  # License for the specific language.
13
13
 
14
+ from typing import Literal
15
+
14
16
  from pydantic import PrivateAttr
15
17
 
16
18
  from .common import (
@@ -22,24 +24,21 @@ from .common import (
22
24
  )
23
25
  from .waveforms import ConstantWaveform
24
26
 
25
- DEFAULT_RECYCLE_DELAY_NS = 1000 # ns
26
- DEFAULT_SHOT_COUNT = 100
27
-
28
27
 
29
28
  class TransmonSpectroscopy(Experiment):
30
29
  """
31
30
  Parameters for running a transmon spectroscopy experiment.
32
31
 
33
- Parameters
32
+ Attributes
34
33
  ----------
35
34
  transmon : str
36
35
  The reference for the transmon to target.
37
- frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable
36
+ frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable \
38
37
  or HypIterable or None, optional
39
38
  The frequencies at which to scan, in Hz.
40
39
  Default to a scan around the transmon frequency.
41
40
  recycle_delay_ns : int, optional
42
- The delay between consecutive shots, in nanoseconds. Defaults to 1,000 ns.
41
+ The delay between consecutive shots, in nanoseconds. Defaults to 50,000 ns.
43
42
  shot_count : int, optional
44
43
  The number of shots to take. Defaults to 100.
45
44
  spectroscopy_waveform : ConstantWaveform
@@ -49,6 +48,8 @@ class TransmonSpectroscopy(Experiment):
49
48
  Defaults to the measurement defcal.
50
49
  run_mixer_calibration: bool
51
50
  Whether to run mixer calibrations before running a program. Defaults to False.
51
+ update : "auto" or "off" or "prompt", optional
52
+ How the device should be updated after an experiment run. Defaults to auto.
52
53
  """
53
54
 
54
55
  _experiment_name: str = PrivateAttr("transmon_spectroscopy")
@@ -57,8 +58,9 @@ class TransmonSpectroscopy(Experiment):
57
58
  frequencies: list[int] | LinspaceIterable | RangeIterable | CWSIterable | HypIterable | None = (
58
59
  None
59
60
  )
60
- recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
61
- shot_count: int = DEFAULT_SHOT_COUNT
61
+ recycle_delay_ns: int = 50_000
62
+ shot_count: int = 400
62
63
  spectroscopy_waveform: ConstantWaveform
63
64
  measure_waveform: ConstantWaveform | None = None
64
65
  run_mixer_calibration: bool = False
66
+ update: Literal["auto", "off", "prompt"] = "auto"
@@ -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,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
 
@@ -82,6 +81,7 @@ class PlotConfig(BaseModel):
82
81
  x_ticks: Ticks | None = None
83
82
  y_ticks: Ticks | None = None
84
83
 
84
+ axes_ratio: float | None = None
85
85
  reverse_yaxis: bool = False
86
86
 
87
87
  report: PlotReport | None = None
@@ -93,6 +93,7 @@ class PlotData1D:
93
93
  y: _SerializableArray
94
94
 
95
95
  style: Literal["dash", "solid", "scatter"]
96
+ color_index: int | None = None
96
97
 
97
98
  x_error: _SerializableArray | None = None
98
99
  y_error: _SerializableArray | None = None
@@ -167,6 +168,7 @@ class HistogramData:
167
168
  data: _SerializableArray
168
169
  label: str | None = None
169
170
  opacity: float = 0.7
171
+ color_index: int | None = None
170
172
 
171
173
  def __post_init__(self):
172
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\"\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')
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=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
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")
@@ -13,9 +13,18 @@
13
13
 
14
14
  """Routine library."""
15
15
 
16
- __all__ = ["ResonatorMapping", "Routine", "TransmonDiscovery", "TransmonRetuning"]
16
+ __all__ = [
17
+ "OneQubitCalibration",
18
+ "ResonatorMapping",
19
+ "Routine",
20
+ "TransmonCoherence",
21
+ "TransmonDiscovery",
22
+ "TransmonRetuning",
23
+ ]
17
24
 
18
25
  from .common import Routine
26
+ from .one_qubit_calibration import OneQubitCalibration
19
27
  from .resonator_mapping import ResonatorMapping
28
+ from .transmon_coherence import TransmonCoherence
20
29
  from .transmon_discovery import TransmonDiscovery
21
30
  from .transmon_retuning import TransmonRetuning
@@ -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"]
@@ -20,7 +20,7 @@ class ResonatorMapping(Routine):
20
20
  """
21
21
  Parameters for running a resonator mapping routine.
22
22
 
23
- Parameters
23
+ Attributes
24
24
  ----------
25
25
  feedlines : list[str] or None
26
26
  The feedlines to target in the routine.
@@ -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
@@ -22,24 +22,20 @@ class TransmonDiscovery(Routine):
22
22
  """
23
23
  Parameters for running a transmon discovery routine.
24
24
 
25
- Parameters
25
+ Attributes
26
26
  ----------
27
27
  transmon : str
28
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
29
  spectroscopy_waveform : ConstantWaveform or None, optional
36
30
  The drive pulse used during transmon spectroscopy and transmon anharmonicity.
37
31
  Defaults to a 10,000 ns pulse whose amplitude is defined by the logic of the experiment.
32
+ force_rerun : bool, optional
33
+ Whether to rerun the entire routine regardless transmon's current calibration status.
34
+ Defaults to False.
38
35
  """
39
36
 
40
37
  _routine_name: str = PrivateAttr("transmon_discovery")
41
38
 
42
39
  transmon: str
43
- recycle_delay_ns: int = 100_000
44
- readout_waveform: ConstantWaveform | None = None
45
40
  spectroscopy_waveform: ConstantWaveform | None = None
41
+ force_rerun: bool = False
@@ -11,21 +11,31 @@
11
11
  # distributed under the License is distributed on an "AS IS" BASIS. See the
12
12
  # License for the specific language.
13
13
 
14
-
15
14
  from pydantic import PrivateAttr
16
15
 
17
- from boulderopalscaleupsdk.routines import Routine
16
+ from boulderopalscaleupsdk.experiments import ConstantWaveform
17
+
18
+ from .common import Routine
18
19
 
19
20
 
20
21
  class TransmonRetuning(Routine):
21
22
  """
22
23
  Parameters for running a transmon retuning routine.
23
24
 
24
- Parameters
25
+ Attributes
25
26
  ----------
26
27
  transmon : str
27
28
  The reference for the transmon to target.
29
+ spectroscopy_waveform : ConstantWaveform or None, optional
30
+ The drive pulse used during transmon spectroscopy.
31
+ Defaults to a 10,000 ns pulse whose amplitude is defined by the logic of the experiment.
32
+ force_rerun : bool, optional
33
+ Whether to rerun the entire routine regardless transmon's current calibration status.
34
+ Defaults to False.
28
35
  """
29
36
 
30
37
  _routine_name: str = PrivateAttr("transmon_retuning")
38
+
31
39
  transmon: str
40
+ spectroscopy_waveform: ConstantWaveform | None = None
41
+ force_rerun: bool = False