Skip to content

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy

← Module overview

classPalindromePlacementStrategysource

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy

Bases: MoveToPlacementStrategyABC

Wraps any PlacementStrategyABC to emit ExecuteCZReturn for every CZ.

Signature
class PalindromePlacementStrategy(*, inner: PlacementStrategyABC, lookahead: int = 1)

On cz_placements: unwraps ExecuteCZReturn input to the home ConcreteState (via initial_layout), delegates to inner, then wraps the resulting ExecuteCZ in ExecuteCZReturn.

On sq_placements and measure_placements: unwraps ExecuteCZReturn to the home ConcreteState before delegating, so the inner strategy always sees a plain ConcreteState.

This replaces the insert_return_moves flag: choosing this strategy enables palindrome moves; using the bare inner strategy disables them.

Parameters

NameTypeDefaultDescription
innerPlacementStrategyABCrequired
lookaheadint1

Attributes

NameTypeDefaultDescription
inner—inner
lookahead—lookahead

propertyarch_specsource

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy.arch_spec

arch_spec: ArchSpec
source

methodvalidate_initial_layoutsource

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy.validate_initial_layout

Signature
def validate_initial_layout(initial_layout: tuple[LocationAddress, ...]) -> None

Parameters

NameTypeDescription
initial_layouttuple[LocationAddress, ...]
source

methodcz_placementssource

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy.cz_placements

Signature
def cz_placements(state: AtomState, controls: tuple[int, ...], targets: tuple[int, ...], lookahead_cz_layers: tuple[tuple[tuple[int, ...], tuple[int, ...]], ...] = ()) -> AtomState

Parameters

NameTypeDefaultDescription
stateAtomStaterequired
controlstuple[int, ...]required
targetstuple[int, ...]required
lookahead_cz_layerstuple[tuple[tuple[int, ...], tuple[int, ...]], ...]()

Returns

AtomState

source

methodsq_placementssource

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy.sq_placements

Signature
def sq_placements(state: AtomState, qubits: tuple[int, ...]) -> AtomState

Parameters

NameTypeDescription
stateAtomState
qubitstuple[int, ...]

Returns

AtomState

source

methodmeasure_placementssource

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy.measure_placements

Signature
def measure_placements(state: AtomState, qubits: tuple[int, ...]) -> AtomState

Parameters

NameTypeDescription
stateAtomState
qubitstuple[int, ...]

Returns

AtomState

source

methodcompute_movessource

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy.compute_moves

Signature
def compute_moves(state_before: ConcreteState, state_after: ConcreteState) -> tuple[tuple[LaneAddress, ...], ...]

Parameters

NameTypeDescription
state_beforeConcreteState
state_afterConcreteState

Returns

tuple[tuple[LaneAddress, ...], ...]

source

methodmove_to_placementssource

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy.move_to_placements

Signature
def move_to_placements(state: AtomState, qubits: tuple[int, ...], locations: tuple[LocationAddress, ...]) -> AtomState

Parameters

NameTypeDescription
stateAtomState
qubitstuple[int, ...]
locationstuple[LocationAddress, ...]

Returns

AtomState

source

methodpermute_placementssource

bloqade.lanes.analysis.placement.strategy.PalindromePlacementStrategy.permute_placements

Signature
def permute_placements(state: AtomState, qubits: tuple[int, ...], permutation: tuple[int, ...], insert_moves: bool = False) -> AtomState

Parameters

NameTypeDefaultDescription
stateAtomStaterequired
qubitstuple[int, ...]required
permutationtuple[int, ...]required
insert_movesboolFalse

Returns

AtomState

source