Skip to content

Commit

Permalink
Lookup dictionary for JW transformation of a FermionOperator.
Browse files Browse the repository at this point in the history
  • Loading branch information
alexfleury committed Jun 5, 2022
1 parent 70b4c65 commit faf221e
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions src/openfermion/transforms/opconversions/jordan_wigner.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,22 +57,27 @@ def jordan_wigner(operator):

def _jordan_wigner_fermion_operator(operator):
transformed_operator = QubitOperator()
# Purpose is storing ladder terms already transformed.
lookup_ladder_terms = dict()
for term in operator.terms:
# Initialize identity matrix.
transformed_term = QubitOperator((), operator.terms[term])
# Loop through operators, transform and multiply.
for ladder_operator in term:
z_factors = tuple(
(index, 'Z') for index in range(ladder_operator[0]))
pauli_x_component = QubitOperator(
z_factors + ((ladder_operator[0], 'X'),), 0.5)
if ladder_operator[1]:
pauli_y_component = QubitOperator(
z_factors + ((ladder_operator[0], 'Y'),), -0.5j)
else:
pauli_y_component = QubitOperator(
z_factors + ((ladder_operator[0], 'Y'),), 0.5j)
transformed_term *= pauli_x_component + pauli_y_component
if ladder_operator not in lookup_ladder_terms:
z_factors = tuple(
(index, 'Z') for index in range(ladder_operator[0]))
pauli_x_component = QubitOperator(
z_factors + ((ladder_operator[0], 'X'),), 0.5)
if ladder_operator[1]:
pauli_y_component = QubitOperator(
z_factors + ((ladder_operator[0], 'Y'),), -0.5j)
else:
pauli_y_component = QubitOperator(
z_factors + ((ladder_operator[0], 'Y'),), 0.5j)
lookup_ladder_terms[ladder_operator] = (pauli_x_component +
pauli_y_component)
transformed_term *= lookup_ladder_terms[ladder_operator]
transformed_operator += transformed_term
return transformed_operator

Expand Down

0 comments on commit faf221e

Please sign in to comment.