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, ir: IR, qubit_register_size: int) -> Mapping:
        """Return the hardcoded mapping."""
        if qubit_register_size != self._mapping.size():
            msg = f"qubit register size ({qubit_register_size}) and mapping size ({self._mapping.size()}) differ"
            raise ValueError(msg)
        return self._mapping

__init__(mapping, **kwargs)

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(ir, qubit_register_size)

Return the hardcoded mapping.

Source code in opensquirrel/passes/mapper/simple_mappers.py
def map(self, ir: IR, qubit_register_size: int) -> Mapping:
    """Return the hardcoded mapping."""
    if qubit_register_size != self._mapping.size():
        msg = f"qubit register size ({qubit_register_size}) and mapping size ({self._mapping.size()}) differ"
        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, ir: IR, qubit_register_size: int) -> Mapping:
        """Create identity mapping."""
        return Mapping(list(range(qubit_register_size)))

__init__(**kwargs)

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(ir, qubit_register_size)

Create identity mapping.

Source code in opensquirrel/passes/mapper/simple_mappers.py
def map(self, ir: IR, qubit_register_size: int) -> Mapping:
    """Create identity mapping."""
    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, ir: IR, 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__(seed=None, **kwargs)

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(ir, qubit_register_size)

Create a random mapping.

Source code in opensquirrel/passes/mapper/simple_mappers.py
def map(self, ir: IR, 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)