Skip to content

Instantly share code, notes, and snippets.

@sergei-mironov
Created August 26, 2025 07:58
Show Gist options
  • Save sergei-mironov/d93409e878f8cc1f0903e039e38a325a to your computer and use it in GitHub Desktop.
Save sergei-mironov/d93409e878f8cc1f0903e039e38a325a to your computer and use it in GitHub Desktop.
import catalyst
import pennylane as qml
from time import time
from json import dump as json_dump
@qml.qjit
@qml.qnode(
qml.device(
"qrack.simulator",
wires=49,
shots=1,
# noise=0.05,
isTensorNetwork=False,
isStabilizerHybrid=False, # <========= THIS ONE
isOpenCL=True,
isPaged=False,
isCpuGpuHybrid=False,
)
)
def kernel():
""" Plpy representation of crd.Circuit "final circuit"
There are 49 quantum channels 49 classical channels in the circuit.
"""
c = {}
catalyst.measure(0, reset=True) # Reset # (0, 0, 0)
qml.PauliX(wires=[0]) # (0, 0, 0)
catalyst.measure(1, reset=True) # Reset # (0, 1, 0)
qml.PauliX(wires=[1]) # (0, 1, 0)
catalyst.measure(3, reset=True) # Reset # (0, 2, 0)
qml.PauliX(wires=[3]) # (0, 2, 0)
catalyst.measure(4, reset=True) # Reset # (0, 3, 0)
qml.PauliX(wires=[4]) # (0, 3, 0)
catalyst.measure(6, reset=True) # Reset # (0, 4, 0)
qml.PauliX(wires=[6]) # (0, 4, 0)
catalyst.measure(7, reset=True) # Reset # (1, 0, 0)
qml.PauliX(wires=[7]) # (1, 0, 0)
catalyst.measure(8, reset=True) # Reset # (1, 1, 0)
qml.PauliX(wires=[8]) # (1, 1, 0)
catalyst.measure(10, reset=True) # Reset # (1, 2, 0)
qml.PauliX(wires=[10]) # (1, 2, 0)
catalyst.measure(12, reset=True) # Reset # (1, 3, 0)
qml.PauliX(wires=[12]) # (1, 3, 0)
catalyst.measure(14, reset=True) # Reset # (1, 4, 0)
qml.PauliX(wires=[14]) # (1, 4, 0)
catalyst.measure(17, reset=True) # Reset # (2, 0, 0)
qml.PauliX(wires=[17]) # (2, 0, 0)
catalyst.measure(19, reset=True) # Reset # (2, 1, 0)
qml.PauliX(wires=[19]) # (2, 1, 0)
catalyst.measure(21, reset=True) # Reset # (2, 2, 0)
qml.PauliX(wires=[21]) # (2, 2, 0)
catalyst.measure(23, reset=True) # Reset # (2, 3, 0)
qml.PauliX(wires=[23]) # (2, 3, 0)
catalyst.measure(25, reset=True) # Reset # (2, 4, 0)
qml.PauliX(wires=[25]) # (2, 4, 0)
catalyst.measure(27, reset=True) # Reset # (3, 0, 0)
qml.PauliX(wires=[27]) # (3, 0, 0)
catalyst.measure(28, reset=True) # Reset # (3, 1, 0)
qml.PauliX(wires=[28]) # (3, 1, 0)
catalyst.measure(30, reset=True) # Reset # (3, 2, 0)
qml.PauliX(wires=[30]) # (3, 2, 0)
catalyst.measure(32, reset=True) # Reset # (3, 3, 0)
qml.PauliX(wires=[32]) # (3, 3, 0)
catalyst.measure(34, reset=True) # Reset # (3, 4, 0)
qml.PauliX(wires=[34]) # (3, 4, 0)
catalyst.measure(37, reset=True) # Reset # (4, 0, 0)
qml.PauliX(wires=[37]) # (4, 0, 0)
catalyst.measure(39, reset=True) # Reset # (4, 1, 0)
qml.PauliX(wires=[39]) # (4, 1, 0)
catalyst.measure(41, reset=True) # Reset # (4, 2, 0)
qml.PauliX(wires=[41]) # (4, 2, 0)
catalyst.measure(43, reset=True) # Reset # (4, 3, 0)
qml.PauliX(wires=[43]) # (4, 3, 0)
catalyst.measure(45, reset=True) # Reset # (4, 4, 0)
qml.PauliX(wires=[45]) # (4, 4, 0)
catalyst.measure(9, reset=True) # Reset # (1, 1, 1)
catalyst.measure(13, reset=True) # Reset # (1, 3, 1)
catalyst.measure(22, reset=True) # Reset # (2, 2, 1)
catalyst.measure(26, reset=True) # Reset # (2, 4, 1)
catalyst.measure(29, reset=True) # Reset # (3, 1, 1)
catalyst.measure(33, reset=True) # Reset # (3, 3, 1)
catalyst.measure(42, reset=True) # Reset # (4, 2, 1)
catalyst.measure(46, reset=True) # Reset # (4, 4, 1)
catalyst.measure(11, reset=True) # Reset # (1, 2, 1)
catalyst.measure(15, reset=True) # Reset # (1, 4, 1)
catalyst.measure(20, reset=True) # Reset # (2, 1, 1)
catalyst.measure(24, reset=True) # Reset # (2, 3, 1)
catalyst.measure(31, reset=True) # Reset # (3, 2, 1)
catalyst.measure(35, reset=True) # Reset # (3, 4, 1)
catalyst.measure(40, reset=True) # Reset # (4, 1, 1)
catalyst.measure(44, reset=True) # Reset # (4, 3, 1)
catalyst.measure(2, reset=True) # Reset # (0, 1, 1)
catalyst.measure(5, reset=True) # Reset # (0, 3, 1)
catalyst.measure(47, reset=True) # Reset # (5, 2, 1)
catalyst.measure(48, reset=True) # Reset # (5, 4, 1)
catalyst.measure(18, reset=True) # Reset # (2, 0, 1)
catalyst.measure(38, reset=True) # Reset # (4, 0, 1)
catalyst.measure(16, reset=True) # Reset # (1, 5, 1)
catalyst.measure(36, reset=True) # Reset # (3, 5, 1)
qml.Hadamard(wires=[9]) # (1, 1, 1)
qml.Hadamard(wires=[13]) # (1, 3, 1)
qml.Hadamard(wires=[22]) # (2, 2, 1)
qml.Hadamard(wires=[26]) # (2, 4, 1)
qml.Hadamard(wires=[29]) # (3, 1, 1)
qml.Hadamard(wires=[33]) # (3, 3, 1)
qml.Hadamard(wires=[42]) # (4, 2, 1)
qml.Hadamard(wires=[46]) # (4, 4, 1)
qml.Hadamard(wires=[11]) # (1, 2, 1)
qml.Hadamard(wires=[15]) # (1, 4, 1)
qml.Hadamard(wires=[20]) # (2, 1, 1)
qml.Hadamard(wires=[24]) # (2, 3, 1)
qml.Hadamard(wires=[31]) # (3, 2, 1)
qml.Hadamard(wires=[35]) # (3, 4, 1)
qml.Hadamard(wires=[40]) # (4, 1, 1)
qml.Hadamard(wires=[44]) # (4, 3, 1)
qml.Hadamard(wires=[2]) # (0, 1, 1)
qml.Hadamard(wires=[5]) # (0, 3, 1)
qml.Hadamard(wires=[47]) # (5, 2, 1)
qml.Hadamard(wires=[48]) # (5, 4, 1)
qml.Hadamard(wires=[18]) # (2, 0, 1)
qml.Hadamard(wires=[38]) # (4, 0, 1)
qml.Hadamard(wires=[16]) # (1, 5, 1)
qml.Hadamard(wires=[36]) # (3, 5, 1)
qml.CZ(wires=[9,7]) # (1, 1, 1),(1, 0, 0)
qml.CZ(wires=[13,10]) # (1, 3, 1),(1, 2, 0)
qml.CZ(wires=[22,19]) # (2, 2, 1),(2, 1, 0)
qml.CZ(wires=[26,23]) # (2, 4, 1),(2, 3, 0)
qml.CZ(wires=[29,27]) # (3, 1, 1),(3, 0, 0)
qml.CZ(wires=[33,30]) # (3, 3, 1),(3, 2, 0)
qml.CZ(wires=[42,39]) # (4, 2, 1),(4, 1, 0)
qml.CZ(wires=[46,43]) # (4, 4, 1),(4, 3, 0)
qml.CNOT(wires=[11,8]) # (1, 2, 1),(1, 1, 0)
qml.CNOT(wires=[15,12]) # (1, 4, 1),(1, 3, 0)
qml.CNOT(wires=[20,17]) # (2, 1, 1),(2, 0, 0)
qml.CNOT(wires=[24,21]) # (2, 3, 1),(2, 2, 0)
qml.CNOT(wires=[31,28]) # (3, 2, 1),(3, 1, 0)
qml.CNOT(wires=[35,32]) # (3, 4, 1),(3, 3, 0)
qml.CNOT(wires=[40,37]) # (4, 1, 1),(4, 0, 0)
qml.CNOT(wires=[44,41]) # (4, 3, 1),(4, 2, 0)
qml.CNOT(wires=[2,0]) # (0, 1, 1),(0, 0, 0)
qml.CNOT(wires=[5,3]) # (0, 3, 1),(0, 2, 0)
qml.CZ(wires=[16,14]) # (1, 5, 1),(1, 4, 0)
qml.CZ(wires=[36,34]) # (3, 5, 1),(3, 4, 0)
qml.CZ(wires=[9,0]) # (1, 1, 1),(0, 0, 0)
qml.CZ(wires=[13,3]) # (1, 3, 1),(0, 2, 0)
qml.CZ(wires=[22,8]) # (2, 2, 1),(1, 1, 0)
qml.CZ(wires=[26,12]) # (2, 4, 1),(1, 3, 0)
qml.CZ(wires=[29,17]) # (3, 1, 1),(2, 0, 0)
qml.CZ(wires=[33,21]) # (3, 3, 1),(2, 2, 0)
qml.CZ(wires=[42,28]) # (4, 2, 1),(3, 1, 0)
qml.CZ(wires=[46,32]) # (4, 4, 1),(3, 3, 0)
qml.CNOT(wires=[11,10]) # (1, 2, 1),(1, 2, 0)
qml.CNOT(wires=[15,14]) # (1, 4, 1),(1, 4, 0)
qml.CNOT(wires=[20,19]) # (2, 1, 1),(2, 1, 0)
qml.CNOT(wires=[24,23]) # (2, 3, 1),(2, 3, 0)
qml.CNOT(wires=[31,30]) # (3, 2, 1),(3, 2, 0)
qml.CNOT(wires=[35,34]) # (3, 4, 1),(3, 4, 0)
qml.CNOT(wires=[40,39]) # (4, 1, 1),(4, 1, 0)
qml.CNOT(wires=[44,43]) # (4, 3, 1),(4, 3, 0)
qml.CNOT(wires=[2,1]) # (0, 1, 1),(0, 1, 0)
qml.CNOT(wires=[5,4]) # (0, 3, 1),(0, 3, 0)
qml.CZ(wires=[16,6]) # (1, 5, 1),(0, 4, 0)
qml.CZ(wires=[36,25]) # (3, 5, 1),(2, 4, 0)
qml.CZ(wires=[9,8]) # (1, 1, 1),(1, 1, 0)
qml.CZ(wires=[13,12]) # (1, 3, 1),(1, 3, 0)
qml.CZ(wires=[22,21]) # (2, 2, 1),(2, 2, 0)
qml.CZ(wires=[26,25]) # (2, 4, 1),(2, 4, 0)
qml.CZ(wires=[29,28]) # (3, 1, 1),(3, 1, 0)
qml.CZ(wires=[33,32]) # (3, 3, 1),(3, 3, 0)
qml.CZ(wires=[42,41]) # (4, 2, 1),(4, 2, 0)
qml.CZ(wires=[46,45]) # (4, 4, 1),(4, 4, 0)
qml.CNOT(wires=[11,1]) # (1, 2, 1),(0, 1, 0)
qml.CNOT(wires=[15,4]) # (1, 4, 1),(0, 3, 0)
qml.CNOT(wires=[20,7]) # (2, 1, 1),(1, 0, 0)
qml.CNOT(wires=[24,10]) # (2, 3, 1),(1, 2, 0)
qml.CNOT(wires=[31,19]) # (3, 2, 1),(2, 1, 0)
qml.CNOT(wires=[35,23]) # (3, 4, 1),(2, 3, 0)
qml.CNOT(wires=[40,27]) # (4, 1, 1),(3, 0, 0)
qml.CNOT(wires=[44,30]) # (4, 3, 1),(3, 2, 0)
qml.CNOT(wires=[47,39]) # (5, 2, 1),(4, 1, 0)
qml.CNOT(wires=[48,43]) # (5, 4, 1),(4, 3, 0)
qml.CZ(wires=[18,17]) # (2, 0, 1),(2, 0, 0)
qml.CZ(wires=[38,37]) # (4, 0, 1),(4, 0, 0)
qml.CZ(wires=[9,1]) # (1, 1, 1),(0, 1, 0)
qml.CZ(wires=[13,4]) # (1, 3, 1),(0, 3, 0)
qml.CZ(wires=[22,10]) # (2, 2, 1),(1, 2, 0)
qml.CZ(wires=[26,14]) # (2, 4, 1),(1, 4, 0)
qml.CZ(wires=[29,19]) # (3, 1, 1),(2, 1, 0)
qml.CZ(wires=[33,23]) # (3, 3, 1),(2, 3, 0)
qml.CZ(wires=[42,30]) # (4, 2, 1),(3, 2, 0)
qml.CZ(wires=[46,34]) # (4, 4, 1),(3, 4, 0)
qml.CNOT(wires=[11,3]) # (1, 2, 1),(0, 2, 0)
qml.CNOT(wires=[15,6]) # (1, 4, 1),(0, 4, 0)
qml.CNOT(wires=[20,8]) # (2, 1, 1),(1, 1, 0)
qml.CNOT(wires=[24,12]) # (2, 3, 1),(1, 3, 0)
qml.CNOT(wires=[31,21]) # (3, 2, 1),(2, 2, 0)
qml.CNOT(wires=[35,25]) # (3, 4, 1),(2, 4, 0)
qml.CNOT(wires=[40,28]) # (4, 1, 1),(3, 1, 0)
qml.CNOT(wires=[44,32]) # (4, 3, 1),(3, 3, 0)
qml.CNOT(wires=[47,41]) # (5, 2, 1),(4, 2, 0)
qml.CNOT(wires=[48,45]) # (5, 4, 1),(4, 4, 0)
qml.CZ(wires=[18,7]) # (2, 0, 1),(1, 0, 0)
qml.CZ(wires=[38,27]) # (4, 0, 1),(3, 0, 0)
qml.Hadamard(wires=[9]) # (1, 1, 1)
qml.Hadamard(wires=[13]) # (1, 3, 1)
qml.Hadamard(wires=[22]) # (2, 2, 1)
qml.Hadamard(wires=[26]) # (2, 4, 1)
qml.Hadamard(wires=[29]) # (3, 1, 1)
qml.Hadamard(wires=[33]) # (3, 3, 1)
qml.Hadamard(wires=[42]) # (4, 2, 1)
qml.Hadamard(wires=[46]) # (4, 4, 1)
qml.Hadamard(wires=[11]) # (1, 2, 1)
qml.Hadamard(wires=[15]) # (1, 4, 1)
qml.Hadamard(wires=[20]) # (2, 1, 1)
qml.Hadamard(wires=[24]) # (2, 3, 1)
qml.Hadamard(wires=[31]) # (3, 2, 1)
qml.Hadamard(wires=[35]) # (3, 4, 1)
qml.Hadamard(wires=[40]) # (4, 1, 1)
qml.Hadamard(wires=[44]) # (4, 3, 1)
qml.Hadamard(wires=[2]) # (0, 1, 1)
qml.Hadamard(wires=[5]) # (0, 3, 1)
qml.Hadamard(wires=[47]) # (5, 2, 1)
qml.Hadamard(wires=[48]) # (5, 4, 1)
qml.Hadamard(wires=[18]) # (2, 0, 1)
qml.Hadamard(wires=[38]) # (4, 0, 1)
qml.Hadamard(wires=[16]) # (1, 5, 1)
qml.Hadamard(wires=[36]) # (3, 5, 1)
c[9] = catalyst.measure(wires=[9], reset=True); # (1, 1, 1),c_(1, 1, 1)_0
c[13] = catalyst.measure(wires=[13], reset=True); # (1, 3, 1),c_(1, 3, 1)_0
c[22] = catalyst.measure(wires=[22], reset=True); # (2, 2, 1),c_(2, 2, 1)_0
c[26] = catalyst.measure(wires=[26], reset=True); # (2, 4, 1),c_(2, 4, 1)_0
c[29] = catalyst.measure(wires=[29], reset=True); # (3, 1, 1),c_(3, 1, 1)_0
c[33] = catalyst.measure(wires=[33], reset=True); # (3, 3, 1),c_(3, 3, 1)_0
c[42] = catalyst.measure(wires=[42], reset=True); # (4, 2, 1),c_(4, 2, 1)_0
c[46] = catalyst.measure(wires=[46], reset=True); # (4, 4, 1),c_(4, 4, 1)_0
c[11] = catalyst.measure(wires=[11], reset=True); # (1, 2, 1),c_(1, 2, 1)_0
c[15] = catalyst.measure(wires=[15], reset=True); # (1, 4, 1),c_(1, 4, 1)_0
c[20] = catalyst.measure(wires=[20], reset=True); # (2, 1, 1),c_(2, 1, 1)_0
c[24] = catalyst.measure(wires=[24], reset=True); # (2, 3, 1),c_(2, 3, 1)_0
c[31] = catalyst.measure(wires=[31], reset=True); # (3, 2, 1),c_(3, 2, 1)_0
c[35] = catalyst.measure(wires=[35], reset=True); # (3, 4, 1),c_(3, 4, 1)_0
c[40] = catalyst.measure(wires=[40], reset=True); # (4, 1, 1),c_(4, 1, 1)_0
c[44] = catalyst.measure(wires=[44], reset=True); # (4, 3, 1),c_(4, 3, 1)_0
c[2] = catalyst.measure(wires=[2], reset=True); # (0, 1, 1),c_(0, 1, 1)_0
c[5] = catalyst.measure(wires=[5], reset=True); # (0, 3, 1),c_(0, 3, 1)_0
c[47] = catalyst.measure(wires=[47], reset=True); # (5, 2, 1),c_(5, 2, 1)_0
c[48] = catalyst.measure(wires=[48], reset=True); # (5, 4, 1),c_(5, 4, 1)_0
c[18] = catalyst.measure(wires=[18], reset=True); # (2, 0, 1),c_(2, 0, 1)_0
c[38] = catalyst.measure(wires=[38], reset=True); # (4, 0, 1),c_(4, 0, 1)_0
c[16] = catalyst.measure(wires=[16], reset=True); # (1, 5, 1),c_(1, 5, 1)_0
c[36] = catalyst.measure(wires=[36], reset=True); # (3, 5, 1),c_(3, 5, 1)_0
c[0] = catalyst.measure(wires=[0], reset=True); # (0, 0, 0),c_(0, 0, 0)_0
c[1] = catalyst.measure(wires=[1], reset=True); # (0, 1, 0),c_(0, 1, 0)_0
c[3] = catalyst.measure(wires=[3], reset=True); # (0, 2, 0),c_(0, 2, 0)_0
c[4] = catalyst.measure(wires=[4], reset=True); # (0, 3, 0),c_(0, 3, 0)_0
c[6] = catalyst.measure(wires=[6], reset=True); # (0, 4, 0),c_(0, 4, 0)_0
c[7] = catalyst.measure(wires=[7], reset=True); # (1, 0, 0),c_(1, 0, 0)_0
c[8] = catalyst.measure(wires=[8], reset=True); # (1, 1, 0),c_(1, 1, 0)_0
c[10] = catalyst.measure(wires=[10], reset=True); # (1, 2, 0),c_(1, 2, 0)_0
c[12] = catalyst.measure(wires=[12], reset=True); # (1, 3, 0),c_(1, 3, 0)_0
c[14] = catalyst.measure(wires=[14], reset=True); # (1, 4, 0),c_(1, 4, 0)_0
c[17] = catalyst.measure(wires=[17], reset=True); # (2, 0, 0),c_(2, 0, 0)_0
c[19] = catalyst.measure(wires=[19], reset=True); # (2, 1, 0),c_(2, 1, 0)_0
c[21] = catalyst.measure(wires=[21], reset=True); # (2, 2, 0),c_(2, 2, 0)_0
c[23] = catalyst.measure(wires=[23], reset=True); # (2, 3, 0),c_(2, 3, 0)_0
c[25] = catalyst.measure(wires=[25], reset=True); # (2, 4, 0),c_(2, 4, 0)_0
c[27] = catalyst.measure(wires=[27], reset=True); # (3, 0, 0),c_(3, 0, 0)_0
c[28] = catalyst.measure(wires=[28], reset=True); # (3, 1, 0),c_(3, 1, 0)_0
c[30] = catalyst.measure(wires=[30], reset=True); # (3, 2, 0),c_(3, 2, 0)_0
c[32] = catalyst.measure(wires=[32], reset=True); # (3, 3, 0),c_(3, 3, 0)_0
c[34] = catalyst.measure(wires=[34], reset=True); # (3, 4, 0),c_(3, 4, 0)_0
c[37] = catalyst.measure(wires=[37], reset=True); # (4, 0, 0),c_(4, 0, 0)_0
c[39] = catalyst.measure(wires=[39], reset=True); # (4, 1, 0),c_(4, 1, 0)_0
c[41] = catalyst.measure(wires=[41], reset=True); # (4, 2, 0),c_(4, 2, 0)_0
c[43] = catalyst.measure(wires=[43], reset=True); # (4, 3, 0),c_(4, 3, 0)_0
c[45] = catalyst.measure(wires=[45], reset=True); # (4, 4, 0),c_(4, 4, 0)_0
return c
kernel.compile()
times = []
print(f"d=5, nc=1, nq=49", end='', flush=True)
for _ in range(5):
begin = time()
ret = [1 if v else 0 for v in kernel().values()]
end = time()
times.append(end - begin)
with open("running_times.json", "w") as f:
json_dump(times, f)
print(f", t={times[-1]}", end='', flush=True)
print()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment