Skip to content

Commit

Permalink
write data out to json
Browse files Browse the repository at this point in the history
  • Loading branch information
natestemen committed Nov 27, 2024
1 parent 7f616ed commit 2ec9ebc
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 15 deletions.
28 changes: 28 additions & 0 deletions benchmarks/results/expval-results_2024-11-26_16-25-54.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"ideal": -2.5211155006528843e-17,
"uncompiled": {
"expval": 9.324138683375338e-18,
"abs_error": 3.453529368990418e-17,
"relative_error": 1.3698417895158195
},
"ucc": {
"expval": 8.673617379884035e-18,
"abs_error": 3.388477238641288e-17,
"relative_error": 1.344038873968204
},
"cirq": {
"expval": 1.1441585526239528e-15,
"abs_error": 1.1693697076304817e-15,
"relative_error": 46.38302796233073
},
"qiskit": {
"expval": 6.505213034913027e-19,
"abs_error": 2.5861676310020146e-17,
"relative_error": 1.0258029155476154
},
"pytket": {
"expval": 4.336808689942018e-18,
"abs_error": 2.954796369647086e-17,
"relative_error": 1.1720194369841022
}
}
64 changes: 49 additions & 15 deletions benchmarks/scripts/expval_benchmark.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,25 @@
import json
import os.path
from datetime import datetime

import cirq
import pytket
from cirq.contrib.qasm_import import circuit_from_qasm
from qiskit.quantum_info import Operator, Statevector
from qiskit import qasm2
from qiskit.quantum_info import Operator, Statevector
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel, depolarizing_error
import numpy as np

from common import cirq_compile, pytket_compile, qiskit_compile
from ucc import compile as ucc_compile

from common import cirq_compile, qiskit_compile, pytket_compile


with open("../circuits/qasm2/ucc/prep_select_N10_ghz.qasm") as f:
qasm_string = f.read()

qiskit_circuit = qasm2.loads(qasm_string)
qiskit_circuit.save_density_matrix()

ucc_compiled = ucc_compile(qasm_string, return_format="qiskit")
ucc_compiled.save_density_matrix()

Expand All @@ -38,28 +44,56 @@

simulator = AerSimulator(method="density_matrix", noise_model=depolarizing_noise)


uncompiled_dm = simulator.run(qiskit_circuit).result().data()["density_matrix"]
ucc_dm = simulator.run(ucc_compiled).result().data()["density_matrix"]
cirq_dm = simulator.run(cirq_compiled).result().data()["density_matrix"]
qiskit_dm = simulator.run(qiskit_compiled).result().data()["density_matrix"]
pytket_dm = simulator.run((pytket_compiled)).result().data()["density_matrix"]

observable = Operator.from_label("ZZZZZZZZZZ")

ucc_expval = ucc_dm.expectation_value(observable)
cirq_expval = cirq_dm.expectation_value(observable)
qiskit_expval = qiskit_dm.expectation_value(observable)
pytket_expval = pytket_dm.expectation_value(observable)
uncompiled_expval = np.real_if_close(uncompiled_dm.expectation_value(observable)).item()
ucc_expval = np.real_if_close(ucc_dm.expectation_value(observable)).item()
cirq_expval = np.real_if_close(cirq_dm.expectation_value(observable)).item()
qiskit_expval = np.real_if_close(qiskit_dm.expectation_value(observable)).item()
pytket_expval = np.real_if_close(pytket_dm.expectation_value(observable)).item()

ideal_circuit = qasm2.loads(qasm_string)
ideal_state = Statevector.from_instruction(ideal_circuit)
ideal_expval = ideal_state.expectation_value(observable)
ideal_expval = np.real_if_close(ideal_state.expectation_value(observable)).item()

results = {
"ucc": abs(ideal_expval - ucc_expval),
"cirq": abs(ideal_expval - cirq_expval),
"qiskit": abs(ideal_expval - qiskit_expval),
"pytket": abs(ideal_expval - pytket_expval),
"ideal": ideal_expval,
"uncompiled": {
"expval": uncompiled_expval,
"abs_error": abs(ideal_expval - uncompiled_expval),
"relative_error": abs(ideal_expval - uncompiled_expval) / abs(ideal_expval),
},
"ucc": {
"expval": ucc_expval,
"abs_error": abs(ideal_expval - ucc_expval),
"relative_error": abs(ideal_expval - ucc_expval) / abs(ideal_expval),
},
"cirq": {
"expval": cirq_expval,
"abs_error": abs(ideal_expval - cirq_expval),
"relative_error": abs(ideal_expval - cirq_expval) / abs(ideal_expval),
},
"qiskit": {
"expval": qiskit_expval,
"abs_error": abs(ideal_expval - qiskit_expval),
"relative_error": abs(ideal_expval - qiskit_expval) / abs(ideal_expval),
},
"pytket": {
"expval": pytket_expval,
"abs_error": abs(ideal_expval - pytket_expval),
"relative_error": abs(ideal_expval - pytket_expval) / abs(ideal_expval),
},
}

print(ideal_expval)
print(results)

filename = f"expval-results_{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}.json"

with open(os.path.join("../results", filename), "w") as f:
json.dump(results, f)

0 comments on commit 2ec9ebc

Please sign in to comment.