Source code for bqskit.passes.mapping.apply

"""This module implements the ApplyPlacement class."""
from __future__ import annotations

import logging

from bqskit.compiler.basepass import BasePass
from bqskit.compiler.passdata import PassData
from bqskit.ir.circuit import Circuit

_logger = logging.getLogger(__name__)


[docs] class ApplyPlacement(BasePass): """Place the circuit on the machine model."""
[docs] async def run(self, circuit: Circuit, data: PassData) -> None: """Perform the pass's operation, see :class:`BasePass` for more.""" model = data.model placement = data.placement # Place circuit on the model according to the placement physical_circuit = Circuit(model.num_qudits, model.radixes) physical_circuit.append_circuit(circuit, placement) circuit.become(physical_circuit) # Update the relevant data variables data.initial_mapping = [placement[p] for p in data.initial_mapping] data.final_mapping = [placement[p] for p in data.final_mapping] data.placement = list(i for i in range(model.num_qudits))