Source code for qiskit_nature.second_q.mappers.direct_mapper

# This code is part of a Qiskit project.
#
# (C) Copyright IBM 2021, 2023.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""The Direct Mapper."""

from __future__ import annotations

from functools import lru_cache

import numpy as np

from qiskit.quantum_info.operators import Pauli

from .vibrational_mapper import VibrationalMapper


[docs]class DirectMapper(VibrationalMapper): """The Direct mapper. This mapper maps a :class:`~.VibrationalOp` to a qubit operator. In doing so, each modal of the ``VibrationalOp`` gets mapped to a single qubit. """
[docs] @classmethod @lru_cache(maxsize=32) def pauli_table(cls, register_length: int) -> list[tuple[Pauli, Pauli]]: # pylint: disable=unused-argument pauli_table = [] for i in range(register_length): a_z = np.asarray([0] * i + [0] + [0] * (register_length - i - 1), dtype=bool) a_x = np.asarray([0] * i + [1] + [0] * (register_length - i - 1), dtype=bool) b_z = np.asarray([0] * i + [1] + [0] * (register_length - i - 1), dtype=bool) b_x = np.asarray([0] * i + [1] + [0] * (register_length - i - 1), dtype=bool) pauli_table.append((Pauli((a_z, a_x)), Pauli((b_z, b_x)))) return pauli_table