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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.4.dist-info}/METADATA +1 -1
  2. {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.4.dist-info}/RECORD +38 -33
  3. boulderopalscaleupsdk/common/dtypes.py +12 -1
  4. boulderopalscaleupsdk/device/__init__.py +0 -7
  5. boulderopalscaleupsdk/device/config_loader.py +1 -0
  6. boulderopalscaleupsdk/device/controller/qblox.py +129 -0
  7. boulderopalscaleupsdk/device/defcal.py +5 -44
  8. boulderopalscaleupsdk/device/device.py +41 -3
  9. boulderopalscaleupsdk/device/processor/__init__.py +0 -2
  10. boulderopalscaleupsdk/device/processor/common.py +1 -6
  11. boulderopalscaleupsdk/device/processor/superconducting_processor.py +11 -4
  12. boulderopalscaleupsdk/experiments/__init__.py +16 -2
  13. boulderopalscaleupsdk/experiments/chi01_scan.py +10 -9
  14. boulderopalscaleupsdk/experiments/common.py +0 -16
  15. boulderopalscaleupsdk/experiments/power_rabi.py +13 -10
  16. boulderopalscaleupsdk/experiments/power_rabi_ef.py +66 -0
  17. boulderopalscaleupsdk/experiments/ramsey.py +13 -12
  18. boulderopalscaleupsdk/experiments/readout_classifier_calibration.py +22 -6
  19. boulderopalscaleupsdk/experiments/resonator_spectroscopy.py +11 -11
  20. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_bias.py +13 -13
  21. boulderopalscaleupsdk/experiments/resonator_spectroscopy_by_power.py +12 -12
  22. boulderopalscaleupsdk/experiments/t1.py +8 -16
  23. boulderopalscaleupsdk/experiments/t2.py +9 -8
  24. boulderopalscaleupsdk/experiments/t2_echo.py +49 -0
  25. boulderopalscaleupsdk/experiments/transmon_anharmonicity.py +16 -17
  26. boulderopalscaleupsdk/experiments/transmon_spectroscopy.py +10 -10
  27. boulderopalscaleupsdk/experiments/waveforms.py +63 -0
  28. boulderopalscaleupsdk/plotting/dtypes.py +1 -0
  29. boulderopalscaleupsdk/protobuf/v1/device_pb2.py +20 -20
  30. boulderopalscaleupsdk/protobuf/v1/device_pb2.pyi +4 -2
  31. boulderopalscaleupsdk/routines/__init__.py +16 -1
  32. boulderopalscaleupsdk/routines/common.py +13 -0
  33. boulderopalscaleupsdk/routines/resonator_mapping.py +16 -0
  34. boulderopalscaleupsdk/routines/transmon_discovery.py +45 -0
  35. boulderopalscaleupsdk/routines/transmon_retuning.py +31 -0
  36. boulderopalscaleupsdk/stubs/maps.py +11 -2
  37. {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.4.dist-info}/LICENSE +0 -0
  38. {boulder_opal_scale_up_sdk-1.0.3.dist-info → boulder_opal_scale_up_sdk-1.0.4.dist-info}/WHEEL +0 -0
@@ -14,14 +14,13 @@
14
14
  from pydantic import PrivateAttr
15
15
 
16
16
  from .common import (
17
- ConstantWaveform,
18
17
  CWSIterable,
19
18
  Experiment,
20
- GaussianWaveform,
21
19
  HypIterable,
22
20
  LinspaceIterable,
23
21
  RangeIterable,
24
22
  )
23
+ from .waveforms import ConstantWaveform, Waveform
25
24
 
26
25
  DEFAULT_SHOT_COUNT = 400
27
26
 
@@ -33,29 +32,33 @@ class PowerRabi(Experiment):
33
32
  Parameters
34
33
  ----------
35
34
  transmon : str
36
- The reference for the transmon to target in the experiment.
35
+ The reference for the transmon to target.
37
36
  scales : list[float] or LinspaceIterable or RangeIterable
38
37
  or CWSIterable or HypIterable or None, optional
39
- The scaling factors for the drive pulse amplitude. If None, a default scan will be used.
40
- drive_waveform : GaussianWaveform
38
+ The scaling factors for the drive pulse amplitude.
39
+ If None, a default scan will be used.
40
+ drive_waveform : Waveform
41
41
  The waveform to use for the drive pulse.
42
42
  recycle_delay_ns : int
43
- The delay time between consecutive shots of the experiment, in nanoseconds.
43
+ The delay between consecutive shots, in nanoseconds.
44
44
  shot_count : int, optional
45
- The number of shots to be taken in the experiment. Defaults to 400.
45
+ The number of shots to take. Defaults to 400.
46
46
  pulse_vp : float, optional
47
- The voltage per pulse. If None, a default value will be used.
47
+ The voltage per pulse, in Volts. Defaults to the amplitude of the X gate.
48
48
  measure_waveform : ConstantWaveform or None, optional
49
49
  The waveform to use for the measurement pulse.
50
- If not provided, the measurement defcal will be used.
50
+ Defaults to the measurement defcal.
51
+ run_mixer_calibration: bool
52
+ Whether to run mixer calibrations before running a program. Defaults to False.
51
53
  """
52
54
 
53
55
  _experiment_name: str = PrivateAttr("power_rabi")
54
56
 
55
57
  transmon: str
56
58
  scales: list[float] | LinspaceIterable | RangeIterable | CWSIterable | HypIterable | None = None
57
- drive_waveform: GaussianWaveform
59
+ drive_waveform: Waveform
58
60
  recycle_delay_ns: int
59
61
  shot_count: int = DEFAULT_SHOT_COUNT
60
62
  pulse_vp: float | None = None
61
63
  measure_waveform: ConstantWaveform | None = None
64
+ run_mixer_calibration: bool = False
@@ -0,0 +1,66 @@
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 (
17
+ CWSIterable,
18
+ Experiment,
19
+ HypIterable,
20
+ LinspaceIterable,
21
+ RangeIterable,
22
+ )
23
+ from .waveforms import ConstantWaveform, Waveform
24
+
25
+ DEFAULT_RECYCLE_DELAY_NS = 200_000
26
+ DEFAULT_SHOT_COUNT = 400
27
+ DEFAULT_DURATION_NS = 2_000
28
+
29
+
30
+ class PowerRabiEF(Experiment):
31
+ """
32
+ Parameters for running a Power Rabi EF experiment.
33
+
34
+ Parameters
35
+ ----------
36
+ transmon : str
37
+ The reference for the transmon to target.
38
+ scales : list[float] or LinspaceIterable or RangeIterable
39
+ or CWSIterable or HypIterable or None, optional
40
+ The scaling factors for the drive pulse amplitude.
41
+ If None, a default scan will be used.
42
+ drive_waveform : Waveform
43
+ The waveform to use for the drive pulse.
44
+ recycle_delay_ns : int
45
+ The delay between consecutive shots, in nanoseconds.
46
+ shot_count : int, optional
47
+ The number of shots to take. Defaults to 400.
48
+ pulse_vp : float, optional
49
+ The voltage per pulse, in Volts. Defaults to the amplitude of the X gate.
50
+ measure_waveform : ConstantWaveform or None, optional
51
+ The waveform to use for the measurement pulse.
52
+ Defaults to the measurement defcal.
53
+ run_mixer_calibration: bool
54
+ Whether to run mixer calibrations before running a program. Defaults to False.
55
+ """
56
+
57
+ _experiment_name: str = PrivateAttr("power_rabi_ef")
58
+
59
+ transmon: str
60
+ scales: list[float] | LinspaceIterable | RangeIterable | CWSIterable | HypIterable | None = None
61
+ drive_waveform: Waveform
62
+ recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
63
+ shot_count: int = DEFAULT_SHOT_COUNT
64
+ pulse_vp: float | None = None
65
+ measure_waveform: ConstantWaveform | None = None
66
+ run_mixer_calibration: bool = False
@@ -13,11 +13,11 @@
13
13
 
14
14
  from pydantic import PrivateAttr
15
15
 
16
- from .common import ConstantWaveform, Experiment
16
+ from .common import Experiment
17
+ from .waveforms import ConstantWaveform
17
18
 
18
19
  DEFAULT_RECYCLE_DELAY_NS = 10_000
19
20
  DEFAULT_SHOT_COUNT = 400
20
- DEFAULT_DURATION_NS = 2_000
21
21
 
22
22
 
23
23
  class Ramsey(Experiment):
@@ -27,33 +27,34 @@ class Ramsey(Experiment):
27
27
  Parameters
28
28
  ----------
29
29
  transmon : str
30
- The reference for the transmon to target in the experiment.
31
- max_delay_ns : int
32
- The maximum delay time, in nanoseconds.
30
+ The reference for the transmon to target.
33
31
  min_delay_ns : int
34
32
  The minimum delay time, in nanoseconds.
33
+ max_delay_ns : int
34
+ The maximum delay time, in nanoseconds.
35
35
  delay_step_ns : int
36
36
  The step for generating the list of delays, in nanoseconds.
37
37
  virtual_detuning : float
38
- The difference between the drive signal frequency and the qubit frequency, in Hz.
38
+ The virtual detuning added between SX pulses, in Hz.
39
39
  recycle_delay_ns : int, optional
40
- The delay time between consecutive shots of the experiment, in nanoseconds.
41
- Defaults to 10000 ns.
40
+ The delay between consecutive shots, in nanoseconds. Defaults to 10,000 ns.
42
41
  shot_count : int, optional
43
- The number of shots to be taken in the experiment.
44
- Defaults to 400.
42
+ The number of shots to take. Defaults to 400.
45
43
  measure_waveform : ConstantWaveform or None, optional
46
44
  The waveform to use for the measurement pulse.
47
- If not provided, the measurement defcal will be used.
45
+ Defaults to the measurement defcal.
46
+ run_mixer_calibration: bool
47
+ Whether to run mixer calibrations before running a program. Defaults to False.
48
48
  """
49
49
 
50
50
  _experiment_name: str = PrivateAttr("ramsey")
51
51
 
52
52
  transmon: str
53
- max_delay_ns: int
54
53
  min_delay_ns: int
54
+ max_delay_ns: int
55
55
  delay_step_ns: int
56
56
  virtual_detuning: float
57
57
  recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
58
58
  shot_count: int = DEFAULT_SHOT_COUNT
59
59
  measure_waveform: ConstantWaveform | None = None
60
+ run_mixer_calibration: bool = False
@@ -1,6 +1,20 @@
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
- from .common import ConstantWaveform, Experiment
16
+ from .common import Experiment
17
+ from .waveforms import ConstantWaveform
4
18
 
5
19
 
6
20
  class ReadoutClassifierCalibration(Experiment):
@@ -10,15 +24,16 @@ class ReadoutClassifierCalibration(Experiment):
10
24
  Parameters
11
25
  ----------
12
26
  transmon : str
13
- The reference for the transmon to target in the experiment.
27
+ The reference for the transmon to target.
14
28
  recycle_delay_ns : int
15
- The delay time between consecutive shots of the experiment, in nanoseconds.
29
+ The delay between consecutive shots, in nanoseconds.
16
30
  shot_count : int, optional
17
- The number of shots to be taken in the experiment.
18
- Defaults to 5000.
31
+ The number of shots to take. Defaults to 5,000.
19
32
  measure_waveform : ConstantWaveform or None, optional
20
33
  The waveform to use for the measurement pulse.
21
- If not provided, the measurement defcal will be used.
34
+ Defaults to the measurement defcal.
35
+ run_mixer_calibration: bool
36
+ Whether to run mixer calibrations before running a program. Defaults to False.
22
37
  """
23
38
 
24
39
  _experiment_name: str = PrivateAttr("readout_classifier_calibration")
@@ -26,3 +41,4 @@ class ReadoutClassifierCalibration(Experiment):
26
41
  recycle_delay_ns: int
27
42
  shot_count: int = 5000
28
43
  measure_waveform: ConstantWaveform | None = None
44
+ run_mixer_calibration: bool = False
@@ -14,15 +14,14 @@
14
14
  from pydantic import PrivateAttr
15
15
 
16
16
  from .common import (
17
- ConstantWaveform,
18
17
  CWSIterable,
19
18
  Experiment,
20
19
  HypIterable,
21
20
  LinspaceIterable,
22
21
  RangeIterable,
23
22
  )
23
+ from .waveforms import ConstantWaveform
24
24
 
25
- DEFAULT_DURATION_NS = 2000 # ns
26
25
  DEFAULT_RECYCLE_DELAY_NS = 1000 # ns
27
26
  DEFAULT_SHOT_COUNT = 100
28
27
 
@@ -34,20 +33,20 @@ class ResonatorSpectroscopy(Experiment):
34
33
  Parameters
35
34
  ----------
36
35
  resonator : str
37
- The reference for the resonator to target in the experiment.
36
+ The reference for the resonator to target.
38
37
  frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable
39
38
  or HypIterable or None, optional
40
- The frequencies at which to scan.
41
- If None, frequencies around the readout frequency will be used.
42
- recycle_delay_ns :int, optional
43
- The delay time between consecutive shots of the experiment, in nanoseconds.
44
- Defaults to 1000 ns.
39
+ The frequencies at which to scan, in Hz.
40
+ Defaults to a scan around the readout frequency.
41
+ recycle_delay_ns : int, optional
42
+ The delay between consecutive shots, in nanoseconds. Defaults to 1,000 ns.
45
43
  shot_count : int, optional
46
- The number of shots to be taken in the experiment.
47
- Defaults to 100.
44
+ The number of shots to take. Defaults to 100.
48
45
  measure_waveform : ConstantWaveform or None, optional
49
46
  The waveform to use for the measurement pulse.
50
- If not provided, the measurement defcal will be used.
47
+ Defaults to the measurement defcal.
48
+ run_mixer_calibration: bool
49
+ Whether to run mixer calibrations before running a program. Defaults to False.
51
50
  """
52
51
 
53
52
  _experiment_name: str = PrivateAttr("resonator_spectroscopy")
@@ -59,3 +58,4 @@ class ResonatorSpectroscopy(Experiment):
59
58
  recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
60
59
  shot_count: int = DEFAULT_SHOT_COUNT
61
60
  measure_waveform: ConstantWaveform | None = None
61
+ run_mixer_calibration: bool = False
@@ -14,15 +14,14 @@
14
14
  from pydantic import PrivateAttr
15
15
 
16
16
  from .common import (
17
- ConstantWaveform,
18
17
  CWSIterable,
19
18
  Experiment,
20
19
  HypIterable,
21
20
  LinspaceIterable,
22
21
  RangeIterable,
23
22
  )
23
+ from .waveforms import ConstantWaveform
24
24
 
25
- DEFAULT_DURATION_NS = 2000
26
25
  DEFAULT_SHOT_COUNT = 100
27
26
  DEFAULT_RECYCLE_DELAY_NS = 10_000
28
27
  DEFAULT_BIASES = LinspaceIterable(start=-0.49, stop=0.49, count=21)
@@ -35,27 +34,27 @@ class ResonatorSpectroscopyByBias(Experiment):
35
34
  Parameters
36
35
  ----------
37
36
  resonator : str
38
- The reference for the resonator to target in the experiment.
37
+ The reference for the resonator to target.
39
38
  bias_transmons : list[str] or None, optional
40
39
  The references for the transmons to bias.
41
- If None, it defaults to transmon coupled to the resonator.
40
+ Defaults to transmon coupled to the resonator.
42
41
  frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable
43
42
  or HypIterable or None, optional
44
- The frequencies at which to scan.
45
- If None, frequencies around the readout frequency will be used.
43
+ The frequencies at which to scan, in Hz.
44
+ Defaults to a scan around the readout frequency.
46
45
  biases : list[int] or LinspaceIterable or RangeIterable or CWSIterable
47
46
  or HypIterable, optional
48
- The biases at which to scan.
49
- If None, defaults to 21 points between -0.49 and 0.49.
47
+ The biases at which to scan, in Volts.
48
+ Defaults to 21 points between -0.49 and 0.49.
50
49
  recycle_delay_ns : int, optional
51
- The delay time between consecutive shots of the experiment, in nanoseconds.
52
- Defaults to 10000 ns.
50
+ The delay between consecutive shots, in nanoseconds. Defaults to 10,000 ns.
53
51
  shot_count : int, optional
54
- The number of shots to be taken in the experiment.
55
- Defaults to 100.
52
+ The number of shots to take. Defaults to 100.
56
53
  measure_waveform : ConstantWaveform or None, optional
57
54
  The waveform to use for the measurement pulse.
58
- If not provided, the measurement defcal will be used.
55
+ Defaults to the measurement defcal.
56
+ run_mixer_calibration: bool
57
+ Whether to run mixer calibrations before running a program. Defaults to False.
59
58
  """
60
59
 
61
60
  _experiment_name: str = PrivateAttr("resonator_spectroscopy_by_bias")
@@ -71,3 +70,4 @@ class ResonatorSpectroscopyByBias(Experiment):
71
70
  recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
72
71
  shot_count: int = DEFAULT_SHOT_COUNT
73
72
  measure_waveform: ConstantWaveform | None = None
73
+ run_mixer_calibration: bool = False
@@ -33,23 +33,22 @@ class ResonatorSpectroscopyByPower(Experiment):
33
33
  Parameters
34
34
  ----------
35
35
  resonator : str
36
- The reference for the resonator to target in the experiment.
36
+ The reference for the resonator to target.
37
37
  frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable
38
38
  or HypIterable or None, optional
39
- The frequencies at which to scan.
40
- If None, frequencies around the readout frequency will be used.
41
- powers : list[int] or None, optional
42
- The powers at which to scan the readout pulse.
39
+ The frequencies at which to scan, in Hz.
40
+ Defaults to a scan around the readout frequency.
41
+ powers_dbm : list[float] or None, optional
42
+ The powers at which to scan the readout pulse, in dBm.
43
43
  If None, a default power scan will be used.
44
44
  duration_ns : int, optional
45
- The duration of the readout pulse, in nanoseconds.
46
- Defaults to 2000 ns.
45
+ The duration of the readout pulse, in nanoseconds. Defaults to 2,000 ns.
47
46
  recycle_delay_ns : int, optional
48
- The delay time between consecutive shots of the experiment, in nanoseconds.
49
- Defaults to 1000 ns.
47
+ The delay between consecutive shots, in nanoseconds. Defaults to 1,000 ns.
50
48
  shot_count : int, optional
51
- The number of shots to be taken in the experiment.
52
- Defaults to 100.
49
+ The number of shots to take. Defaults to 100.
50
+ run_mixer_calibration: bool
51
+ Whether to run mixer calibrations before running a program. Defaults to False.
53
52
  """
54
53
 
55
54
  _experiment_name: str = PrivateAttr("resonator_spectroscopy_by_power")
@@ -58,7 +57,8 @@ class ResonatorSpectroscopyByPower(Experiment):
58
57
  frequencies: list[int] | LinspaceIterable | RangeIterable | CWSIterable | HypIterable | None = (
59
58
  None
60
59
  )
61
- powers: list[float] | None = None
60
+ powers_dbm: list[float] | None = None
62
61
  duration_ns: int = DEFAULT_DURATION_NS
63
62
  recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
64
63
  shot_count: int = DEFAULT_SHOT_COUNT
64
+ run_mixer_calibration: bool = False
@@ -17,7 +17,6 @@ from .common import Experiment, LogspaceIterable
17
17
 
18
18
  DEFAULT_RECYCLE_DELAY_NS = 200_000
19
19
  DEFAULT_SHOT_COUNT = 400
20
- DEFAULT_DURATION_NS = 2_000
21
20
 
22
21
 
23
22
  class T1(Experiment):
@@ -27,28 +26,21 @@ class T1(Experiment):
27
26
  Parameters
28
27
  ----------
29
28
  transmon : str
30
- The transmon to target in the experiment.
31
- delays_ns : list[int] | RangeIterable
32
- The delay time, in nanoseconds.
33
- readout_amplitude : float, optional
34
- The amplitude of the readout pulse.
35
- If None, a default amplitude will be used.
36
- duration_ns : int, optional
37
- The duration of the readout pulse, in nanoseconds.
38
- Defaults to 2000 ns.
29
+ The reference for the transmon to target.
30
+ delays_ns : LogspaceIterable
31
+ The delay times, in nanoseconds.
39
32
  recycle_delay_ns : int, optional
40
- The delay time between consecutive shots of the experiment, in nanoseconds.
41
- Defaults to 200_000 ns.
33
+ The delay between consecutive shots, in nanoseconds. Defaults to 200,000 ns.
42
34
  shot_count : int, optional
43
- The number of shots to be taken in the experiment.
44
- Defaults to 400.
35
+ The number of shots to take. Defaults to 400.
36
+ run_mixer_calibration: bool
37
+ Whether to run mixer calibrations before running a program. Defaults to False.
45
38
  """
46
39
 
47
40
  _experiment_name: str = PrivateAttr("t1")
48
41
 
49
42
  transmon: str
50
43
  delays_ns: LogspaceIterable
51
- readout_amplitude: float
52
- duration_ns: int = DEFAULT_DURATION_NS
53
44
  recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
54
45
  shot_count: int = DEFAULT_SHOT_COUNT
46
+ run_mixer_calibration: bool = False
@@ -26,17 +26,17 @@ class T2(Experiment):
26
26
  Parameters
27
27
  ----------
28
28
  transmon : str
29
- The reference for the transmon to target in the experiment.
30
- delays_ns : list[int] | RangeIterable
31
- The delay time, in nanoseconds.
29
+ The reference for the transmon to target.
30
+ delays_ns : list[int] or RangeIterable
31
+ The delay times, in nanoseconds.
32
32
  virtual_detuning : float
33
- The difference between the drive signal frequency and the qubit frequency, in Hz.
33
+ The virtual detuning added between SX pulses, in Hz.
34
34
  recycle_delay_ns : int, optional
35
- The delay time between consecutive shots of the experiment, in nanoseconds.
36
- Defaults to 100_000 ns.
35
+ The delay between consecutive shots, in nanoseconds. Defaults to 100,000 ns.
37
36
  shot_count : int, optional
38
- The number of shots to be taken in the experiment.
39
- Defaults to 400.
37
+ The number of shots to take. Defaults to 400.
38
+ run_mixer_calibration: bool
39
+ Whether to run mixer calibrations before running a program. Defaults to False.
40
40
  """
41
41
 
42
42
  _experiment_name: str = PrivateAttr("t2")
@@ -46,3 +46,4 @@ class T2(Experiment):
46
46
  virtual_detuning: float
47
47
  recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
48
48
  shot_count: int = DEFAULT_SHOT_COUNT
49
+ run_mixer_calibration: bool = False
@@ -0,0 +1,49 @@
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 Experiment, RangeIterable
17
+
18
+ DEFAULT_RECYCLE_DELAY_NS = 100_000
19
+ DEFAULT_SHOT_COUNT = 400
20
+
21
+
22
+ class T2Echo(Experiment):
23
+ """
24
+ Parameters for running a T2 echo experiment.
25
+
26
+ Parameters
27
+ ----------
28
+ transmon : str
29
+ The reference for the transmon to target.
30
+ delays_ns : list[int] or RangeIterable
31
+ The delay times, in nanoseconds.
32
+ virtual_detuning : float
33
+ The virtual detuning added between SX pulses, in Hz.
34
+ recycle_delay_ns : int, optional
35
+ The delay between consecutive shots, in nanoseconds. Defaults to 100,000 ns.
36
+ shot_count : int, optional
37
+ The number of shots to take. Defaults to 400.
38
+ run_mixer_calibration: bool
39
+ Whether to run mixer calibrations before running a program. Defaults to False.
40
+ """
41
+
42
+ _experiment_name: str = PrivateAttr("t2_echo")
43
+
44
+ transmon: str
45
+ 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
49
+ run_mixer_calibration: bool = False
@@ -14,15 +14,14 @@
14
14
  from pydantic import PrivateAttr
15
15
 
16
16
  from .common import (
17
- ConstantWaveform,
18
17
  CWSIterable,
19
18
  Experiment,
20
19
  HypIterable,
21
20
  LinspaceIterable,
22
21
  RangeIterable,
23
22
  )
23
+ from .waveforms import ConstantWaveform
24
24
 
25
- DEFAULT_DURATION_NS = 2_000 # ns
26
25
  DEFAULT_RECYCLE_DELAY_NS = 1_000 # ns
27
26
  DEFAULT_SHOT_COUNT = 100
28
27
  DEFAULT_ANHARMONICITY_GUESS = -200e6 # Hz, typical anharmonicity for transmons
@@ -35,28 +34,27 @@ class TransmonAnharmonicity(Experiment):
35
34
  Parameters
36
35
  ----------
37
36
  transmon : str
38
- The transmon that is the target of the experiment.
37
+ The reference for the transmon to target.
39
38
  frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable
40
39
  or HypIterable or None, optional
41
- The drive frequencies to be scanned in the experiment.
42
- If None, a default scan will be used based on the transmon's frequency
43
- and anharmonicity.
44
- anharmonicity_guess_hz : float
45
- The guessed anharmonicity of the qubit, in Hz. This is used to determine the
46
- range of frequencies to scan if `frequencies` is not provided.
47
- Defaults to -200 MHz.
40
+ The frequencies at which to scan, in Hz.
41
+ Defaults to a scan based on the transmon's frequency and anharmonicity.
42
+ anharmonicity : float, optional
43
+ The guessed anharmonicity of the transmon, in Hz.
44
+ Used to determine the scan frequencies if not provided. Defaults to -200 MHz.
48
45
  recycle_delay_ns : int, optional
49
- The delay time between consecutive shots of the experiment, in nanoseconds.
50
- Defaults to 1000 ns.
46
+ The delay between consecutive shots, in nanoseconds. Defaults to 1,000 ns.
51
47
  shot_count : int, optional
52
- The number of shots to be taken in the experiment. Defaults to 100.
48
+ The number of shots to take. Defaults to 100.
53
49
  spectroscopy_waveform : ConstantWaveform or None, optional
54
50
  The waveform to use in the spectroscopy pulse.
55
- If not provided, a waveform with a duration of 2000 ns
56
- and an amplitude of 1.5 times the transmon's x_vp will be used.
51
+ Defaults to a constant waveform with a duration of 2,000 ns
52
+ and an amplitude of 1.5 times the transmon's x_vp.
57
53
  measure_waveform : ConstantWaveform or None, optional
58
54
  The waveform to use for the measurement pulse.
59
- If not provided, the measurement defcal will be used.
55
+ Defaults to the measurement defcal.
56
+ run_mixer_calibration: bool
57
+ Whether to run mixer calibrations before running a program. Defaults to False.
60
58
  """
61
59
 
62
60
  _experiment_name: str = PrivateAttr("transmon_anharmonicity")
@@ -65,8 +63,9 @@ class TransmonAnharmonicity(Experiment):
65
63
  frequencies: list[int] | LinspaceIterable | RangeIterable | CWSIterable | HypIterable | None = (
66
64
  None
67
65
  )
68
- anharmonicity_guess_hz: float = DEFAULT_ANHARMONICITY_GUESS
66
+ anharmonicity: float = DEFAULT_ANHARMONICITY_GUESS
69
67
  recycle_delay_ns: int = DEFAULT_RECYCLE_DELAY_NS
70
68
  shot_count: int = DEFAULT_SHOT_COUNT
71
69
  spectroscopy_waveform: ConstantWaveform | None = None
72
70
  measure_waveform: ConstantWaveform | None = None
71
+ run_mixer_calibration: bool = False
@@ -14,15 +14,14 @@
14
14
  from pydantic import PrivateAttr
15
15
 
16
16
  from .common import (
17
- ConstantWaveform,
18
17
  CWSIterable,
19
18
  Experiment,
20
19
  HypIterable,
21
20
  LinspaceIterable,
22
21
  RangeIterable,
23
22
  )
23
+ from .waveforms import ConstantWaveform
24
24
 
25
- DEFAULT_DURATION_NS = 2000 # ns
26
25
  DEFAULT_RECYCLE_DELAY_NS = 1000 # ns
27
26
  DEFAULT_SHOT_COUNT = 100
28
27
 
@@ -34,22 +33,22 @@ class TransmonSpectroscopy(Experiment):
34
33
  Parameters
35
34
  ----------
36
35
  transmon : str
37
- The reference for the transmon to target in the experiment.
36
+ The reference for the transmon to target.
38
37
  frequencies : list[int] or LinspaceIterable or RangeIterable or CWSIterable
39
38
  or HypIterable or None, optional
40
- The frequencies at which to scan.
41
- If None, frequencies around the readout frequency will be used.
39
+ The frequencies at which to scan, in Hz.
40
+ Default to a scan around the transmon frequency.
42
41
  recycle_delay_ns : int, optional
43
- The delay time between consecutive shots of the experiment, in nanoseconds.
44
- Defaults to 1000 ns.
42
+ The delay between consecutive shots, in nanoseconds. Defaults to 1,000 ns.
45
43
  shot_count : int, optional
46
- The number of shots to be taken in the experiment.
47
- Defaults to 100.
44
+ The number of shots to take. Defaults to 100.
48
45
  spectroscopy_waveform : ConstantWaveform
49
46
  The waveform to use in the spectroscopy pulse.
50
47
  measure_waveform : ConstantWaveform or None, optional
51
48
  The waveform to use for the measurement pulse.
52
- If not provided, the measurement defcal will be used.
49
+ Defaults to the measurement defcal.
50
+ run_mixer_calibration: bool
51
+ Whether to run mixer calibrations before running a program. Defaults to False.
53
52
  """
54
53
 
55
54
  _experiment_name: str = PrivateAttr("transmon_spectroscopy")
@@ -62,3 +61,4 @@ class TransmonSpectroscopy(Experiment):
62
61
  shot_count: int = DEFAULT_SHOT_COUNT
63
62
  spectroscopy_waveform: ConstantWaveform
64
63
  measure_waveform: ConstantWaveform | None = None
64
+ run_mixer_calibration: bool = False