Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 38a74c8

Browse files
multi_measure.
1 parent 93d23b8 commit 38a74c8

File tree

3 files changed

+26
-1132
lines changed

3 files changed

+26
-1132
lines changed

‎tensorcircuit/circuit.py‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def __init__(
6666
)
6767
self.calibrations = []
6868
self.calibration_invokes = []
69+
self.measz_invokes = []
6970

7071
self.inputs = inputs
7172
self.mps_inputs = mps_inputs
@@ -136,6 +137,14 @@ def add_calibration(
136137
"parameters": parameters,
137138
"pos": len(self._qir)
138139
})
140+
141+
def measz(self, *index: int) -> None:
142+
self.measz_invokes.append({
143+
"name": "measz",
144+
"index": index,
145+
"pos": len(self._qir)
146+
})
147+
return
139148

140149

141150
def to_tqasm(self, pragma: Optional[str]= None) -> str:
@@ -169,8 +178,18 @@ def to_tqasm(self, pragma: Optional[str]= None) -> str:
169178
pos = cal.get("pos", len(self._qir))
170179
cals_by_pos[pos].append(cal)
171180

181+
measz_by_pos = defaultdict(list)
182+
for m in getattr(self, "measz_invokes", []):
183+
# pos 记录的是加入时的 len(self._qir)
184+
pos = m.get("pos", len(self._qir))
185+
measz_by_pos[pos].append(m)
186+
172187
# 交错输出:在第 i 个门之前输出所有 pos == i 的校准
173188
for i, gate in enumerate(self._qir):
189+
for m in measz_by_pos.get(i, []):
190+
targets = ", ".join(f"q[{idx}]" for idx in m["index"])
191+
qasm_lines.append(f"MEASZ {targets};")
192+
174193
for cal in cals_by_pos.get(i, []):
175194
# print(cal)
176195
pname = ", ".join(f"q[{x}]" for x in cal.get("parameters", []))
@@ -188,6 +207,10 @@ def to_tqasm(self, pragma: Optional[str]= None) -> str:
188207
else:
189208
qasm_lines.append(f"{gname} {targets};")
190209

210+
for m in measz_by_pos.get(len(self._qir), []):
211+
targets = ", ".join(f"q[{idx}]" for idx in m["index"])
212+
qasm_lines.append(f"MEASZ {targets};")
213+
191214
# 收尾:把 pos == len(self._qir) 的校准放在最后
192215
for cal in cals_by_pos.get(len(self._qir), []):
193216
# print(cal)

‎tests/05_test_multi_measure.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,12 @@ def gen_multi_measure_circuit(t):
3232
# qc.rxx(0, 5, theta=1.04632)
3333

3434
# 需添加测量指令
35-
qc.measure(0, 1)
35+
qc.measz(0, 1)
3636
qc.cz(0, 1)
37-
qc.measure(0, 1)
37+
qc.measz(0, 1)
3838

3939

40-
# print(qc.to_tqasm())
40+
print(qc.to_tqasm())
4141
return qc
4242

4343

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /