Source code for struqture_py.openfermion_interface

# Copyright © 2019-2023 HQS Quantum Simulations GmbH. All Rights Reserved.

"""Struqture python interface

`HQS Quantum Simulations <https://quantumsimulations.de>`_ package for representing physical operators.

Copyright © 2021-2023 HQS Quantum Simulations GmbH. All Rights Reserved.

.. autosummary::
    :toctree: generated/

    openfermion_to_struqture
    struqture_to_openfermion
"""

from struqture_py import PauliHamiltonian, PauliProduct
from openfermion import QubitOperator


[docs] def struqture_to_openfermion(struqture_hamiltonian: PauliHamiltonian): """Transform a struqture Hamiltonian to an OpenFermion Hamiltonian (QubitOperator). Args: struqture_hamiltonian (PauliHamiltonian): struqture Hamiltonian to be transformed. Returns: QubitOperator: OpenFermion Hamiltonian equivalent to the struqture Hamiltonian. """ openfermion_hamiltonian = QubitOperator() for term in struqture_hamiltonian.keys(): value = struqture_hamiltonian.get(term) openfermion_term_str = "" is_first_spin = True for spin in term.keys(): if not is_first_spin: openfermion_term_str += " " else: is_first_spin = False operator = term.get(spin) openfermion_term_str += f"{operator}{spin}" openfermion_hamiltonian += value.float() * QubitOperator(openfermion_term_str) return openfermion_hamiltonian
[docs] def openfermion_to_struqture(openfermion_hamiltonian: QubitOperator): """Transform an OpenFermion Hamiltonian (QubitOperator) to a struqture Hamiltonian. Args: openfermion_hamiltonian (QubitOperator): OpenFermion Hamiltonian to be transformed. Returns: PauliHamiltonian: Struqture Hamiltonian equivalent to the OpenFermion Hamiltonian. """ struqture_hamiltonian = PauliHamiltonian() for term, coefficient in openfermion_hamiltonian.terms.items(): term_product = PauliProduct() for spin, operator in term: term_product = term_product.set_pauli(spin, operator) struqture_hamiltonian.add_operator_product(term_product, coefficient) return struqture_hamiltonian