Skip to content

Commit 3149292

Browse files
committed
qem code
1 parent e8ca8ce commit 3149292

File tree

6 files changed

+1367
-0
lines changed

6 files changed

+1367
-0
lines changed

docs/source/tutorials/benchmark_circuits.ipynb

+206
Large diffs are not rendered by default.

docs/source/tutorials/error_mitigation.ipynb

+553
Large diffs are not rendered by default.

tensorcircuit/results/qem/__init__.py

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from . import qem_methods
2+
3+
zne_option = qem_methods.zne_option
4+
apply_zne = qem_methods.apply_zne
5+
6+
7+
apply_dd = qem_methods.apply_dd
8+
dd_option = qem_methods.dd_option
9+
10+
apply_rc = qem_methods.apply_rc
11+
12+
apply_gate = qem_methods.apply_gate
13+
rc_circuit = qem_methods.rc_circuit
14+
rc_candidates = qem_methods.rc_candidates
15+
16+
use_qubits = qem_methods.use_qubits
17+
washcircuit = qem_methods.washcircuit
18+
add_dd = qem_methods.add_dd
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
from mitiq.benchmarks import (
2+
generate_ghz_circuit,
3+
generate_mirror_circuit,
4+
generate_quantum_volume_circuit,
5+
generate_rb_circuits,
6+
generate_w_circuit,
7+
)
8+
9+
from mitiq.interface import (
10+
CircuitConversionError,
11+
convert_to_mitiq,
12+
convert_from_mitiq,
13+
)
14+
15+
16+
from ... import Circuit
17+
18+
19+
def ghz_circuit(num_qubits): # type: ignore
20+
cirq = generate_ghz_circuit(num_qubits)
21+
ideal = {"0" * num_qubits: 0.5, "1" * num_qubits: 0.5}
22+
qisc = convert_from_mitiq(cirq, "qiskit")
23+
circuit = Circuit.from_qiskit(qisc, qisc.num_qubits)
24+
return circuit, ideal
25+
26+
27+
def w_circuit(num_qubits): # type: ignore
28+
# Efficient quantum algorithms for GHZ and W states https://arxiv.org/abs/1807.05572
29+
# Werner-state with linear complexity {'1000': 0.25, '0100': 0.25, '0010': 0.25, '0001': 0.25}
30+
cirq = generate_w_circuit(num_qubits)
31+
32+
ideal = {}
33+
for i in range(num_qubits):
34+
bitstring = "0" * i + "1" + "0" * (num_qubits - i - 1)
35+
ideal[bitstring] = 1 / num_qubits
36+
37+
qisc = convert_from_mitiq(cirq, "qiskit")
38+
circuit = Circuit.from_qiskit(qisc, qisc.num_qubits)
39+
return circuit, ideal
40+
41+
42+
def rb_circuit(num_qubits, depth): # type: ignore
43+
# num_qubits limited to 1 or 2
44+
cirq = generate_rb_circuits(num_qubits, depth)[0]
45+
ideal = {"0" * num_qubits: 1.0}
46+
qisc = convert_from_mitiq(cirq, "qiskit")
47+
circuit = Circuit.from_qiskit(qisc, qisc.num_qubits)
48+
return circuit, ideal
49+
50+
51+
def mirror_circuit( # type: ignore
52+
depth, two_qubit_gate_prob, connectivity_graph, seed, two_qubit_gate_name="CNOT"
53+
):
54+
# Measuring the Capabilities of Quantum Computers https://arxiv.org/pdf/2008.11294.pdf
55+
cirq, bitstring_list = generate_mirror_circuit(
56+
nlayers=depth,
57+
two_qubit_gate_prob=two_qubit_gate_prob,
58+
connectivity_graph=connectivity_graph,
59+
two_qubit_gate_name=two_qubit_gate_name,
60+
seed=seed,
61+
)
62+
ideal_bitstring = "".join(map(str, bitstring_list))
63+
ideal = {ideal_bitstring: 1.0}
64+
qisc = convert_from_mitiq(cirq, "qiskit")
65+
circuit = Circuit.from_qiskit(qisc, qisc.num_qubits)
66+
return circuit, ideal
67+
68+
69+
def QAOA_circuit(graph, weight, params): # type: ignore
70+
nlayers = len(params)
71+
72+
qlist = []
73+
for i in range(len(graph)):
74+
for j in range(2):
75+
qlist.append(graph[i][j])
76+
qlist = list(set(qlist))
77+
78+
nqubit = max(qlist) + 1
79+
80+
c = Circuit(nqubit)
81+
for i in qlist:
82+
c.h(i) # type: ignore
83+
84+
for i in range(nlayers):
85+
for e in range(len(graph)):
86+
c.cnot(graph[e][0], graph[e][1]) # type: ignore
87+
c.rz(graph[e][1], theta=params[i, 0] * weight[e]) # type: ignore
88+
c.cnot(graph[e][0], graph[e][1]) # type: ignore
89+
90+
for k in qlist:
91+
c.rx(k, theta=params[i, 1] * 2) # type: ignore
92+
93+
return c

0 commit comments

Comments
 (0)