Skip to content

Commit c8744d6

Browse files
authored
Merge pull request #105 from jpmorganchase/fix_labs_circuit_gen
address #104
2 parents 3dd599c + 49b3e63 commit c8744d6

4 files changed

Lines changed: 11 additions & 19 deletions

File tree

qokit/qaoa_circuit_labs.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,17 @@
55
# QAOA circuit for some Z objective
66
from collections.abc import Sequence
77
from qiskit import QuantumCircuit
8+
from qokit.labs import get_energy_term_indices
89
from .qaoa_circuit import get_qaoa_circuit_from_terms, get_parameterized_qaoa_circuit_from_terms
910

1011

11-
def get_qaoa_circuit(N: int, terms: Sequence, gammas: Sequence, betas: Sequence, save_statevector: bool = True) -> QuantumCircuit:
12+
def get_qaoa_circuit(N: int, gammas: Sequence, betas: Sequence, save_statevector: bool = True) -> QuantumCircuit:
1213
"""Generates a circuit for Hamiltonian of the form \sum_{term \in terms} \prod_{j \in term} Z_j
1314
1415
Parameters
1516
----------
1617
N : int
1718
Number of qubits
18-
terms : list of tuples
19-
Each tuple corresponds to a term \prod_{j \in term} Z_j and contains indices
20-
Example: for H = Z_0*Z_1 + Z_2*Z_3 + Z_0*Z_2*Z_4, terms = [(0,1), (2,3), (0,2,4)]
21-
All indices must be less than N
2219
beta : list-like
2320
QAOA parameter beta
2421
gamma : list-like
@@ -30,10 +27,11 @@ def get_qaoa_circuit(N: int, terms: Sequence, gammas: Sequence, betas: Sequence,
3027
qc : qiskit.QuantumCircuit
3128
Quantum circuit implementing QAOA
3229
"""
30+
terms, _ = get_energy_term_indices(N)
3331
return get_qaoa_circuit_from_terms(N=N, terms=terms, gammas=gammas, betas=betas, save_statevector=save_statevector)
3432

3533

36-
def get_parameterized_qaoa_circuit(N: int, terms: Sequence, p: int, save_statevector: bool = True, return_parameter_vectors: bool = False) -> QuantumCircuit:
34+
def get_parameterized_qaoa_circuit(N: int, p: int, save_statevector: bool = True, return_parameter_vectors: bool = False) -> QuantumCircuit:
3735
"""Generates a parameterized circuit for Hamiltonian of the form \sum_{term \in terms} \prod_{j \in term} Z_j
3836
This version is recommended for long circuits
3937
@@ -69,6 +67,7 @@ def f(theta):
6967
(beta first, then gamma). To bind:
7068
qc.bind_parameters(np.hstack([angles['beta'], angles['gamma']]))
7169
"""
70+
terms, _ = get_energy_term_indices(N)
7271
return get_parameterized_qaoa_circuit_from_terms(
7372
N=N,
7473
terms=terms,

qokit/qaoa_objective_labs.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,7 @@ def get_qaoa_labs_objective(
190190

191191
if simulator == "qiskit":
192192
assert p is not None, "p must be passed if simulator == 'qiskit'"
193-
terms, _ = get_energy_term_indices(N)
194-
parameterized_circuit = get_parameterized_qaoa_circuit(N, terms, p)
193+
parameterized_circuit = get_parameterized_qaoa_circuit(N, p)
195194
precomputed_diagonal_hamiltonian = None
196195
else:
197196
parameterized_circuit = None

tests/test_fast_simulators_labs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from qokit.fur import QAOAFURXSimulatorC, QAOAFURXSimulator, QAOAFURXSimulatorGPU, QAOAFastSimulatorBase
1616
from qokit.labs import energy_vals_from_bitstring_general, get_energy_term_indices, get_terms_offset
1717
from qokit.utils import precompute_energies
18-
from qokit.qaoa_circuit_labs import get_qaoa_circuit
18+
from qokit.qaoa_circuit import get_qaoa_circuit_from_terms as get_qaoa_circuit
1919

2020
SIMULATORS = get_available_simulators("x")
2121
print(SIMULATORS)

tests/test_qaoa_qiskit.py

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@
1111
get_parameterized_qaoa_circuit,
1212
get_qaoa_circuit,
1313
)
14-
from qokit.labs import (
15-
get_energy_term_indices,
16-
negative_merit_factor_from_bitstring,
17-
)
14+
from qokit.labs import negative_merit_factor_from_bitstring
1815
from qokit.utils import (
1916
precompute_energies,
2017
obj_from_statevector,
@@ -36,9 +33,7 @@ def test_qaoa_parameterization():
3633
)
3734
row = df[(df["N"] == N) & (df["p"] == p)].squeeze()
3835

39-
terms_ix, offset = get_energy_term_indices(N)
40-
41-
qc = get_qaoa_circuit(N, terms_ix, row["gamma"], row["beta"])
36+
qc = get_qaoa_circuit(N, row["gamma"], row["beta"])
4237
backend = AerSimulator(method="statevector")
4338
sv = np.asarray(backend.run(qc).result().get_statevector())
4439

@@ -68,18 +63,17 @@ def test_parameterized_circuit():
6863
N = 10
6964
p = 50
7065
ramp = get_ramp(0.1663, p)
71-
terms, offset = get_energy_term_indices(N)
7266

7367
backend = AerSimulator(method="statevector")
7468

75-
qc_param = get_parameterized_qaoa_circuit(N, terms, p)
69+
qc_param = get_parameterized_qaoa_circuit(N, p)
7670
qc1 = qc_param.assign_parameters(np.hstack([ramp["beta"], ramp["gamma"]]))
7771
f1 = obj_from_statevector(
7872
np.asarray(backend.run(qc1).result().get_statevector()),
7973
negative_merit_factor_from_bitstring,
8074
)
8175

82-
qc2 = get_qaoa_circuit(N, terms, ramp["gamma"], ramp["beta"])
76+
qc2 = get_qaoa_circuit(N, ramp["gamma"], ramp["beta"])
8377
f2 = obj_from_statevector(
8478
np.asarray(backend.run(qc2).result().get_statevector()),
8579
negative_merit_factor_from_bitstring,

0 commit comments

Comments
 (0)