Breaking Changes

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. The points parameter is now a atomiq.atomiq.Chunk object that extends list and provides direct attribute access.

  • Kernel phases (prechunk, postchunk): The points parameter is now a atomiq.atomiq.KernelChunk object. To iterate over individual scan points, you must use points.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 (or beta): 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 stable branch. ARTIQ updates to the NAC-3 compiler on their master **branch, which will break stuff regularly.