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 apulser.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
Register layouts already calibrated on this device.
channel_ids
Dictionary of available channels on this device.
default_noise_model
Dictionary of available DMM channels on this device.
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
Text summarizing the specifications of the device.
Available electronic transitions for control and measurement.
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
Deserialize a Device from an abstract JSON object.
Checks whether a layout is within the calibrated layouts.
Prints the device specifications.
The maximum Rabi frequency value to enforce a given blockade radius.
Checks whether a register was constructed from a calibrated layout.
Calculates the Rydberg blockade radius for a given Rabi frequency.
Serializes the device into an abstract JSON object.
Converts the Device into a VirtualDevice.
Checks if a register layout is compatible with this device.
Checks if a register properly fills its layout.
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:
- 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:
- 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).