bloqade.lanes.analysis.placement.lattice.Permuted
classPermuted¶source
bloqade.lanes.analysis.placement.lattice.Permuted
Bases: ConcreteState
State produced by a ``place.Permute`` with ``insert_moves=True`` — an active qubit permutation that commits the physical moves.
Signature
class Permuted(occupied: frozenset[LocationAddress], layout: tuple[LocationAddress, ...], move_count: tuple[int, ...], *, move_layers: tuple[tuple[LaneAddress, ...], ...] = ())The physical permutation is committed: move_layers are emitted at the
permute site (get_move_layers) but are not palindrome-returned. The
permutation cycles atoms among the same set of slots, so each qubit id is
pinned back to its pre-permute slot — layout is therefore unchanged, and
the permutation surfaces as a relabel: the atom now sitting at qid i’s
slot is a different one, so downstream ops on qid i act on the permuted
quantum information.
Deliberately not a UserMoved: it is committed, so it must not be the
type PalindromePlacementStrategy acts on (palindrome-return at the next
CZ, reject at a measure). As a plain committed ConcreteState subclass it
flows through subsequent SQ / CZ / measure normally, and _strip_user_moved
collapses it to a bare ConcreteState once its forward moves have been
emitted at the permute site. (insert_moves=True is only produced under a
non-palindrome strategy; the default relabel-only permute is a bare
ConcreteState with the permuted layout and no move layers.)
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
occupied | frozenset[LocationAddress] | required | |
layout | tuple[LocationAddress, ...] | required | |
move_count | tuple[int, ...] | required | |
move_layers | tuple[tuple[LaneAddress, ...], ...] | () |
Attributes
| Name | Type | Default | Description |
|---|---|---|---|
move_layers | tuple[tuple[LaneAddress, ...], ...] | field(kw_only=True, default=()) | Forward AOD layers realizing the physical permutation; emitted once at the permute site and not returned. |
methodget_move_layers¶source
bloqade.lanes.analysis.placement.lattice.Permuted.get_move_layers
def get_move_layers() -> tuple[tuple[LaneAddress, ...], ...]Returns
tuple[tuple[LaneAddress, ...], ...]
methodis_subseteq¶source
bloqade.lanes.analysis.placement.lattice.Permuted.is_subseteq
def is_subseteq(other: AtomState) -> boolParameters
| Name | Type | Description |
|---|---|---|
other | AtomState |
Returns
bool