Release Notes - Latest Stable Version¶
Stable Release 26.10.0¶
Release date 29.10.2026
Requires: LabOne 26.10
Supports: Applications Library 26.10.0
DSL¶
- Functionality
DeviceSetup.add_connections()now lets aSignalConnection's entire ports spec be a single, already-defined logical signal (given as its uid/path string or aLogicalSignalobject), resolving to the raw port(s) that signal is already connected to. This makes it easy to multiplex an additional signal onto an existing port without repeating its raw port ID by hand. - Functionality Added a cache for dispatching of quantum operations, which results in noticeably faster build times for experiments that call many quantum operations. For example, a randomized benchmarking sequence constructed from quantum operations builds up to 1.8 times faster, and a batch of OpenQASM programs about 1.2 times faster.
- Bug Fix Fixed a bug where
DeviceSetupsilently swapped I and Q for HDAWG and UHFQA IQ signal connections whose ports list the Q channel before the I channel. Such connections are now rejected. - Bug Fix Fixed a bug where building DSL sections on worker threads failed with
AttributeError: '_thread._local' object has no attribute 'active_contexts'. This affected experiment construction parallelized across threads, where each worker opens a section with an explicituidand the main thread assembles the finished sections into the experiment. - Bug Fix Fixed a bug where type checkers rejected imports such as
from laboneq.dsl.enums import AveragingMode. The public names oflaboneq.dsl.enumsare now declared in__all__. - Bug Fix Fixed a bug where super-Gaussian pulses from
pulse_library.gaussian(ordergreater than 2) withzero_boundaries=Truedid not taper to zero at the boundary. They now reach zero one sample before the pulse starts, as order-2 Gaussians do. As a result of this fix, samples change by a fraction of a percent of the amplitude, so amplitudes for such pulses may need recalibration. - Removal Removed the deprecated
instrument_listsection of the device setup descriptor and the correspondinginstrument_listargument ofDeviceSetup.from_dicts(). Useinstrumentsinstead; the contents are unchanged. A descriptor that only hasinstrument_listnow fails with'instruments' section is mandatory in the setup descriptor. - Removal The
QPU.measure_section_lengthmethod has been removed. The functionality has been moved to the implementations ofQuantumOperationsfor qubit types where this property is meaningful. - Removal The
QuantumElement.loadandQuantumElement.savemethods have been removed after deprecation in version 2.43.0. Instead usesave(q, filename)andload(filename)fromlaboneq.serializers. - Removal The
user_definedattribute inTransmonParametershas been removed after deprecation in version 2.58.0. Use thecustomattribute from theQuantumParametersparent class instead. Quantum elements and quantum parameters serialized earlier still load; theiruser_definedentries are moved intocustom. - Removal Removed the
Results.device_calibration,Results.experiment_calibrationandResults.signal_mapproperties, which were deprecated in version 2.52.0. UseResults.device_setup.get_calibration(),Results.experiment.get_calibration()andResults.experiment.get_signal_map()instead. - Removal Removed the
pulse_library.sampled_pulse_realandpulse_library.sampled_pulse_complexfunctions, which were deprecated in version 2.51.0. Usepulse_library.sampled_pulseinstead; it accepts both real and complex samples.
OpenQASM¶
- Functionality LabOne Q now parses OpenQASM 3 programs with a built-in faster parser. It accepts language versions 3.0 to 3.2 and rejects a construct newer than the version a program declares. The environment variable
LABONEQ_OPENQASM_PARSERcan be set to explicitly choose a parser - possible values arebuiltinandopenpulse. Note: LabOne Q installed from the public source code in GitHub does not have the built-in parser - only the wheel installed from PyPI has it. - Bug Fix Fixed a bug where
OpenQASMTranspiler.section()added the program's quantum operations to an enclosing DSL context, such asexp.section(), leading to duplicated sections or dropped operations (e.g., delays).
Compiler¶
- Functionality The QCCS resource usage report logged at compile time now lists, for each near-time step, only the AWGs whose program changes in that step, so its rows add up to the reported total. It no longer repeats every AWG in every step.
- Bug Fix Fixed a bug where an HDAWG program with too many distinct waveforms would silently produce misaligned output. LabOne Q now detects this and raises a resource-limitation error. This limitation is also taken into account when automatic chunking is enabled.
- Bug Fix Fixed a bug where sections that span signals with different sample rates were padded to the sequencer grid: mixing HDAWG and UHFQA signals in one section inserted gaps of up to 13.3 ns between pulses and stretched the section to match. Timings in existing experiments may shift accordingly. Sections containing acquisitions, triggers or sweeps, or with
on_system_grid=True, are unaffected. - Bug Fix Fixed a bug where a swept amplitude or swept
increment_oscillator_phasewas applied twice per sweep step on a compressible pulse. The sweep then drifted away from the requested values, and the tail of each pulse played at the wrong amplitude or phase. This affects amplitude andincrement_oscillator_phasesweeps on the HDAWG, andincrement_oscillator_phasesweeps on the SHFSG. - Bug Fix Fixed a bug where specifying a local oscillator on an unsupported channel type was silently ignored. This now raises a compiler error.
- Bug Fix Fixed a bug where an experiment with a
matchon a near-time sweep parameter failed to compile when the cases used different near-time sweep parameters. - Bug Fix Fixed a bug where a near-time step that returns to an earlier real-time program ran the previous step's program instead, e.g., in an outer near-time sweep around an inner one.
- Bug Fix Fixed
CompiledExperiment.estimated_runtimefor near-time sweeps. - Bug Fix Fixed a bug where a delay between readout pulse and acquisition was silently dropped on SHFQA and SHFQC when several qubits share a readout channel but only some of them are measured.
- Removal Removed deprecated methods
CompiledExperiment.replace_pulseandCompiledExperiment.replace_phase_increment. Instead, modify the experiment by putting the new pulse and/or phase increment in there and recompile the experiment. NOTE: the methodsRuntimeContext.replace_pulseandRuntimeContext.replace_phase_incrementare preserved and can still be used to apply replacements in NT callbacks (these methods leave the compiled experiment unchanged). - Removal Removed deprecated properties:
CompiledExperiment.src,CompiledExperiment.waves,CompiledExperiment.recipe,CompiledExperiment.wave_indices,CompiledExperiment.command_tables, andCompiledExperiment.schedule. They exposed internal compiler output that user code should not rely on. For debugging or learning purposes, the same information is still available throughCompiledExperiment.scheduled_experimentand itsartifacts, which are internal and may change in any release. -
Removal Removed support for arbitrary Python objects as pulse parameter values and near-time callback arguments.
Such values have always been incompatible with serialization (such as saving the experiment to a file), however they were allowed otherwise - the compiler pickled them internally to carry them to the pulse sampler or near-time callback that consumes them, and the pickled bytes never left the Python process.
They are now rejected always with a
LabOneQException, when the experiment is compiled. The set of supported value types therefore no longer depends on whether the experiment gets serialized, and the compiler no longer pickles anything.The supported value types for
pulse_parametersand for the arguments ofExperiment.callare:int,float,complex,str,bytes,bool,None,SweepParameterorLinearSweepParameter- lists of the above
- dictionaries of the above with
strkeys
The lists and dictionaries may be nested and need not have homogeneous value types. A sweep parameter, however, must be the pulse parameter or callback argument value itself: nested inside a list or dictionary it is not resolved, and reaches the pulse sampler or near-time callback as the sweep parameter object rather than the value of the current sweep step.
Note that JSON-like data is already covered: nested lists and
str-keyed dictionaries of the types above can be passed as is. To pass a value of any other type, convert it to a supported one:- NumPy arrays: pass
array.tolist(), orarray.tobytes()and rebuild the array withnumpy.frombuffer, which preserves thedtypeexactly and stays compact for long arrays. - Anything else (a
set, adatetime, an instance of your own class, ...): serialize the value tobytesyourself and deserialize it inside the pulse sampler or near-time callback that consumes it.
-
Removal Removed the deprecated
HDAWG_FORCE_COMMAND_TABLE,SHFSG_FORCE_COMMAND_TABLE,SHFQA_MIN_PLAYWAVE_HINTandSHFQA_MIN_PLAYZERO_HINTcompiler settings. The options had no effect and therefore have no replacement functionality. - Removal Removed the deprecated
CompiledExperiment.experiment_dictattribute. It has been deprecated since version 2.14.0 and was alwaysNonefor a freshly compiled experiment. UseCompiledExperiment.experimentinstead.
Controller¶
- Functionality When a
Sessionis connected to a LabOne Q controller service (i.e., theDeviceSetupcarries the reserved controller-service server entry),run()now serves the session's registered near-time callbacks from the client process instead of rejecting them. - Bug Fix Fixed a bug where acquiring outside a chunked sweep on QCCS raised an error; such results now come from the last chunk.
- Bug Fix Fixed a bug where the PQSC failed to connect to an instrument that has no signals defined. Such an instrument is now ignored, and no connection to it is attempted.
- Documentation Fixed stale documentation links to
zhinst-toolkitthat pointed to removeddocs.zhinst.comresources. - Deprecation
RuntimeContext.get_results()is deprecated and will be removed in a future release. Usecopy.deepcopy(runtime_context.results)in near-time callbacks instead. - Removal The
use_async_apiargument ofSession.connecthas been removed after deprecation in version 2.52.0. It has had no effect since then. - Removal Near-time callbacks can no longer read
experiment,experiment_calibration,signal_map,device_setup,device_calibrationorconnection_statefrom theRuntimeContextthey receive as their first argument. These properties were deprecated in version 26.4.0. Pass the values a callback needs as arguments toexp.call(), or access the experiment and device setup directly where you define the callback. UseRuntimeContext.emulatedin place ofconnection_state.emulated.
Serializer¶
- Bug Fix Fixed a bug where JSON serialization of
CompiledExperimentfailed when usingOutputRoutewith an undefinedphase_shift. - Bug Fix Fixed a bug where
CompiledExperimentserialization failed withModuleNotFoundError: No module named 'xarray'when the optionalxarraydependency is not installed. -
Removal
CompiledExperimentnow holds the compiler's output bytes and builds its.scheduled_experimentview from them on first access. As a result, thescheduled_experimentconstructor argument ofCompiledExperimentwas removed; obtain aCompiledExperimentby compiling an experiment. Compiled experiments serialized with LabOne Q 26.7 or earlier can no longer be loaded, not even with theforcedeserialization option.The deprecated
laboneq.dsl.serialization.Serializernow delegates tolaboneq.serializersfor compiled experiments, so it reads and writes the same format. -
Removal Removed serialization support for
xarray.DataArrayandxarray.Datasetobjects, which existed only in the deprecated legacy serializer.AcquiredResult.to_xarray()andAcquiredResults.to_xarray()are unaffected. - Removal Custom serializers that call
laboneq.serializers.core.import_cls()must now pass bothbase_clsandprefix_restrictions. Omitting either was deprecated in version 26.4.0 and now raises aTypeError. The serialization tutorial shows how to pass them.
Analysis¶
- Removal Removed
laboneq.analysis.calculate_integration_kernels, which was deprecated in version 2.26.0. Usecalculate_integration_kernels_thresholdsinstead. It returns the same kernels together with the state discrimination thresholds, as a tuple(kernels, thresholds).
Contrib¶
- Removal Removed empty package
laboneq.contrib.example_helpers.descriptors. - Removal Removed the
laboneq.contrib.example_helpers.data_analysispackage, which was deprecated in version 2.15. Uselaboneq.analysis.fittinginstead.
Tutorials¶
- Bug Fix Fixed a bug where one of the single-qubit Clifford gates would never be part of the randomly generated Clifford gate sequence returned by
generate_play_rb_pulsesin the randomized benchmarking tutorial notebook.
Installation and Imports¶
- Functionality LabOne Q now declares a
zqcsextra that installs the correct version of the ZQCS backend package. - Functionality Improved
laboneq.simpleimport time by changing some eager package imports to lazy ones. - Bug Fix Fixed a bug where two installed distributions providing the same backend would either register the backend twice or report a confusing missing-module warning. LabOne Q now fails to import, naming both distributions so you can uninstall the obsolete one.
Applications Library¶
- Functionality Added the
ac_stark_vs_powerexperiment workflow and its analysis workflow (laboneq_applications.contrib.experiments.ac_stark_shift_vs_powerandlaboneq_applications.contrib.analysis.ac_stark_shift_vs_power). In this experiment, qubit spectroscopy is performed while the amplitude of an off-resonant qubit drive is varied, which causes a shift in the qubit frequency. By fitting the relationship between the frequency shift and the amplitude, we can determine the qubit frequency with greater precision. - Functionality The single-qubit randomized benchmarking experiment no longer routes its Clifford sequences through OpenQASM. Parsing the OpenQASM text back was the largest cost of building the experiment, and dropping it makes
create_experimentabout ten times faster. Theexperiment_workflowinterface and the pulses it produces are unchanged; inside it,create_sq_rb_qasmis nowgenerate_clifford_sequencesand returns the gates themselves,create_experimenttakes them asclifford_sequences, andadd_qasm_operationsandget_gate_mapare gone, the latter becausegenerate_clifford_sequencesnow applies the default gate map itself. - Functionality Experiments now accept a single quantum element in a list, such as
[q0], together with a 1D array of sweep points, as they do for a bareq0. Previously, a list of quantum elements required one row of sweep points per element, such as[[...]], even for a list of one. - Functionality Breaking change: The power and voltage range quantum element parameters now default to
Noneinstead of a fixed value. These ranges are instrument specific, so the library no longer imposes a default: when a parameter isNone, the range configured on the instrument is used. - Functionality Added a coupled-transmon demo platform,
laboneq_applications.contrib.qpu_types.demo_platform_coupled_transmons, which builds tunable transmon qubits connected in a chain by tunable couplers, including the QPU topology edges required by the coupler-mediated two-qubit gates and experiments. - Functionality Added a two-qubit interleaved randomized benchmarking workflow (
two_qubit_coupler_irb), inlaboneq_applications.contrib.experiments.two_qubit.two_qubit_irbwith its analysis workflow inlaboneq_applications.contrib.analysis.two_qubit.two_qubit_irb. - Functionality Added the
coupler_flux_rangeparameter toTunableCouplerParameters, which controls the output range for the flux control line. - Functionality
TunableTransmonOperationsnow has the operationflux_pulse, which plays a pulse on the qubit flux line. The pulse parameters come from the new qubit parameterflux_pulse, a constant pulse by default. - Functionality Added the
qubit_spectroscopy_qfluxexperiment workflow and its analysis workflow (laboneq_applications.contrib.experiments.qubit_spectroscopy_qfluxandlaboneq_applications.contrib.analysis.qubit_spectroscopy_qflux), which sweep the qubit drive frequency against the amplitude of a flux pulse applied to the qubit flux line, in order to map out the flux dependence of the qubit transition frequency. - Functionality Added the
resonator_spectroscopy_amplitude_qfluxexperiment workflow (laboneq_applications.contrib.experiments.resonator_spectroscopy_amplitude_qflux), which sweeps the readout frequency against the amplitude of a flux pulse applied to the qubit flux line. The workflow accepts multiple qubits, which are swept in parallel. Since the experiment sweeps the frequency of the hardware oscillator of the readout line, parallel execution is only possible for qubits whose measure lines use distinct QA channels. - Functionality Added the
update_qpu_edgestask, which updates the parameters of QPU topology edges. It behaves likeupdate_qpu, but accepts the edge keys as strings of the form"tag:source_node_uid:target_node_uid"instead of tuples, so that analysis tasks can return edge parameters in a form the logbook stores can serialize. - Functionality Added a qubit-driven flavor to the tunable-coupler CZ gate:
CzParametersgained an optionalcontrol_pulsedescribing a parametric flux drive on the qubit, andTunableCouplerOperationsgained theiswapanddischarge_couplerquantum operations, with the accompanyingIswapParameters. - Functionality Added the chevron, JAZZ and phase-correction calibration workflows for the qubit-driven CZ gate, in
laboneq_applications.contrib.experiments.two_qubitandlaboneq_applications.contrib.analysis.two_qubit. - Functionality The resonator spectroscopy experiment workflows (
resonator_spectroscopyandresonator_spectroscopy_amplitude) now accept multiple qubits, whose readout frequencies are swept in parallel. Since these experiments sweep the frequency of the hardware oscillator of the readout line, parallel execution is only possible for qubits whose measure lines use distinct QA channels. The workflows raise a clear error when two of the requested qubits share a QA channel. The formerqubitargument of these workflows (and of the resonator spectroscopy analysis workflow) is deprecated: it still works and raises aFutureWarning; usequbitsinstead. - Bug Fix Fixed a bug where
TunableCouplerandBosonicQubitalways applied a 0 Hz local oscillator andPortMode.LFto theirflux/swap_drivelines, which the compiler now rejects on baseband channels. Breaking change: For a line driven by an SG channel, set the newflux_on_sg_channel/swap_drive_on_sg_channelparameter toTrue; leave itFalsefor a line on a baseband channel. - Bug Fix Fixed a bug where the measurement QNDness experiment workflow led to an error when
do_analysiswas set toFalse. - Bug Fix Fixed a bug where the name for the signal propagation delay experiment workflow was unspecified.
- Bug Fix Fixed a bug where the resonator photons time-resolved
contribexperiment incorrectly used qubits instead of validated qubits in thecreate_experimenttask. - Bug Fix Fixed a bug where the TWPA
calibrate_cancellationexperiment selected the wrong readout local oscillator frequency. The readout local oscillator frequency is now set based on the pump frequency. - Bug Fix Fixed a bug where the
set_readout_amplitudequantum operation of the tunable transmons marked the whole experiment calibration, instead of the calibration of the measure line, when guarding against being called twice on the same signal. As a result, setting the readout amplitude of a second qubit in the same experiment raised aRuntimeError. The guard is now per measure line, so the readout amplitude of several qubits can be set in one experiment. - Documentation Added a new page Deployment to the user manual explaining our recommended way to work with the Applications Library repository.
- Documentation Fixed mistakes and inconsistencies in experiment docstring code examples.
- Documentation Updated the Qiskit VQE example notebook to remove the usage of the deprecated method
CompiledExperiment.replace_pulse, and to demonstrate a more explicit parameter update process. - Documentation Added a how-to guide on CZ Gate Calibration with Tunable Couplers.
- Documentation Improved the Memory Spectroscopy how-to guide and added five how-to guides for bosonic qubit experiments: Displacement Calibration, Selective Transmon Rx Calibration, SWAP Calibration, Wigner Tomography, and SNAP Calibration.
- Deprecation The validation and conversion functions in
laboneq_applications.core.validationhave been deprecated. Uselaboneq_applications.conversioninstead. - Deprecation The Applications Library is now developed and released together with LabOne Q, and its version always matches the LabOne Q version. Its release notes are part of the LabOne Q release notes. The
laboneq-applicationsrepository on GitHub receives its source code and its release notes with each release, and installing the package withpip install laboneq-applicationsis unchanged. The branches of that repository now follow those of the LabOne Q repository: releases go tomain, and patch releases torelease-X.Ybranches such asrelease-26.10. It no longer getsrelease-X.Y.Xbranches or a branch for each beta release.
General¶
- Functionality Added support for Python 3.15.
- Deprecation Getting the laboneq package version via
laboneq._version.get_versionhas been deprecated and will be removed in the future. Uselaboneq.__version__instead. - Deprecation Support for Python 3.10 is deprecated and will be removed in the stable release v27.01. Please upgrade to Python 3.11 or later.
Known Issues¶
- Running Gen1 experiments can produce controller warnings indicating RT start conditions on follower devices are not fulfilled (e.g.,
UHFQA:dev2801: AWG 0 didn't startafter 5s); experiments may still execute correctly, but affected Gen1 experiments may take ~20%+ longer due to the additional wait/retry behavior. We are working on a fix and will release it as a patch to 26.1.0 as soon as it is available. - Using the
reset_signal_oscillator_phase()on signals of typerf_signalis currently not supported. - Using
OpenQASMTranspiler.batch_experimentwith QASM programs that contain native measurement operations will lead to an unexpected shape of the returned data. To ensure the correct shape, measurement operations should be removed from the OpenQASM program, and.batch_experimentshould be called with the option fieldadd_measurement=True, which will add the measurement operations to the LabOne QExperimentduring the import step (see our tutorial for more details). - Using the internal scope to acquire raw traces on multiple channels of an SHFQA in a single experiment is only possible if the timing of all acquisitions is equal between instrument channels.
- Using runtime checks of the sequencer playback through the
disable_runtime_checks=Falseargument ofsession.connect(), is currently not possible when the experiment contains real-time feedback or is using the on-device PRNG. In the latter case, unintended error messages may be produced if the option is used. - When using the pipeliner in an experiment by specifying a
chunk_countparameter in a sweep, the number ofacquirecommands in each chunk currently needs to be equal. Typically, this means that the number of sweep steps within each chunk has to be the same. - When using
OutputSimulatoror pulse sheet viewer with an experiment using the pipeliner or near-time sweeping, currently only the first sequence step will be displayed. - When delaying logical signal lines of type
rf_signalvia thedelay_signalcalibration property, allrf_signals on the same sequencer core must be set to the same delay. - When delaying logical signal lines on the SHFQA via the
delay_signalcalibration property, the delays for the measure and acquire line must be the same; the measure pulse delay is not added to the acquire pulse delay as on the UHFQA. We recommend to useport_delayfor now. - When creating a section with very short content (below the device's minimum waveform length), the compiler may fail to map the experiment to valid SeqC, and will generate an error. As a workaround in these cases, manually add delays to the sequence.
Pre-Release versions¶
- Pre-Release 26.10.0b4
- Pre-Release 26.10.0b3
- Pre-Release 26.10.0b2
- Pre-Release 26.10.0b1
- Pre-Release 26.7.0b6
- Pre-Release 26.7.0b5
- Pre-Release 26.7.0b4
- Pre-Release 26.7.0b3
- Pre-Release 26.7.0b2
- Pre-Release 26.7.0b1
- Pre-Release 26.4.0b5
- Pre-Release 26.4.0b4
- Pre-Release 26.4.0b3
- Pre-Release 26.4.0b2
- Pre-Release 26.4.0b1
- Pre-Release 26.1.0b4
- Pre-Release 26.1.0b3
- Pre-Release 26.1.0b2
- Pre-Release 26.1.0b1
Previous versions¶
- Stable Release 26.7.0
- Stable Release 26.4.0
- Patch Release 26.1.2
- Patch Release 26.1.1
- Stable Release 26.1.0
- Patch Release 25.10.3
- Patch Release 25.10.2
- Patch Release 25.10.1
- Stable Release 25.10.0
- Release 2.62.0
- Release 2.61.0
- Patch Release 2.60.1
- Release 2.60.0
- Release 2.59.0
- Release 2.58.0
- Release 2.57.0
- Release 2.56.0
- Release 2.55.0
- Release 2.54.0
- Release 2.53.0
- Release 2.52.0
- Release 2.51.0
- Release 2.50.0
- Release 2.49.0
- Release 2.48.0
- Release 2.47.0
- Release 2.46.0
- Release 2.45.0
- Release 2.44.0
- Release 2.43.0
- Release 2.42.0
- Release 2.41.0
- Release 2.40.0
- Release 2.39.0
- Release 2.38.0
- Release 2.37.0
- Release 2.36.0
- Release 2.35.0
- Release 2.34.0
- Patch Release 2.33.1
- Release 2.33.0
- Release 2.32.0
- Release 2.31.0
- Release 2.30.0
- Release 2.29.0
- Release 2.28.0
- Release 2.27.1
- Release 2.27.0
- Release 2.26.0
- Release 2.25.0
- Release 2.24.0
- Release 2.23.0
- Release 2.22.0
- Release 2.21.0
- Patch Release 2.20.1
- Release 2.20.0
- Release 2.19.0
- Release 2.18.0
- Release 2.17.0
- Release 2.16.0
- Release 2.15.0
- Release 2.14.0
- Release 2.13.0
- Release 2.12.0
- Release 2.11.0
- Release 2.10.0
- Release 2.9.0
- Release 2.8.0
- Release 2.7.0
- Release 2.6.0
- Release 2.5.0
- Release 2.4.0
- Release 2.3.0
- Release 2.2.0
- Release 2.1.0
- Release 2.0.0
- prior to Release 2.0.0