Source code for pauliarray.conversion.qiskit
from typing import List
import numpy as np
from numpy.typing import NDArray
from qiskit.quantum_info import PauliList, SparsePauliOp
from qiskit_nature.second_q.operators.fermionic_op import FermionicOp
from pauliarray import Operator, OperatorArrayType1, PauliArray, WeightedPauliArray
[docs]
def pauli_array_to_pauli_list(paulis: PauliArray) -> PauliList:
"""
Converts a PauliArray to a Qiskit's PauliList.
Args:
paulis (PauliArray): A PauliArray object.
Returns:
PauliList: The corresponding PauliList object.
"""
assert paulis.ndim == 1
return PauliList.from_symplectic(z=paulis.z_strings, x=paulis.x_strings)
[docs]
def operator_to_sparse_pauli(
operator: Operator,
) -> SparsePauliOp:
"""
Converts an Operator to a Qiskit's SparsePauliOp.
Args:
operator (Operator): An Operator object.
Returns:
SparsePauliOp: The corresponding SparsePauliOp object.
"""
return SparsePauliOp(pauli_array_to_pauli_list(operator.paulis), coeffs=operator.weights)
[docs]
def pauli_array_from_pauli_list(pauli_list: PauliList) -> PauliArray:
"""
Converts a Qiskit's PauliList to a PauliArray.
Args:
pauli_list (PauliList): A PauliList to convert.
Returns:
PauliArray: The corresponding PauliArray object.
"""
return PauliArray(pauli_list.z, pauli_list.x)
[docs]
def weighted_pauli_array_from_pauli_list(
pauli_list: PauliList,
) -> WeightedPauliArray:
"""
Converts a Qiskit's PauliList to a WeightedPauliArray.
Args:
pauli_list (PauliList): A PauliList to convert.
Returns:
WeightedPauliArray: The corresponding WeightedPauliArray object.
"""
return WeightedPauliArray.from_z_strings_and_x_strings_and_weights(
pauli_list.z,
pauli_list.x,
(-1j) ** pauli_list.phase,
)
[docs]
def operator_from_sparse_pauli(sparse_pauli: SparsePauliOp) -> Operator:
"""
Converts a Qiskit's SparsePauliOp to an Operator.
Args:
sparse_pauli (SparsePauliOp): A SparsePauliOp.
Returns:
Operator: The corresponding Operator object.
"""
return Operator.from_paulis_and_weights(pauli_array_from_pauli_list(sparse_pauli.paulis), sparse_pauli.coeffs)
[docs]
def operator_array_to_sparse_pauli_list(operator_array: OperatorArrayType1) -> list[SparsePauliOp]:
"""
Converts an OperatorArrayType1 to a list of Qiskit's SparsePauliOps.
Args:
operator_array (OperatorArrayType1): An OperatorArray.
Returns:
list[SparsePauliOp]: A list of corresponding SparsePauliOp objects.
"""
return [operator_to_sparse_pauli(Operator(op.wpaulis)) for op in operator_array]
[docs]
def operator_array_from_sparse_pauli_list(sparse_paulis: List[SparsePauliOp]) -> OperatorArrayType1:
"""
Converts a list of Qiskit's SparsePauliOps to an OperatorArrayType1.
Args:
sparse_paulis (List[SparsePauliOp]): A list of SparsePauliOp objects.
Returns:
OperatorArrayType1: An OperatorArray object.
"""
operator_list = [operator_from_sparse_pauli(sparse_pauli) for sparse_pauli in sparse_paulis]
return OperatorArrayType1.from_operator_list(operator_list)