Created
August 26, 2025 07:58
-
-
Save sergei-mironov/d93409e878f8cc1f0903e039e38a325a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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