qdk_chemistry.plugins.openfermion.conversion module

Conversion utilities for QDK Chemistry to OpenFermion interoperability.

This module provides functions to convert between QDK/Chemistry data structures and OpenFermion operator representations:

  • Hamiltonian to InteractionOperator / FermionOperator

  • QubitOperator to/from QubitHamiltonian

qdk_chemistry.plugins.openfermion.conversion.hamiltonian_to_fermion_operator(hamiltonian)[source]

Convert a QDK/Chemistry Hamiltonian to an OpenFermion FermionOperator.

This is a convenience function that first creates an InteractionOperator and then converts it to a FermionOperator using openfermion.transforms.get_fermion_operator.

Return type:

FermionOperator

Parameters:

hamiltonian (Hamiltonian) – The QDK/Chemistry Hamiltonian to convert.

Returns:

The electronic Hamiltonian as a FermionOperator.

Return type:

openfermion.FermionOperator

Examples

>>> from qdk_chemistry.plugins.openfermion.conversion import hamiltonian_to_fermion_operator
>>> fop = hamiltonian_to_fermion_operator(hamiltonian)
>>> print(f"Number of terms: {len(fop.terms)}")
qdk_chemistry.plugins.openfermion.conversion.hamiltonian_to_interaction_operator(hamiltonian)[source]

Convert a QDK/Chemistry Hamiltonian to an OpenFermion InteractionOperator.

Handles both restricted (RHF) and unrestricted (UHF) Hamiltonians. For restricted Hamiltonians, uses openfermion.chem.molecular_data.spinorb_from_spatial for efficient conversion. For unrestricted Hamiltonians, explicitly constructs spin-orbital integrals from all spin channels.

The resulting operator uses OpenFermion’s interleaved spin-orbital ordering: spin-orbital 2p = spatial orbital p alpha, 2p+1 = spatial orbital p beta.

Return type:

InteractionOperator

Parameters:

hamiltonian (Hamiltonian) – The QDK/Chemistry Hamiltonian to convert.

Returns:

The electronic Hamiltonian as an InteractionOperator.

Return type:

openfermion.InteractionOperator

Examples

>>> from qdk_chemistry.plugins.openfermion.conversion import hamiltonian_to_interaction_operator
>>> iop = hamiltonian_to_interaction_operator(hamiltonian)
>>> print(f"Number of spin-orbitals: {iop.n_qubits}")
qdk_chemistry.plugins.openfermion.conversion.qubit_hamiltonian_to_qubit_operator(qubit_hamiltonian)[source]

Convert a QDK/Chemistry QubitHamiltonian to an OpenFermion QubitOperator.

Translates the dense Pauli string format (e.g., "XZII") to OpenFermion’s sparse tuple format (e.g., ((0, 'X'), (1, 'Z'))).

Return type:

QubitOperator

Parameters:

qubit_hamiltonian (QubitHamiltonian) – The QDK/Chemistry QubitHamiltonian to convert.

Returns:

The equivalent OpenFermion QubitOperator.

Return type:

openfermion.QubitOperator

Examples

>>> qop = qubit_hamiltonian_to_qubit_operator(qubit_hamiltonian)
>>> print(qop)
qdk_chemistry.plugins.openfermion.conversion.qubit_operator_to_qubit_hamiltonian(qubit_op, encoding=None, fermion_mode_order=None)[source]

Convert an OpenFermion QubitOperator to a QDK/Chemistry QubitHamiltonian.

Translates OpenFermion’s Pauli term format (e.g., ((0, 'X'), (1, 'Z'))) to the dense Pauli string format used by QDK/Chemistry (e.g., "XZI...").

Return type:

QubitHamiltonian

Parameters:
  • qubit_op (openfermion.QubitOperator) – The OpenFermion QubitOperator to convert.

  • encoding (str | None) – Optional encoding label (e.g., "jordan-wigner") to attach to the resulting QubitHamiltonian.

  • fermion_mode_order (FermionModeOrder | str | None) – Fermion mode ordering ("blocked" or "interleaved") for the QubitHamiltonian.

Returns:

A QDK/Chemistry QubitHamiltonian.

Return type:

QubitHamiltonian

Raises:

ValueError – If the QubitOperator has no terms.

Examples

>>> import openfermion as of
>>> qop = of.QubitOperator("X0 Z1", 0.5) + of.QubitOperator("Y0 Y1", 0.3)
>>> qh = qubit_operator_to_qubit_hamiltonian(qop, encoding="jordan-wigner")