Skip to content
Pasqal Documentation

Device

class pulser.devices.Device(name, dimensions, rydberg_level, min_atom_distance, max_atom_num, max_radial_distance, interaction_coeff_xy=None, supports_slm_mask=False, max_layout_filling=0.5, optimal_layout_filling=None, min_layout_traps=1, max_layout_traps=None, max_sequence_duration=None, max_runs=None, requires_layout=True, channel_ids=None, channel_objects=<factory>, dmm_objects=<factory>, default_noise_model=None, short_description='', pre_calibrated_layouts=<factory>, accepts_new_layouts=True)

Bases: BaseDevice

Specifications of a neutral-atom device.

Each Device instance holds the characteristics of a physical device, which when associated with a pulser.Sequence condition its development.

Note

A Device instance is immutable and must have all of its parameters defined. For more unconstrained usage in emulations, it can be converted to a VirtualDevice through the Device.to_virtual() method.`

Parameters:
  • name (str) – The name of the device.

  • dimensions (Literal[2, 3]) – Whether it supports 2D or 3D arrays.

  • max_atom_num (int) – Maximum number of atoms supported in an array.

  • max_radial_distance (int) – The furthest away an atom can be from the center of the array (in μm).

  • min_atom_distance (float) – The closest together two atoms can be (in μm).

  • requires_layout (bool, default: True) – Whether the register used in the sequence must be created from a register layout. Only enforced in QPU execution.

  • accepts_new_layouts (bool, default: True) – Whether registers built from register layouts that are not already calibrated are accepted. Only enforced in QPU execution.

  • max_layout_filling (float, default: 0.5) – The largest fraction of a layout that can be filled with atoms.

  • optimal_layout_filling (float | None, default: None) – An optional value for the fraction of a layout that should be filled with atoms.

  • min_layout_traps (int, default: 1) – The minimum number of traps a layout can have.

  • max_layout_traps (int | None, default: None) – An optional value for the maximum number of traps a layout can have.

  • pre_calibrated_layouts (tuple[RegisterLayout, ...], default: <factory>) – RegisterLayout instances that are already available on the Device.

  • rydberg_level (int) – The value of the principal quantum number \(n\) when the Rydberg level used is of the form \(|nS_{1/2}, m_j = +1/2\rangle\).

  • interaction_coeff_xy (float | None, default: None) – \(C_3/\hbar\) (in \(rad \cdot \mu s^{-1} \cdot \mu m^3\)), which sets the van der Waals interaction strength between atoms in different Rydberg states. Needed only if there is a Microwave channel in the device. If unsure, 3700.0 is a good default value.

  • channel_objects (tuple[Channel, ...], default: <factory>) – The Channel subclass instances specifying each channel in the device.

  • channel_ids (tuple[str, ...] | None, default: None) – Custom IDs for each channel object. When defined, an ID must be given for each channel. If not defined, the IDs are generated internally based on the channels’ names and addressing.

  • dmm_objects (tuple[DMM, ...], default: <factory>) – The DMM subclass instances specifying each channel in the device. They are referenced by their order in the list, with the ID “dmm_[index in dmm_objects]”.

  • supports_slm_mask (bool, default: False) – Whether the device supports the SLM mask feature.

  • max_sequence_duration (int | None, default: None) – The maximum allowed duration for a sequence (in ns).

  • max_runs (int | None, default: None) – The maximum number of runs allowed on the device. Only used for backend execution.

  • default_noise_model (NoiseModel | None, default: None) – An optional noise model characterizing the default noise of the device. Can be used by emulator backends that support noise.

Attributes

accepts_new_layouts

calibrated_register_layouts

Register layouts already calibrated on this device.

channel_ids

channels

Dictionary of available channels on this device.

default_noise_model

dmm_channels

Dictionary of available DMM channels on this device.

interaction_coeff

The interaction coefficient for the chosen Rydberg level.

interaction_coeff_xy

max_layout_filling

max_layout_traps

max_runs

max_sequence_duration

min_layout_traps

optimal_layout_filling

requires_layout

reusable_channels

short_description

specs

Text summarizing the specifications of the device.

supported_bases

Available electronic transitions for control and measurement.

supported_states

Available states ranked by their energy levels (highest first).

supports_slm_mask

max_atom_num

max_radial_distance

pre_calibrated_layouts

name

dimensions

rydberg_level

min_atom_distance

channel_objects

dmm_objects

Methods

from_abstract_repr

Deserialize a Device from an abstract JSON object.

is_calibrated_layout

Checks whether a layout is within the calibrated layouts.

print_specs

Prints the device specifications.

rabi_from_blockade

The maximum Rabi frequency value to enforce a given blockade radius.

register_is_from_calibrated_layout

Checks whether a register was constructed from a calibrated layout.

rydberg_blockade_radius

Calculates the Rydberg blockade radius for a given Rabi frequency.

to_abstract_repr

Serializes the device into an abstract JSON object.

to_virtual

Converts the Device into a VirtualDevice.

validate_layout

Checks if a register layout is compatible with this device.

validate_layout_filling

Checks if a register properly fills its layout.

validate_register

Checks if 'register' is compatible with this device.

Signatures

static from_abstract_repr(obj_str)

Deserialize a Device from an abstract JSON object.

Warning

Raises an error if the JSON string represents a VirtualDevice. VirtualDevice.from_abstract_repr should be used for this case.

Parameters:

obj_str (str) – the JSON string representing the Device encoded in the abstract JSON format.

Return type:

Device

is_calibrated_layout(register_layout)

Checks whether a layout is within the calibrated layouts.

Parameters:

register_layout (RegisterLayout) – The RegisterLayout to check.

Return type:

bool

Returns:

True if register_layout is found among calibrated_register_layouts, False otherwise.

print_specs()

Prints the device specifications.

Return type:

None

rabi_from_blockade(blockade_radius)

The maximum Rabi frequency value to enforce a given blockade radius.

Parameters:

blockade_radius (float) – The Rydberg blockade radius, in µm.

Return type:

float

Returns:

The maximum rabi frequency value, in rad/µs.

register_is_from_calibrated_layout(register)

Checks whether a register was constructed from a calibrated layout.

If the register is a BaseRegister, checks that it has a layout. If so, or if it is a MappableRegister, check that its layout is within the calibrated layouts.

Parameters:

register_layout – the Register or MappableRegister to check.

Return type:

bool

Returns:

True if register has a layout and it is found among calibrated_register_layouts, False otherwise.

rydberg_blockade_radius(rabi_frequency)

Calculates the Rydberg blockade radius for a given Rabi frequency.

Parameters:

rabi_frequency (float) – The Rabi frequency, in rad/µs.

Return type:

float

Returns:

The rydberg blockade radius, in μm.

to_abstract_repr()

Serializes the device into an abstract JSON object.

Return type:

str

to_virtual()

Converts the Device into a VirtualDevice.

Return type:

VirtualDevice

validate_layout(layout)

Checks if a register layout is compatible with this device.

Parameters:

layout (RegisterLayout) – The RegisterLayout to validate.

Return type:

None

validate_layout_filling(register)

Checks if a register properly fills its layout.

Parameters:

register (BaseRegister | MappableRegister) – The register to validate. Must be created from a register layout.

Return type:

None

validate_register(register)

Checks if ‘register’ is compatible with this device.

Parameters:

register (BaseRegister) – The Register to validate.

Return type:

None

property calibrated_register_layouts: dict[str, RegisterLayout]

Register layouts already calibrated on this device.

property channels: dict[str, Channel]

Dictionary of available channels on this device.

property dmm_channels: dict[str, DMM]

Dictionary of available DMM channels on this device.

property interaction_coeff: float

The interaction coefficient for the chosen Rydberg level.

Corresponds to \(C_6/\hbar\) (in units of \(rad \cdot \mu s^{-1} \cdot \mu m^6\)) for the interaction term of the Ising hamiltonian.

property specs: str

Text summarizing the specifications of the device.

property supported_bases: set[str]

Available electronic transitions for control and measurement.

property supported_states: list[Literal['u', 'd', 'r', 'g', 'h', 'x']]

Available states ranked by their energy levels (highest first).