Skip to content

simple_mappers

This module contains the following simple mappers:

  • IdentityMapper
  • HardcodedMapper
  • RandomMapper

HardcodedMapper

Bases: Mapper

Source code in opensquirrel/passes/mapper/simple_mappers.py
class HardcodedMapper(Mapper):
    def __init__(self, mapping: Mapping, **kwargs: Any) -> None:
        """
        A ``HardcodedMapper`` maps each virtual qubit to a hardcoded physical qubit

        Args:
            mapping: The mapping from virtual to physical qubits
        """
        super().__init__(**kwargs)
        self._mapping = mapping

    def map(
        self,
        circuit: Circuit,
        qubit_register_size: int,
    ) -> Mapping:
        """Return the hardcoded mapping."""
        if qubit_register_size != self._mapping.size():
            msg = (
                f"the size of the mapping {self._mapping.size()!r} is not equal to the number of qubits"
                f" {qubit_register_size!r}"
            )
            raise ValueError(msg)
        return self._mapping

__init__

__init__(mapping: Mapping, **kwargs: Any) -> None

A HardcodedMapper maps each virtual qubit to a hardcoded physical qubit

Parameters:

Name Type Description Default
mapping Mapping

The mapping from virtual to physical qubits

required
Source code in opensquirrel/passes/mapper/simple_mappers.py
def __init__(self, mapping: Mapping, **kwargs: Any) -> None:
    """
    A ``HardcodedMapper`` maps each virtual qubit to a hardcoded physical qubit

    Args:
        mapping: The mapping from virtual to physical qubits
    """
    super().__init__(**kwargs)
    self._mapping = mapping

map

map(circuit: Circuit, qubit_register_size: int) -> Mapping

Return the hardcoded mapping.

Source code in opensquirrel/passes/mapper/simple_mappers.py
def map(
    self,
    circuit: Circuit,
    qubit_register_size: int,
) -> Mapping:
    """Return the hardcoded mapping."""
    if qubit_register_size != self._mapping.size():
        msg = (
            f"the size of the mapping {self._mapping.size()!r} is not equal to the number of qubits"
            f" {qubit_register_size!r}"
        )
        raise ValueError(msg)
    return self._mapping

IdentityMapper

Bases: Mapper

Source code in opensquirrel/passes/mapper/simple_mappers.py
class IdentityMapper(Mapper):
    def __init__(self, **kwargs: Any) -> None:
        """An ``IdentityMapper`` maps each virtual qubit to exactly the same physical qubit."""
        super().__init__(**kwargs)

    def map(
        self,
        circuit: Circuit,
        qubit_register_size: int,
    ) -> Mapping:
        """Map the circuit according to a identity mapping.

        Args:
            ir (IR): The intermediate representation of the quantum circuit to be mapped.
            qubit_register_size (int): The size of the (virtual) qubit register.

        Returns:
            Mapping from virtual to physical qubits.

        """
        return Mapping(list(range(qubit_register_size)))

__init__

__init__(**kwargs: Any) -> None

An IdentityMapper maps each virtual qubit to exactly the same physical qubit.

Source code in opensquirrel/passes/mapper/simple_mappers.py
def __init__(self, **kwargs: Any) -> None:
    """An ``IdentityMapper`` maps each virtual qubit to exactly the same physical qubit."""
    super().__init__(**kwargs)

map

map(circuit: Circuit, qubit_register_size: int) -> Mapping

Map the circuit according to a identity mapping.

Parameters:

Name Type Description Default
ir IR

The intermediate representation of the quantum circuit to be mapped.

required
qubit_register_size int

The size of the (virtual) qubit register.

required

Returns:

Type Description
Mapping

Mapping from virtual to physical qubits.

Source code in opensquirrel/passes/mapper/simple_mappers.py
def map(
    self,
    circuit: Circuit,
    qubit_register_size: int,
) -> Mapping:
    """Map the circuit according to a identity mapping.

    Args:
        ir (IR): The intermediate representation of the quantum circuit to be mapped.
        qubit_register_size (int): The size of the (virtual) qubit register.

    Returns:
        Mapping from virtual to physical qubits.

    """
    return Mapping(list(range(qubit_register_size)))

RandomMapper

Bases: Mapper

Source code in opensquirrel/passes/mapper/simple_mappers.py
class RandomMapper(Mapper):
    def __init__(self, seed: int | None = None, **kwargs: Any) -> None:
        """
        A ``RandomMapper`` maps each virtual qubit to a random physical qubit.

        Args:
            seed: Random seed for reproducible results
        """
        super().__init__(**kwargs)
        self.seed = seed

    def map(
        self,
        circuit: Circuit,
        qubit_register_size: int,
    ) -> Mapping:
        """Create a random mapping."""
        if self.seed:
            random.seed(self.seed)

        physical_qubit_register = list(range(qubit_register_size))
        random.shuffle(physical_qubit_register)
        return Mapping(physical_qubit_register)

__init__

__init__(seed: int | None = None, **kwargs: Any) -> None

A RandomMapper maps each virtual qubit to a random physical qubit.

Parameters:

Name Type Description Default
seed int | None

Random seed for reproducible results

None
Source code in opensquirrel/passes/mapper/simple_mappers.py
def __init__(self, seed: int | None = None, **kwargs: Any) -> None:
    """
    A ``RandomMapper`` maps each virtual qubit to a random physical qubit.

    Args:
        seed: Random seed for reproducible results
    """
    super().__init__(**kwargs)
    self.seed = seed

map

map(circuit: Circuit, qubit_register_size: int) -> Mapping

Create a random mapping.

Source code in opensquirrel/passes/mapper/simple_mappers.py
def map(
    self,
    circuit: Circuit,
    qubit_register_size: int,
) -> Mapping:
    """Create a random mapping."""
    if self.seed:
        random.seed(self.seed)

    physical_qubit_register = list(range(qubit_register_size))
    random.shuffle(physical_qubit_register)
    return Mapping(physical_qubit_register)