Skip to content

Commit cda6a50

Browse files
committed
Split unrelated method tables
1 parent 81b947b commit cda6a50

File tree

3 files changed

+47
-42
lines changed

3 files changed

+47
-42
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
from . import impls as impls
12
from .analysis import FidelityAnalysis as FidelityAnalysis
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from kirin import interp
2+
from kirin.lattice import EmptyLattice
3+
from kirin.dialects.scf import dialect as scf
4+
from kirin.dialects.scf.stmts import IfElse
5+
6+
from .analysis import FidelityAnalysis
7+
8+
9+
@scf.register(key="circuit.fidelity")
10+
class ScfFidelityMethodTable(interp.MethodTable):
11+
12+
@interp.impl(IfElse)
13+
def if_else(
14+
self,
15+
interp: FidelityAnalysis,
16+
frame: interp.Frame[EmptyLattice],
17+
stmt: IfElse,
18+
):
19+
# NOTE: store current fidelity for later
20+
current_fidelity = interp.current_fidelity
21+
22+
for s in stmt.then_body.stmts():
23+
stmt_impl = interp.lookup_registry(frame=frame, stmt=s)
24+
if stmt_impl is None:
25+
continue
26+
27+
stmt_impl(interp=interp, frame=frame, stmt=s)
28+
29+
then_fidelity = interp.current_fidelity
30+
31+
# NOTE: reset fidelity of interp to check if the else body results in a worse fidelity
32+
interp.current_fidelity = current_fidelity
33+
34+
for s in stmt.else_body.stmts():
35+
stmt_impl = interp.lookup_registry(frame=frame, stmt=s)
36+
if stmt_impl is None:
37+
continue
38+
39+
stmt_impl(interp=interp, frame=frame, stmt=s)
40+
41+
else_fidelity = interp.current_fidelity
42+
43+
if then_fidelity < else_fidelity:
44+
interp.current_fidelity = then_fidelity
45+
else:
46+
interp.current_fidelity = else_fidelity

src/bloqade/noise/fidelity.py

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from kirin import interp
22
from kirin.lattice import EmptyLattice
3-
from kirin.dialects.scf import dialect as scf
4-
from kirin.dialects.scf.stmts import IfElse
53

64
from bloqade.analysis.fidelity import FidelityAnalysis
75

@@ -34,43 +32,3 @@ def pauli_channel(
3432
fid = (1 - p) * (1 - p_ctrl)
3533

3634
interp.current_fidelity *= fid
37-
38-
39-
@scf.register(key="circuit.fidelity")
40-
class ScfFidelityMethodTable(FidelityMethodTable):
41-
42-
@interp.impl(IfElse)
43-
def if_else(
44-
self,
45-
interp: FidelityAnalysis,
46-
frame: interp.Frame[EmptyLattice],
47-
stmt: IfElse,
48-
):
49-
# NOTE: store current fidelity for later
50-
current_fidelity = interp.current_fidelity
51-
52-
for s in stmt.then_body.stmts():
53-
stmt_impl = interp.lookup_registry(frame=frame, stmt=s)
54-
if stmt_impl is None:
55-
continue
56-
57-
stmt_impl(interp=interp, frame=frame, stmt=s)
58-
59-
then_fidelity = interp.current_fidelity
60-
61-
# NOTE: reset fidelity of interp to check if the else body results in a worse fidelity
62-
interp.current_fidelity = current_fidelity
63-
64-
for s in stmt.else_body.stmts():
65-
stmt_impl = interp.lookup_registry(frame=frame, stmt=s)
66-
if stmt_impl is None:
67-
continue
68-
69-
stmt_impl(interp=interp, frame=frame, stmt=s)
70-
71-
else_fidelity = interp.current_fidelity
72-
73-
if then_fidelity < else_fidelity:
74-
interp.current_fidelity = then_fidelity
75-
else:
76-
interp.current_fidelity = else_fidelity

0 commit comments

Comments
 (0)