Skip to content

Commit

Permalink
fix type checking list -> List
Browse files Browse the repository at this point in the history
  • Loading branch information
Sahmoud committed Jul 14, 2023
1 parent c7d1438 commit d1713a3
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 15 deletions.
9 changes: 6 additions & 3 deletions mitiq/qse/qse.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def execute_with_qse(
Returns:
The expectation value estimated with QSE.
"""
P = get_projector(
projector = get_projector(
circuit,
executor,
check_operators,
Expand All @@ -54,12 +54,15 @@ def execute_with_qse(
pop = get_expectation_value_for_observable(
circuit,
executor,
P * observable * P,
projector * observable * projector,
pauli_string_to_expectation_cache,
)
# Compute the normalization factor: <P P>
pp = get_expectation_value_for_observable(
circuit, executor, P * P, pauli_string_to_expectation_cache
circuit,
executor,
projector * projector,
pauli_string_to_expectation_cache,
)
return pop / pp

Expand Down
6 changes: 3 additions & 3 deletions mitiq/qse/qse_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

"""Functions for computing the projector for subspace expansion."""

from typing import Callable, Sequence, Union, Dict
from typing import Callable, Sequence, Union, Dict, List
from mitiq import Observable, QPROGRAM, QuantumResult, PauliString
import numpy as np
import numpy.typing as npt
Expand Down Expand Up @@ -91,7 +91,7 @@ def _compute_overlap_matrix(
check_operators: Sequence[PauliString],
pauli_string_to_expectation_cache: Dict[PauliString, complex] = {},
) -> npt.NDArray[np.float64]:
S: list[list[float]] = []
S: List[List[float]] = []
# S_ij = <Ψ|Mi† Mj|Ψ>
for i in range(len(check_operators)):
S.append([])
Expand All @@ -113,7 +113,7 @@ def _compute_hamiltonian_overlap_matrix(
code_hamiltonian: Observable,
pauli_string_to_expectation_cache: Dict[PauliString, complex] = {},
) -> npt.NDArray[np.float64]:
H: list[list[float]] = []
H: List[List[float]] = []
# H_ij = <Ψ|Mi† H Mj|Ψ>
for i in range(len(check_operators)):
H.append([])
Expand Down
36 changes: 27 additions & 9 deletions mitiq/qse/tests/test_qse.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,24 +67,30 @@ def test_execute_with_qse():
code_hamiltonian,
) = get_5_1_3_code_check_operators_and_code_hamiltonian()
observable = get_observable_in_code_space(PauliString("ZZZZZ"))
unmitigated_value = observable.expectation(
qc, execute_with_depolarized_noise
)
mitigated_value = execute_with_qse(
qc,
execute_with_depolarized_noise,
check_operators,
code_hamiltonian,
observable,
)
assert abs(mitigated_value.real - 1) < 0.001
assert abs(mitigated_value.real - 1) < abs(unmitigated_value.real - 1)

observable = get_observable_in_code_space(PauliString("XXXXX"))
unmitigated_value = observable.expectation(
qc, execute_with_depolarized_noise
)
mitigated_value = execute_with_qse(
qc,
execute_with_depolarized_noise,
check_operators,
code_hamiltonian,
observable,
)
assert abs(mitigated_value.real - 0.5) < 0.001
assert abs(mitigated_value.real - 0.5) < abs(unmitigated_value.real - 0.5)


def test_mitigate_executor():
Expand All @@ -107,13 +113,16 @@ def test_mitigate_executor():
code_hamiltonian,
observable,
)
unmitigated_value = observable.expectation(
qc, execute_with_depolarized_noise
)
mitigated_value = mitigated_executor(qc)
assert abs(mitigated_value.real - 1) < 0.001
assert abs(mitigated_value.real - 1) < abs(unmitigated_value.real - 1)

batched_mitigated_values = batched_mitigated_executor([qc] * 3)
assert all(
[
abs(mitigated_value.real - 1) < 0.001
abs(mitigated_value.real - 1) < abs(unmitigated_value.real - 1)
for mitigated_value in batched_mitigated_values
]
)
Expand All @@ -131,13 +140,16 @@ def test_mitigate_executor():
code_hamiltonian,
observable,
)
unmitigated_value = observable.expectation(
qc, execute_with_depolarized_noise
)
mitigated_value = mitigated_executor(qc)
assert abs(mitigated_value.real - 0.5) < 0.001
assert abs(mitigated_value.real - 0.5) < abs(unmitigated_value.real - 0.5)

batched_mitigated_values = batched_mitigated_executor([qc] * 3)
assert all(
[
abs(mitigated_value.real - 0.5) < 0.001
abs(mitigated_value.real - 0.5) < abs(unmitigated_value.real - 0.5)
for mitigated_value in batched_mitigated_values
]
)
Expand All @@ -163,8 +175,11 @@ def decorated_executor(circuit: QPROGRAM) -> np.ndarray:
noise_level=(0.01,),
)

unmitigated_value = observable.expectation(
qc, execute_with_depolarized_noise
)
mitigated_value = decorated_executor(qc)
assert abs(mitigated_value.real - 1) < 0.001
assert abs(mitigated_value.real - 1) < abs(unmitigated_value.real - 1)

observable = get_observable_in_code_space(PauliString("XXXXX"))

Expand All @@ -180,8 +195,11 @@ def decorated_executor(circuit: QPROGRAM) -> np.ndarray:
noise_level=(0.01,),
)

unmitigated_value = observable.expectation(
qc, execute_with_depolarized_noise
)
mitigated_value = decorated_executor(qc)
assert abs(mitigated_value.real - 0.5) < 0.001
assert abs(mitigated_value.real - 0.5) < abs(unmitigated_value.real - 0.5)


def test_get_projector():
Expand Down Expand Up @@ -249,7 +267,7 @@ def test_compute_hamiltonian_overlap_matrix():
assert H[0][0].real > -16


def get_observable_in_code_space(observable: list[cirq.PauliString]):
def get_observable_in_code_space(observable: List[cirq.PauliString]):
FIVE_I = PauliString("IIIII")
projector_onto_code_space = [
PauliString("XZZXI"),
Expand Down

0 comments on commit d1713a3

Please sign in to comment.