boulder-opal-scale-up-sdk 1.0.4__py3-none-any.whl → 1.0.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. {boulder_opal_scale_up_sdk-1.0.4.dist-info → boulder_opal_scale_up_sdk-1.0.6.dist-info}/METADATA +1 -1
  2. boulder_opal_scale_up_sdk-1.0.6.dist-info/RECORD +79 -0
  3. boulderopalscaleupsdk/agent/worker.py +36 -4
  4. boulderopalscaleupsdk/common/dtypes.py +41 -2
  5. boulderopalscaleupsdk/{stubs/__init__.py → constants.py} +3 -0
  6. boulderopalscaleupsdk/device/controller/qblox.py +94 -26
  7. boulderopalscaleupsdk/device/controller/quantum_machines.py +86 -17
  8. boulderopalscaleupsdk/device/device.py +5 -1
  9. boulderopalscaleupsdk/device/processor/common.py +3 -3
  10. boulderopalscaleupsdk/device/processor/superconducting_processor.py +23 -3
  11. boulderopalscaleupsdk/errors.py +21 -0
  12. boulderopalscaleupsdk/experiments/__init__.py +16 -2
  13. boulderopalscaleupsdk/experiments/chi01_scan.py +9 -7
  14. boulderopalscaleupsdk/experiments/cz_spectroscopy_by_bias.py +84 -0
  15. boulderopalscaleupsdk/experiments/drag_leakage_calibration.py +66 -0
  16. boulderopalscaleupsdk/experiments/fine_amplitude_calibration.py +54 -0
  17. boulderopalscaleupsdk/experiments/power_rabi.py +10 -7
  18. boulderopalscaleupsdk/experiments/power_rabi_ef.py +10 -9
  19. boulderopalscaleupsdk/experiments/ramsey.py +9 -7
  20. boulderopalscaleupsdk/experiments/ramsey_ef.py +62 -0
  21. boulderopalscaleupsdk/experiments/{readout_classifier_calibration.py → readout_classifier.py} +16 -6
  22. boulderopalscaleupsdk/experiments/readout_optimization.py +57 -0
  23. boulderopalscaleupsdk/experiments/resonator_spectroscopy.py +9 -7
  24. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_bias.py +12 -11
  25. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_power.py +10 -9
  26. boulderopalscaleupsdk/experiments/t1.py +8 -6
  27. boulderopalscaleupsdk/experiments/t2.py +12 -10
  28. boulderopalscaleupsdk/experiments/t2_echo.py +12 -10
  29. boulderopalscaleupsdk/experiments/transmon_anharmonicity.py +13 -12
  30. boulderopalscaleupsdk/experiments/transmon_spectroscopy.py +10 -8
  31. boulderopalscaleupsdk/experiments/voltage_bias_fine_tune.py +58 -0
  32. boulderopalscaleupsdk/experiments/zz_ramsey.py +59 -0
  33. boulderopalscaleupsdk/grpc_interceptors/error.py +318 -0
  34. boulderopalscaleupsdk/plotting/dtypes.py +10 -8
  35. boulderopalscaleupsdk/protobuf/v1/agent_pb2.py +9 -3
  36. boulderopalscaleupsdk/protobuf/v1/agent_pb2.pyi +14 -0
  37. boulderopalscaleupsdk/protobuf/v1/agent_pb2_grpc.py +34 -0
  38. boulderopalscaleupsdk/protobuf/v1/device_pb2.py +57 -49
  39. boulderopalscaleupsdk/protobuf/v1/device_pb2.pyi +67 -41
  40. boulderopalscaleupsdk/protobuf/v1/device_pb2_grpc.py +100 -66
  41. boulderopalscaleupsdk/protobuf/v1/job_pb2.py +47 -0
  42. boulderopalscaleupsdk/protobuf/v1/job_pb2.pyi +54 -0
  43. boulderopalscaleupsdk/protobuf/v1/job_pb2_grpc.py +138 -0
  44. boulderopalscaleupsdk/routines/__init__.py +10 -1
  45. boulderopalscaleupsdk/routines/one_qubit_calibration.py +36 -0
  46. boulderopalscaleupsdk/routines/resonator_mapping.py +1 -1
  47. boulderopalscaleupsdk/routines/transmon_coherence.py +34 -0
  48. boulderopalscaleupsdk/routines/transmon_discovery.py +5 -9
  49. boulderopalscaleupsdk/routines/transmon_retuning.py +13 -3
  50. boulderopalscaleupsdk/third_party/quantum_machines/__init__.py +1 -1
  51. boulderopalscaleupsdk/third_party/quantum_machines/config.py +51 -48
  52. boulder_opal_scale_up_sdk-1.0.4.dist-info/RECORD +0 -67
  53. boulderopalscaleupsdk/stubs/dtypes.py +0 -47
  54. boulderopalscaleupsdk/stubs/maps.py +0 -18
  55. {boulder_opal_scale_up_sdk-1.0.4.dist-info → boulder_opal_scale_up_sdk-1.0.6.dist-info}/LICENSE +0 -0
  56. {boulder_opal_scale_up_sdk-1.0.4.dist-info → boulder_opal_scale_up_sdk-1.0.6.dist-info}/WHEEL +0 -0
@@ -0,0 +1,57 @@
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 (
19
+ CWSIterable,
20
+ Experiment,
21
+ HypIterable,
22
+ LinspaceIterable,
23
+ RangeIterable,
24
+ )
25
+
26
+
27
+ class ReadoutOptimization(Experiment):
28
+ """
29
+ Parameters for optimizing the readout classifier.
30
+
31
+ Parameters
32
+ ----------
33
+ transmon : str
34
+ The reference for the transmon to target.
35
+ frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable or HypIterable
36
+ The readout frequencies to sweep, in Hz.
37
+ amplitudes : list[float]
38
+ The readout amplitudes to sweep.
39
+ recycle_delay_ns : int
40
+ The delay between consecutive shots, in nanoseconds. Defaults to 200,000 ns.
41
+ shot_count : int, optional
42
+ The number of shots to take. Defaults to 5,000.
43
+ run_mixer_calibration: bool
44
+ Whether to run mixer calibrations before running a program. Defaults to False.
45
+ update : "auto" or "off", optional
46
+ How the device should be updated after an experiment run. Defaults to auto.
47
+ """
48
+
49
+ _experiment_name: str = PrivateAttr("readout_optimization")
50
+
51
+ transmon: str
52
+ frequencies: list[int] | LinspaceIterable | RangeIterable | CWSIterable | HypIterable
53
+ amplitudes: list[float]
54
+ recycle_delay_ns: int = 200_000
55
+ shot_count: int = 5000
56
+ run_mixer_calibration: bool = False
57
+ update: Literal["auto", "off"] = "auto"
@@ -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,19 +24,16 @@ 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 ResonatorSpectroscopy(Experiment):
30
29
  """
31
30
  Parameters for running a resonator spectroscopy experiment.
32
31
 
33
- Parameters
32
+ Attributes
34
33
  ----------
35
34
  resonator : str
36
35
  The reference for the resonator 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
  Defaults to a scan around the readout frequency.
@@ -47,6 +46,8 @@ class ResonatorSpectroscopy(Experiment):
47
46
  Defaults to the measurement defcal.
48
47
  run_mixer_calibration: bool
49
48
  Whether to run mixer calibrations before running a program. Defaults to False.
49
+ update : "auto" or "off" or "prompt", optional
50
+ How the device should be updated after an experiment run. Defaults to auto.
50
51
  """
51
52
 
52
53
  _experiment_name: str = PrivateAttr("resonator_spectroscopy")
@@ -55,7 +56,8 @@ class ResonatorSpectroscopy(Experiment):
55
56
  frequencies: list[int] | LinspaceIterable | RangeIterable | CWSIterable | HypIterable | None = (
56
57
  None
57
58
  )
58
- recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
59
- shot_count: int = DEFAULT_SHOT_COUNT
59
+ recycle_delay_ns: int = 1_000
60
+ shot_count: int = 100
60
61
  measure_waveform: ConstantWaveform | None = None
61
62
  run_mixer_calibration: bool = False
63
+ update: Literal["auto", "off", "prompt"] = "auto"
@@ -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,32 +24,28 @@ from .common import (
22
24
  )
23
25
  from .waveforms import ConstantWaveform
24
26
 
25
- DEFAULT_SHOT_COUNT = 100
26
- DEFAULT_RECYCLE_DELAY_NS = 10_000
27
- DEFAULT_BIASES = LinspaceIterable(start=-0.49, stop=0.49, count=21)
28
-
29
27
 
30
28
  class ResonatorSpectroscopyByBias(Experiment):
31
29
  """
32
30
  Parameters for running a resonator spectroscopy by power experiment.
33
31
 
34
- Parameters
32
+ Attributes
35
33
  ----------
36
34
  resonator : str
37
35
  The reference for the resonator to target.
38
36
  bias_transmons : list[str] or None, optional
39
37
  The references for the transmons to bias.
40
38
  Defaults to transmon coupled to the resonator.
41
- frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable
39
+ frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable \
42
40
  or HypIterable or None, optional
43
41
  The frequencies at which to scan, in Hz.
44
42
  Defaults to a scan around the readout frequency.
45
- biases : list[int] or LinspaceIterable or RangeIterable or CWSIterable
43
+ biases : list[int] or LinspaceIterable or RangeIterable or CWSIterable \
46
44
  or HypIterable, optional
47
45
  The biases at which to scan, in Volts.
48
46
  Defaults to 21 points between -0.49 and 0.49.
49
47
  recycle_delay_ns : int, optional
50
- The delay between consecutive shots, in nanoseconds. Defaults to 10,000 ns.
48
+ The delay between consecutive shots, in nanoseconds. Defaults to 1,000 ns.
51
49
  shot_count : int, optional
52
50
  The number of shots to take. Defaults to 100.
53
51
  measure_waveform : ConstantWaveform or None, optional
@@ -55,6 +53,8 @@ class ResonatorSpectroscopyByBias(Experiment):
55
53
  Defaults to the measurement defcal.
56
54
  run_mixer_calibration: bool
57
55
  Whether to run mixer calibrations before running a program. Defaults to False.
56
+ update : "auto" or "off" or "prompt", optional
57
+ How the device should be updated after an experiment run. Defaults to auto.
58
58
  """
59
59
 
60
60
  _experiment_name: str = PrivateAttr("resonator_spectroscopy_by_bias")
@@ -65,9 +65,10 @@ class ResonatorSpectroscopyByBias(Experiment):
65
65
  None
66
66
  )
67
67
  biases: list[float] | LinspaceIterable | RangeIterable | CWSIterable | HypIterable = (
68
- DEFAULT_BIASES
68
+ LinspaceIterable(start=-0.49, stop=0.49, count=21)
69
69
  )
70
- recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
71
- shot_count: int = DEFAULT_SHOT_COUNT
70
+ recycle_delay_ns: int = 1_000
71
+ shot_count: int = 100
72
72
  measure_waveform: ConstantWaveform | None = None
73
73
  run_mixer_calibration: bool = False
74
+ update: Literal["auto", "off", "prompt"] = "auto"
@@ -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 (
@@ -21,20 +23,16 @@ from .common import (
21
23
  RangeIterable,
22
24
  )
23
25
 
24
- DEFAULT_DURATION_NS = 2000 # ns
25
- DEFAULT_RECYCLE_DELAY_NS = 1000 # ns
26
- DEFAULT_SHOT_COUNT = 100
27
-
28
26
 
29
27
  class ResonatorSpectroscopyByPower(Experiment):
30
28
  """
31
29
  Parameters for running a resonator spectroscopy by power experiment.
32
30
 
33
- Parameters
31
+ Attributes
34
32
  ----------
35
33
  resonator : str
36
34
  The reference for the resonator to target.
37
- frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable
35
+ frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable \
38
36
  or HypIterable or None, optional
39
37
  The frequencies at which to scan, in Hz.
40
38
  Defaults to a scan around the readout frequency.
@@ -49,6 +47,8 @@ class ResonatorSpectroscopyByPower(Experiment):
49
47
  The number of shots to take. Defaults to 100.
50
48
  run_mixer_calibration: bool
51
49
  Whether to run mixer calibrations before running a program. Defaults to False.
50
+ update : "auto" or "off" or "prompt", optional
51
+ How the device should be updated after an experiment run. Defaults to auto.
52
52
  """
53
53
 
54
54
  _experiment_name: str = PrivateAttr("resonator_spectroscopy_by_power")
@@ -58,7 +58,8 @@ class ResonatorSpectroscopyByPower(Experiment):
58
58
  None
59
59
  )
60
60
  powers_dbm: list[float] | None = None
61
- duration_ns: int = DEFAULT_DURATION_NS
62
- recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
63
- shot_count: int = DEFAULT_SHOT_COUNT
61
+ duration_ns: int = 2_000
62
+ recycle_delay_ns: int = 1_000
63
+ shot_count: int = 100
64
64
  run_mixer_calibration: bool = False
65
+ update: Literal["auto", "off", "prompt"] = "auto"
@@ -11,19 +11,18 @@
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 Experiment, LogspaceIterable
17
19
 
18
- DEFAULT_RECYCLE_DELAY_NS = 200_000
19
- DEFAULT_SHOT_COUNT = 400
20
-
21
20
 
22
21
  class T1(Experiment):
23
22
  """
24
23
  Parameters for running a T1 experiment.
25
24
 
26
- Parameters
25
+ Attributes
27
26
  ----------
28
27
  transmon : str
29
28
  The reference for the transmon to target.
@@ -35,12 +34,15 @@ class T1(Experiment):
35
34
  The number of shots to take. Defaults to 400.
36
35
  run_mixer_calibration: bool
37
36
  Whether to run mixer calibrations before running a program. Defaults to False.
37
+ update : "auto" or "off" or "prompt", optional
38
+ How the device should be updated after an experiment run. Defaults to auto.
38
39
  """
39
40
 
40
41
  _experiment_name: str = PrivateAttr("t1")
41
42
 
42
43
  transmon: str
43
44
  delays_ns: LogspaceIterable
44
- recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
45
- shot_count: int = DEFAULT_SHOT_COUNT
45
+ recycle_delay_ns: int = 200_000
46
+ shot_count: int = 400
46
47
  run_mixer_calibration: bool = False
48
+ update: Literal["auto", "off", "prompt"] = "auto"
@@ -11,17 +11,16 @@
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 Experiment, RangeIterable
17
19
 
18
- DEFAULT_RECYCLE_DELAY_NS = 100_000
19
- DEFAULT_SHOT_COUNT = 400
20
-
21
20
 
22
21
  class T2(Experiment):
23
22
  """
24
- Parameters for running a Ramsey experiment.
23
+ Parameters for running a T2 experiment.
25
24
 
26
25
  Parameters
27
26
  ----------
@@ -29,21 +28,24 @@ class T2(Experiment):
29
28
  The reference for the transmon to target.
30
29
  delays_ns : list[int] or RangeIterable
31
30
  The delay times, in nanoseconds.
32
- virtual_detuning : float
33
- The virtual detuning added between SX pulses, in Hz.
31
+ oscillation_count : int, optional
32
+ The target number of oscillations to expect. Defaults to 10.
34
33
  recycle_delay_ns : int, optional
35
- The delay between consecutive shots, in nanoseconds. Defaults to 100,000 ns.
34
+ The delay between consecutive shots, in nanoseconds. Defaults to 200,000 ns.
36
35
  shot_count : int, optional
37
36
  The number of shots to take. Defaults to 400.
38
37
  run_mixer_calibration: bool
39
38
  Whether to run mixer calibrations before running a program. Defaults to False.
39
+ update : "auto" or "off" or "prompt", optional
40
+ How the device should be updated after an experiment run. Defaults to auto.
40
41
  """
41
42
 
42
43
  _experiment_name: str = PrivateAttr("t2")
43
44
 
44
45
  transmon: str
45
46
  delays_ns: list[int] | RangeIterable
46
- virtual_detuning: float
47
- recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
48
- shot_count: int = DEFAULT_SHOT_COUNT
47
+ oscillation_count: int = 10
48
+ recycle_delay_ns: int = 200_000
49
+ shot_count: int = 400
49
50
  run_mixer_calibration: bool = False
51
+ update: Literal["auto", "off", "prompt"] = "auto"
@@ -11,39 +11,41 @@
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 Experiment, RangeIterable
17
19
 
18
- DEFAULT_RECYCLE_DELAY_NS = 100_000
19
- DEFAULT_SHOT_COUNT = 400
20
-
21
20
 
22
21
  class T2Echo(Experiment):
23
22
  """
24
23
  Parameters for running a T2 echo experiment.
25
24
 
26
- Parameters
25
+ Attributes
27
26
  ----------
28
27
  transmon : str
29
28
  The reference for the transmon to target.
30
29
  delays_ns : list[int] or RangeIterable
31
30
  The delay times, in nanoseconds.
32
- virtual_detuning : float
33
- The virtual detuning added between SX pulses, in Hz.
31
+ oscillation_count : int, optional
32
+ The target number of oscillations to expect. Defaults to 10.
34
33
  recycle_delay_ns : int, optional
35
- The delay between consecutive shots, in nanoseconds. Defaults to 100,000 ns.
34
+ The delay between consecutive shots, in nanoseconds. Defaults to 200,000 ns.
36
35
  shot_count : int, optional
37
36
  The number of shots to take. Defaults to 400.
38
37
  run_mixer_calibration: bool
39
38
  Whether to run mixer calibrations before running a program. Defaults to False.
39
+ update : "auto" or "off" or "prompt", optional
40
+ How the device should be updated after an experiment run. Defaults to auto.
40
41
  """
41
42
 
42
43
  _experiment_name: str = PrivateAttr("t2_echo")
43
44
 
44
45
  transmon: str
45
46
  delays_ns: list[int] | RangeIterable
46
- virtual_detuning: float
47
- recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
48
- shot_count: int = DEFAULT_SHOT_COUNT
47
+ oscillation_count: int = 10
48
+ recycle_delay_ns: int = 200_000
49
+ shot_count: int = 400
49
50
  run_mixer_calibration: bool = False
51
+ update: Literal["auto", "off", "prompt"] = "auto"
@@ -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,20 +24,16 @@ from .common import (
22
24
  )
23
25
  from .waveforms import ConstantWaveform
24
26
 
25
- DEFAULT_RECYCLE_DELAY_NS = 1_000 # ns
26
- DEFAULT_SHOT_COUNT = 100
27
- DEFAULT_ANHARMONICITY_GUESS = -200e6 # Hz, typical anharmonicity for transmons
28
-
29
27
 
30
28
  class TransmonAnharmonicity(Experiment):
31
29
  """
32
- Parameters for running a Qubit Anharmonicity experiment.
30
+ Parameters for running a transmon anharmonicity experiment.
33
31
 
34
- Parameters
32
+ Attributes
35
33
  ----------
36
34
  transmon : str
37
35
  The reference for the transmon to target.
38
- frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable
36
+ frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable \
39
37
  or HypIterable or None, optional
40
38
  The frequencies at which to scan, in Hz.
41
39
  Defaults to a scan based on the transmon's frequency and anharmonicity.
@@ -43,9 +41,9 @@ class TransmonAnharmonicity(Experiment):
43
41
  The guessed anharmonicity of the transmon, in Hz.
44
42
  Used to determine the scan frequencies if not provided. Defaults to -200 MHz.
45
43
  recycle_delay_ns : int, optional
46
- The delay between consecutive shots, in nanoseconds. Defaults to 1,000 ns.
44
+ The delay between consecutive shots, in nanoseconds. Defaults to 10,000 ns.
47
45
  shot_count : int, optional
48
- The number of shots to take. Defaults to 100.
46
+ The number of shots to take. Defaults to 400.
49
47
  spectroscopy_waveform : ConstantWaveform or None, optional
50
48
  The waveform to use in the spectroscopy pulse.
51
49
  Defaults to a constant waveform with a duration of 2,000 ns
@@ -55,6 +53,8 @@ class TransmonAnharmonicity(Experiment):
55
53
  Defaults to the measurement defcal.
56
54
  run_mixer_calibration: bool
57
55
  Whether to run mixer calibrations before running a program. Defaults to False.
56
+ update : "auto" or "off" or "prompt", optional
57
+ How the device should be updated after an experiment run. Defaults to auto.
58
58
  """
59
59
 
60
60
  _experiment_name: str = PrivateAttr("transmon_anharmonicity")
@@ -63,9 +63,10 @@ class TransmonAnharmonicity(Experiment):
63
63
  frequencies: list[int] | LinspaceIterable | RangeIterable | CWSIterable | HypIterable | None = (
64
64
  None
65
65
  )
66
- anharmonicity: float = DEFAULT_ANHARMONICITY_GUESS
67
- recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
68
- shot_count: int = DEFAULT_SHOT_COUNT
66
+ anharmonicity: float = -200e6
67
+ recycle_delay_ns: int = 10_000
68
+ shot_count: int = 400
69
69
  spectroscopy_waveform: ConstantWaveform | None = None
70
70
  measure_waveform: ConstantWaveform | None = None
71
71
  run_mixer_calibration: bool = False
72
+ update: Literal["auto", "off", "prompt"] = "auto"
@@ -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"