Breaking Changes¶
HEROS¶
14.0¶
The tag _pkg_versions attached to all heros was moved to the new extra_metadata attribute and can now be accessed as self._hero_extra_metadata["pkg_versions"].
HEROSdevices¶
2026.7.0¶
Unified option enumeration for acquisition devices
The vendor-specific methods for enumerating device options have been removed and replaced by a single unified method:
VimbaCompatibleCamera:get_config_features()→ useget_available_options()DcamCompatibleCamera:get_all_properties()→ useget_available_options()PeakCompatibleCamera:get_config_nodes()→ useget_available_options()
The public method get_available_options() is now defined on herosdevices.core.templates.acq_device.AcquisitionDeviceTemplate and returns a dict mapping option names to their properties.
DCAM return type change
DcamCompatibleCamera now returns a dict keyed by property name from get_available_options() instead of a list[tuple]. Each entry contains the property id (hex string) and value:
# before
[("0x10000001: ", "DCAM_IDPROP.TRIGGERSOURCE", 1), ...]
# after
{"DCAM_IDPROP.TRIGGERSOURCE": {"id": "0x10000001", "value": 1}, ...}
Atomiq¶
2026.2.3 (minor)¶
Declaration of _shape_changing_arguments
This version optimized compile time via reducing the number of ephemeral subclasses.
This introduces the necessary component attribute atomiq.components.primitives.Component._shape_changing_arguments which needs to include all
__init__ arguments of a class that change its shape, i.e. change the its methods or attribute types.
An example can be found in atomiq.components.lock.DetunableLock
If you have custom classes that have a similar mechanism, you need to adjust them accordingly. Otherwise this is not breaking.
2026.2.0¶
atomiq.components.lock frequency conventions
This version resolved the frequency setting inconsistencies in atomiq.components.lock.
All methods atomiq.components.lock.Lock.get_frequency(), set_frequency, ramp_frequency now refer to the light frequency exiting the laser (with harmonic factor applied).
The arguments reference_frequency, lock_offset and methods set_detuning(), ramp_detuning() refer now to the laser fundamental (where the lock acts).
Check your components if they reflect this consistent convention!
2026.1.7 (minor)¶
get_multiscanmanager signature change
atomiq.AtomiqExperiment.get_multiscanmanager() now returns a tuple consisting of the scan argument order (a list of the
scanned argument names, from the inner to the outer loop) and the artiq.language.scan.MultiScanManager.
Before (Old Code):
mult_scan = self.get_multiscanmanager()
After (New Code):
scan_argument_order, mult_scan = self.get_multiscanmanager()
If you override or call this method in your experiments (Which you should not!), adapt your code accordingly.
2026.1.0¶
The chunking system has been updated with new atomiq.atomiq.Chunk and atomiq.atomiq.KernelChunk classes that change how scan points are accessed in kernel phases.
Host phases (
prechunk_host,postchunk_host): No changes required. Thepointsparameter is now aatomiq.atomiq.Chunkobject that extendslistand provides direct attribute access.Kernel phases (
prechunk,postchunk): Thepointsparameter is now aatomiq.atomiq.KernelChunkobject. To iterate over individual scan points, you must usepoints.to_list().
Before (Old Code):
@kernel
def prechunk(self, points):
# Access first point's attributes, no guarantee that it is constant in chunk
exposure = points[0].exposure_time
# Iterate over all points
for point in points:
freq = point.frequency
# ... process each point
After (New Code):
@kernel
def prechunk(self, points):
# Access invariant attributes directly
exposure = points.exposure_time
# Iterate over all points using to_list()
for point in points.to_list():
freq = point.frequency
# ... process each point
See Accessing Scan Point Information in the chunking documentation for more details.
0.5.0¶
ARTIQ version changed. The ATOMIQ branches now track the following ARTIQ versions:
old_stable: ARTIQ 8 (was ARTIQ 7)stable: ARTIQ 9 (was ARTIQ 8)latest(orbeta): ARTIQ master branch.
Updating from an older version will most likely require manual intervention. See also the ARTIQ upgrading guides for ARTIQ 9 and ARTIQ 8. We recommend updating to the
stablebranch. ARTIQ updates to the NAC-3 compiler on theirmaster**branch, which will break stuff regularly.