Register3D
- class pulser.register.Register3D(qubits, **kwargs)
Bases:
BaseRegister
,RegDrawer
A 3D quantum register containing a set of qubits.
- Parameters:
qubits (Mapping[Any, ArrayLike | pm.TensorLike]) – Dictionary with the qubit names as keys and their position coordinates (in μm) as values (e.g. {‘q0’:(2, -1, 0), ‘q1’:(-5, 10, 0), …}).
Attributes
The dimensionality of the coordinates (2 or 3).
The layout used to define the register.
The qubit IDs of this register.
Dictionary of the qubit names and their position coordinates.
The sorted coordinates.
Methods
Returns the idempotent hash of the coordinates.
Initializes the register with the qubits in a cubic array.
Initializes the register with the qubits in a cuboid array.
Defines a DetuningMap for some qubits of the register.
Draws the entire register.
Computes indices of qubits.
Deserialize a 3D register from an abstract JSON object.
Creates the register from an array of coordinates.
Converts a Register3D into a Register (if possible).
Serializes the register into an abstract JSON object.
Signatures
- coords_hex_hash()
Returns the idempotent hash of the coordinates.
- Returns:
An hexstring encoding the hash.
- Return type:
str
Note
This hash will be returned as an hexstring without the ‘0x’ prefix (unlike what is returned by ‘hex()’).
- classmethod cubic(side, spacing=4.0, prefix=None)
Initializes the register with the qubits in a cubic array.
- Parameters:
side (
int
) – Side of the cube in number of qubits.spacing (
float
|TensorLike
, default:4.0
) – The distance between neighbouring qubits in μm.prefix (
str
|None
, default:None
) – The prefix for the qubit ids. If defined, each qubit id starts with the prefix, followed by an int from 0 to N-1 (e.g. prefix=’q’ -> IDs: ‘q0’, ‘q1’, ‘q2’, …).
- Return type:
- Returns:
A 3D register with qubits placed in a cubic array.
- classmethod cuboid(rows, columns, layers, spacing=4.0, prefix=None)
Initializes the register with the qubits in a cuboid array.
- Parameters:
rows (
int
) – Number of rows.columns (
int
) – Number of columns.layers (
int
) – Number of layers.spacing (
float
|TensorLike
, default:4.0
) – The distance between neighbouring qubits in μm.prefix (
str
|None
, default:None
) – The prefix for the qubit ids. If defined, each qubit id starts with the prefix, followed by an int from 0 to N-1 (e.g. prefix=’q’ -> IDs: ‘q0’, ‘q1’, ‘q2’, …)
- Return type:
- Returns:
A 3D register with qubits placed in a cuboid array.
- define_detuning_map(detuning_weights, slug=None)
Defines a DetuningMap for some qubits of the register.
- Parameters:
detuning_weights (
Mapping
[str
,float
]) – A mapping between the IDs of the targeted qubits and detuning weights (between 0 and 1).slug (
str
|None
, default:None
) – An optional identifier for the detuning map.
- Return type:
- Returns:
A DetuningMap associating detuning weights to the trap coordinates of the targeted qubits.
- draw(with_labels=False, blockade_radius=None, draw_graph=True, draw_half_radius=False, qubit_colors={}, projection=False, fig_name=None, kwargs_savefig={})
Draws the entire register.
- Parameters:
with_labels (
bool
, default:False
) – If True, writes the qubit ID’s next to each qubit.blockade_radius (
float
|None
, default:None
) – The distance (in μm) between atoms below the Rydberg blockade effect occurs.draw_half_radius (
bool
, default:False
) – Whether or not to draw the half the blockade radius surrounding each atoms. If True, requires blockade_radius to be defined.draw_graph (
bool
, default:True
) – Whether or not to draw the interaction between atoms as edges in a graph. Will only draw if the blockade_radius is defined.qubit_colors (
Mapping
[str
,str
], default:{}
) – By default, atoms are drawn with a common default color. If this parameter is present, it replaces the colors for the specified atoms. Non-specified ones are stilled colored with the default value.projection (
bool
, default:False
) – Whether to draw a 2D projection instead of a perspective view.fig_name (
str
|None
, default:None
) – The name on which to save the figure. If None the figure will not be saved.kwargs_savefig (
dict
, default:{}
) – Keywords arguments formatplotlib.pyplot.savefig
. Not applicable if fig_name isNone
.
- Return type:
None
Note
When drawing half the blockade radius, we say there is a blockade effect between atoms whenever their respective circles overlap. This representation is preferred over drawing the full Rydberg radius because it helps in seeing the interactions between atoms.
- find_indices(id_list)
Computes indices of qubits.
This can especially be useful when building a Pulser Sequence with a parameter denoting qubits.
Example
Let
reg
be a register with qubit Ids “a”, “b” and “c”:>>> reg.find_indices(["a", "b", "c", "a"])
It returns
[0, 1, 2, 0]
, following the qubit order of the register.Then, it is possible to use these indices when building a sequence, typically by assigning them to an array of variables that can be provided as an argument to
target_index
andphase_shift_index
.- Parameters:
id_list (
Sequence
[str
]) – IDs of the qubits to find.- Return type:
list
[int
]- Returns:
Indices of the qubits to denote, only valid for the given mapping.
- static from_abstract_repr(obj_str)
Deserialize a 3D register from an abstract JSON object.
- Parameters:
obj_str (str) – the JSON string representing the register encoded in the abstract JSON format.
- Return type:
- classmethod from_coordinates(coords, center=True, prefix=None, labels=None, **kwargs)
Creates the register from an array of coordinates.
- Parameters:
coords (ArrayLike | pm.TensorLike) – The coordinates of each qubit to include in the register.
center (bool, default:
True
) – Whether or not to center the entire array around the origin.prefix (Optional[str], default:
None
) – The prefix for the qubit ids. If defined, each qubit id starts with the prefix, followed by an int from 0 to N-1 (e.g. prefix=’q’ -> IDs: ‘q0’, ‘q1’, ‘q2’, …).labels (Optional[abcSequence[QubitId]], default:
None
) – The list of qubit ids. If defined, each qubit id will be set to the corresponding value.
- Return type:
T
- Returns:
A register with qubits placed on the given coordinates.
- to_2D(tol_width=0.0)
Converts a Register3D into a Register (if possible).
- Parameters:
tol_width (
float
, default:0.0
) – The allowed transverse width of the register to be projected.- Return type:
- Returns:
Returns a 2D register with the coordinates of the atoms in a plane, if they are coplanar.
- Raises:
ValueError – If the atoms are not coplanar.
- to_abstract_repr()
Serializes the register into an abstract JSON object.
- Return type:
str
- property dimensionality: int
The dimensionality of the coordinates (2 or 3).
- property layout: RegisterLayout | None
The layout used to define the register.
- property qubit_ids: tuple[str, ...]
The qubit IDs of this register.
- property qubits: dict[str, AbstractArray]
Dictionary of the qubit names and their position coordinates.
- property sorted_coords: ndarray
The sorted coordinates.