Could you please advise me on running a 49qubit logical T+ circuit in the tensornetwork mode? The code below emits the QUnit fidelity estimate is effectively 0! warning and it is poor indeed if the fidelity guard is disabled.
A similar program for the distance 3 code shows correct results and nice timings in this mode, so I am very interested in making running a larger version too. Please let me know what can I try.
import json
import time
from contextlib import contextmanager
from signal import ITIMER_REAL, setitimer
from functools import reduce
import pennylane as qml
from catalyst import qjit, measure as catalyst_measure
num_shots = 200
nattempts = 1
timeout = 3000.0
dry_run = False
@contextmanager
def with_alarm(timeout: float):
timer_set = False
try:
if timeout is not None and 0 < timeout < float("inf"):
setitimer(ITIMER_REAL, timeout)
timer_set = True
yield
finally:
if timer_set:
setitimer(ITIMER_REAL, 0)
def dump_logical_observables(measurement_attempts) -> None:
""" For each observable, calculate its value from measurements (by xor-ing them) and dump to the
configured JSON file. """
logical_values_attempts = []
logical_measurements = {'q1_X_0': ('c_(0, 0, 0)_0', 'c_(1, 0, 0)_0', 'c_(2, 0, 0)_0', 'c_(3, 0, 0)_0', 'c_(4, 0, 0)_0', 'c_(1, 2, 1)_0', 'c_(2, 1, 1)_0', 'c_(3, 2, 1)_0', 'c_(4, 1, 1)_0', 'c_(0, 1, 1)_0', 'c_(5, 2, 1)_0')}
for attempt_shots in measurement_attempts:
if not attempt_shots:
continue
nshots = len(attempt_shots)
logical_values = {}
for lol, meas_labels in logical_measurements.items():
lo_shots = []
for i in range(nshots):
shot_dict = attempt_shots[i]
samples = [int(shot_dict[l]) for l in meas_labels]
lo_value = reduce(lambda a,b: a ^ b, samples)
lo_shots.append(int(lo_value))
logical_values[lol] = lo_shots
logical_values_attempts.append(logical_values)
with open("logical_measurements.json", "w") as f:
json.dump(logical_values_attempts, f)
if not dry_run:
@qjit
@qml.qnode(qml.device("qrack.simulator",wires=49,isTensorNetwork=True,isStabilizerHybrid=True,isOpenCL=True,isPaged=False,isCpuGpuHybrid=False,), shots=num_shots)
def pl_main():
# PennyLane Program Generated from Eka
# Initialize Wires from Eka quantum channels Ids
measurements = {}
qml.registers({'20cd9525-88d4-4f79-b0d6-69896659d801': 1, '4c114191-2117-4026-98d6-3c79c90aad94': 1, '5fe8fcfe-24d7-4b0e-9160-c1b359ac4b3e': 1, '17cc13ef-3f1b-4359-bce9-1e22f1e18d2b': 1, '7583a83f-e428-4e35-a0ea-c2d94ddb6c1b': 1, 'd98a1861-4cc6-40f2-9aa7-36d8c7c05971': 1, '2a268fb7-af6f-4710-9a78-2f00ec6ccca8': 1, 'bc194ed6-3130-4f08-a66e-9ec86012437a': 1, 'e33d8911-19e9-4d2f-b9bd-76ae59655d82': 1, '4a002fb1-3b77-4441-b328-d86c037afb04': 1, '44e83a60-a55f-43ea-a182-d5e6ced3d3ec': 1, '8dd6e03b-13fe-43eb-8b1c-19aecded6131': 1, 'aed16e51-d9a9-4137-acf3-7ea4e264d21d': 1, 'b88ff4d7-6a7c-4e3c-9081-958b8e7b0052': 1, '7c7692d8-1462-4ac0-b905-93f9a503d5e9': 1, '6788af4c-aa90-4930-8977-038f899ba40f': 1, '10b37912-72a6-447e-b6bb-906fce07f686': 1, 'c927451d-b188-416a-b3a7-6e94a4e4517e': 1, '1c315269-f3a7-4d53-9f2f-cd9df110048d': 1, '808e0aef-21a5-41ba-b765-2ce0edec2d73': 1, 'c3c8ec05-3c5c-4c08-9a98-45c19d8c6679': 1, 'e1f462bf-407b-4a9e-8960-dfe06263ca40': 1, '647804f4-829b-4531-a47a-a9301181b966': 1, 'd02b3986-77c1-4227-b083-8baef94f5200': 1, 'dd77ba9f-072d-4922-8ae9-b0f6555fb09b': 1, 'a429cce7-3c33-4233-86d0-2855d24bc043': 1, 'a8736677-f3b7-4d9d-be5e-480cd4f915e6': 1, 'def4773d-0891-4ae9-8eb4-ad4e3c025748': 1, '79f9cc85-b749-4d4f-bc21-907bf8a4e32c': 1, '3779c449-f260-45ec-b793-b6482da82ba7': 1, '435ee73a-d126-4dc6-987a-8dff11f177a9': 1, '4c66ae56-f120-446d-96f9-7900fe71ce37': 1, 'fe065b07-a59a-4019-bcbe-f2d10531c282': 1, 'c68e755f-dcc0-4884-9937-d95dc0427d5c': 1, '5f646221-9634-4b07-8365-5a8c9fa3d19d': 1, '8658056b-df30-442d-84fc-4fbc08c62bac': 1, '91f930ec-81e2-48c3-8c36-35ada1ccc276': 1, '865330de-b339-423c-8fbd-ebb4ea6c00eb': 1, 'faed7ac9-ef9e-4622-ad7a-6986adbaa5a6': 1, '735f0add-4d65-4a89-9f17-ea88b17aa5af': 1, '6bb6ace0-998a-4b57-bf2e-25a14abaaa34': 1, '89bcd509-8b8e-4b7f-81b7-d458cef8d7b9': 1, 'aaf26ee1-f4d9-4ba0-8d9c-c51b1d14b422': 1, 'c13fcf73-ef5f-4fac-bfca-e9266837afdf': 1, '97e70477-6c86-401b-9b43-165aa528087c': 1, 'fd103e3c-7411-41c3-ba53-a718de15ea20': 1, 'd1e36d0d-3114-49ea-b8c5-9c5536fc28e3': 1, '0a84f1f2-d755-47d6-9570-0ed03f0108b3': 1, '12a5a18e-6568-43b5-b622-8da3d17320b7': 1})
# Start of circuit: final circuit
# Start of circuit: inject t into block q1 and measure syndromes
# Start of circuit: inject t into block q1
# Start of circuit: resource state reset
catalyst_measure(21, reset=True)
qml.Hadamard([21])
qml.T([21])
# End of circuit: resource state reset
# Start of circuit: reset four quadrants
catalyst_measure(8, reset=True)
qml.Hadamard([8])
catalyst_measure(1, reset=True)
qml.Hadamard([1])
catalyst_measure(10, reset=True)
qml.Hadamard([10])
catalyst_measure(3, reset=True)
qml.Hadamard([3])
catalyst_measure(0, reset=True)
qml.Hadamard([0])
catalyst_measure(4, reset=True)
qml.Hadamard([4])
catalyst_measure(32, reset=True)
qml.Hadamard([32])
catalyst_measure(39, reset=True)
qml.Hadamard([39])
catalyst_measure(41, reset=True)
qml.Hadamard([41])
catalyst_measure(43, reset=True)
qml.Hadamard([43])
catalyst_measure(45, reset=True)
qml.Hadamard([45])
catalyst_measure(30, reset=True)
qml.Hadamard([30])
catalyst_measure(27, reset=True)
catalyst_measure(19, reset=True)
catalyst_measure(28, reset=True)
catalyst_measure(37, reset=True)
catalyst_measure(7, reset=True)
catalyst_measure(17, reset=True)
catalyst_measure(25, reset=True)
catalyst_measure(34, reset=True)
catalyst_measure(12, reset=True)
catalyst_measure(14, reset=True)
catalyst_measure(6, reset=True)
catalyst_measure(23, reset=True)
# End of circuit: reset four quadrants
# End of circuit: inject t into block q1
# Start of circuit: measure q1 syndromes 1 time(s)
# Start of circuit: measure q1 syndromes - cycle 0
catalyst_measure(9, reset=True)
catalyst_measure(13, reset=True)
catalyst_measure(22, reset=True)
catalyst_measure(26, reset=True)
catalyst_measure(29, reset=True)
catalyst_measure(33, reset=True)
catalyst_measure(42, reset=True)
catalyst_measure(46, reset=True)
catalyst_measure(11, reset=True)
catalyst_measure(15, reset=True)
catalyst_measure(20, reset=True)
catalyst_measure(24, reset=True)
catalyst_measure(31, reset=True)
catalyst_measure(35, reset=True)
catalyst_measure(40, reset=True)
catalyst_measure(44, reset=True)
catalyst_measure(2, reset=True)
catalyst_measure(5, reset=True)
catalyst_measure(47, reset=True)
catalyst_measure(48, reset=True)
catalyst_measure(18, reset=True)
catalyst_measure(38, reset=True)
catalyst_measure(16, reset=True)
catalyst_measure(36, reset=True)
qml.Hadamard([9])
qml.Hadamard([13])
qml.Hadamard([22])
qml.Hadamard([26])
qml.Hadamard([29])
qml.Hadamard([33])
qml.Hadamard([42])
qml.Hadamard([46])
qml.Hadamard([11])
qml.Hadamard([15])
qml.Hadamard([20])
qml.Hadamard([24])
qml.Hadamard([31])
qml.Hadamard([35])
qml.Hadamard([40])
qml.Hadamard([44])
qml.Hadamard([2])
qml.Hadamard([5])
qml.Hadamard([47])
qml.Hadamard([48])
qml.Hadamard([18])
qml.Hadamard([38])
qml.Hadamard([16])
qml.Hadamard([36])
qml.CZ([9, 7])
qml.CZ([13, 10])
qml.CZ([22, 19])
qml.CZ([26, 23])
qml.CZ([29, 27])
qml.CZ([33, 30])
qml.CZ([42, 39])
qml.CZ([46, 43])
qml.CNOT([11, 8])
qml.CNOT([15, 12])
qml.CNOT([20, 17])
qml.CNOT([24, 21])
qml.CNOT([31, 28])
qml.CNOT([35, 32])
qml.CNOT([40, 37])
qml.CNOT([44, 41])
qml.CNOT([2, 0])
qml.CNOT([5, 3])
qml.CZ([16, 14])
qml.CZ([36, 34])
qml.CZ([9, 0])
qml.CZ([13, 3])
qml.CZ([22, 8])
qml.CZ([26, 12])
qml.CZ([29, 17])
qml.CZ([33, 21])
qml.CZ([42, 28])
qml.CZ([46, 32])
qml.CNOT([11, 10])
qml.CNOT([15, 14])
qml.CNOT([20, 19])
qml.CNOT([24, 23])
qml.CNOT([31, 30])
qml.CNOT([35, 34])
qml.CNOT([40, 39])
qml.CNOT([44, 43])
qml.CNOT([2, 1])
qml.CNOT([5, 4])
qml.CZ([16, 6])
qml.CZ([36, 25])
qml.CZ([9, 8])
qml.CZ([13, 12])
qml.CZ([22, 21])
qml.CZ([26, 25])
qml.CZ([29, 28])
qml.CZ([33, 32])
qml.CZ([42, 41])
qml.CZ([46, 45])
qml.CNOT([11, 1])
qml.CNOT([15, 4])
qml.CNOT([20, 7])
qml.CNOT([24, 10])
qml.CNOT([31, 19])
qml.CNOT([35, 23])
qml.CNOT([40, 27])
qml.CNOT([44, 30])
qml.CNOT([47, 39])
qml.CNOT([48, 43])
qml.CZ([18, 17])
qml.CZ([38, 37])
qml.CZ([9, 1])
qml.CZ([13, 4])
qml.CZ([22, 10])
qml.CZ([26, 14])
qml.CZ([29, 19])
qml.CZ([33, 23])
qml.CZ([42, 30])
qml.CZ([46, 34])
qml.CNOT([11, 3])
qml.CNOT([15, 6])
qml.CNOT([20, 8])
qml.CNOT([24, 12])
qml.CNOT([31, 21])
qml.CNOT([35, 25])
qml.CNOT([40, 28])
qml.CNOT([44, 32])
qml.CNOT([47, 41])
qml.CNOT([48, 45])
qml.CZ([18, 7])
qml.CZ([38, 27])
qml.Hadamard([9])
qml.Hadamard([13])
qml.Hadamard([22])
qml.Hadamard([26])
qml.Hadamard([29])
qml.Hadamard([33])
qml.Hadamard([42])
qml.Hadamard([46])
qml.Hadamard([11])
qml.Hadamard([15])
qml.Hadamard([20])
qml.Hadamard([24])
qml.Hadamard([31])
qml.Hadamard([35])
qml.Hadamard([40])
qml.Hadamard([44])
qml.Hadamard([2])
qml.Hadamard([5])
qml.Hadamard([47])
qml.Hadamard([48])
qml.Hadamard([18])
qml.Hadamard([38])
qml.Hadamard([16])
qml.Hadamard([36])
measurements["c_(1, 1, 1)_0"] = catalyst_measure(9)
measurements["c_(1, 3, 1)_0"] = catalyst_measure(13)
measurements["c_(2, 2, 1)_0"] = catalyst_measure(22)
measurements["c_(2, 4, 1)_0"] = catalyst_measure(26)
measurements["c_(3, 1, 1)_0"] = catalyst_measure(29)
measurements["c_(3, 3, 1)_0"] = catalyst_measure(33)
measurements["c_(4, 2, 1)_0"] = catalyst_measure(42)
measurements["c_(4, 4, 1)_0"] = catalyst_measure(46)
measurements["c_(1, 2, 1)_0"] = catalyst_measure(11)
measurements["c_(1, 4, 1)_0"] = catalyst_measure(15)
measurements["c_(2, 1, 1)_0"] = catalyst_measure(20)
measurements["c_(2, 3, 1)_0"] = catalyst_measure(24)
measurements["c_(3, 2, 1)_0"] = catalyst_measure(31)
measurements["c_(3, 4, 1)_0"] = catalyst_measure(35)
measurements["c_(4, 1, 1)_0"] = catalyst_measure(40)
measurements["c_(4, 3, 1)_0"] = catalyst_measure(44)
measurements["c_(0, 1, 1)_0"] = catalyst_measure(2)
measurements["c_(0, 3, 1)_0"] = catalyst_measure(5)
measurements["c_(5, 2, 1)_0"] = catalyst_measure(47)
measurements["c_(5, 4, 1)_0"] = catalyst_measure(48)
measurements["c_(2, 0, 1)_0"] = catalyst_measure(18)
measurements["c_(4, 0, 1)_0"] = catalyst_measure(38)
measurements["c_(1, 5, 1)_0"] = catalyst_measure(16)
measurements["c_(3, 5, 1)_0"] = catalyst_measure(36)
# End of circuit: measure q1 syndromes - cycle 0
# End of circuit: measure q1 syndromes 1 time(s)
# End of circuit: inject t into block q1 and measure syndromes
# Start of circuit: measure q1 syndromes 1 time(s)
# Start of circuit: measure q1 syndromes - cycle 0
catalyst_measure(9, reset=True)
catalyst_measure(13, reset=True)
catalyst_measure(22, reset=True)
catalyst_measure(26, reset=True)
catalyst_measure(29, reset=True)
catalyst_measure(33, reset=True)
catalyst_measure(42, reset=True)
catalyst_measure(46, reset=True)
catalyst_measure(11, reset=True)
catalyst_measure(15, reset=True)
catalyst_measure(20, reset=True)
catalyst_measure(24, reset=True)
catalyst_measure(31, reset=True)
catalyst_measure(35, reset=True)
catalyst_measure(40, reset=True)
catalyst_measure(44, reset=True)
catalyst_measure(2, reset=True)
catalyst_measure(5, reset=True)
catalyst_measure(47, reset=True)
catalyst_measure(48, reset=True)
catalyst_measure(18, reset=True)
catalyst_measure(38, reset=True)
catalyst_measure(16, reset=True)
catalyst_measure(36, reset=True)
qml.Hadamard([9])
qml.Hadamard([13])
qml.Hadamard([22])
qml.Hadamard([26])
qml.Hadamard([29])
qml.Hadamard([33])
qml.Hadamard([42])
qml.Hadamard([46])
qml.Hadamard([11])
qml.Hadamard([15])
qml.Hadamard([20])
qml.Hadamard([24])
qml.Hadamard([31])
qml.Hadamard([35])
qml.Hadamard([40])
qml.Hadamard([44])
qml.Hadamard([2])
qml.Hadamard([5])
qml.Hadamard([47])
qml.Hadamard([48])
qml.Hadamard([18])
qml.Hadamard([38])
qml.Hadamard([16])
qml.Hadamard([36])
qml.CZ([9, 7])
qml.CZ([13, 10])
qml.CZ([22, 19])
qml.CZ([26, 23])
qml.CZ([29, 27])
qml.CZ([33, 30])
qml.CZ([42, 39])
qml.CZ([46, 43])
qml.CNOT([11, 8])
qml.CNOT([15, 12])
qml.CNOT([20, 17])
qml.CNOT([24, 21])
qml.CNOT([31, 28])
qml.CNOT([35, 32])
qml.CNOT([40, 37])
qml.CNOT([44, 41])
qml.CNOT([2, 0])
qml.CNOT([5, 3])
qml.CZ([16, 14])
qml.CZ([36, 34])
qml.CZ([9, 0])
qml.CZ([13, 3])
qml.CZ([22, 8])
qml.CZ([26, 12])
qml.CZ([29, 17])
qml.CZ([33, 21])
qml.CZ([42, 28])
qml.CZ([46, 32])
qml.CNOT([11, 10])
qml.CNOT([15, 14])
qml.CNOT([20, 19])
qml.CNOT([24, 23])
qml.CNOT([31, 30])
qml.CNOT([35, 34])
qml.CNOT([40, 39])
qml.CNOT([44, 43])
qml.CNOT([2, 1])
qml.CNOT([5, 4])
qml.CZ([16, 6])
qml.CZ([36, 25])
qml.CZ([9, 8])
qml.CZ([13, 12])
qml.CZ([22, 21])
qml.CZ([26, 25])
qml.CZ([29, 28])
qml.CZ([33, 32])
qml.CZ([42, 41])
qml.CZ([46, 45])
qml.CNOT([11, 1])
qml.CNOT([15, 4])
qml.CNOT([20, 7])
qml.CNOT([24, 10])
qml.CNOT([31, 19])
qml.CNOT([35, 23])
qml.CNOT([40, 27])
qml.CNOT([44, 30])
qml.CNOT([47, 39])
qml.CNOT([48, 43])
qml.CZ([18, 17])
qml.CZ([38, 37])
qml.CZ([9, 1])
qml.CZ([13, 4])
qml.CZ([22, 10])
qml.CZ([26, 14])
qml.CZ([29, 19])
qml.CZ([33, 23])
qml.CZ([42, 30])
qml.CZ([46, 34])
qml.CNOT([11, 3])
qml.CNOT([15, 6])
qml.CNOT([20, 8])
qml.CNOT([24, 12])
qml.CNOT([31, 21])
qml.CNOT([35, 25])
qml.CNOT([40, 28])
qml.CNOT([44, 32])
qml.CNOT([47, 41])
qml.CNOT([48, 45])
qml.CZ([18, 7])
qml.CZ([38, 27])
qml.Hadamard([9])
qml.Hadamard([13])
qml.Hadamard([22])
qml.Hadamard([26])
qml.Hadamard([29])
qml.Hadamard([33])
qml.Hadamard([42])
qml.Hadamard([46])
qml.Hadamard([11])
qml.Hadamard([15])
qml.Hadamard([20])
qml.Hadamard([24])
qml.Hadamard([31])
qml.Hadamard([35])
qml.Hadamard([40])
qml.Hadamard([44])
qml.Hadamard([2])
qml.Hadamard([5])
qml.Hadamard([47])
qml.Hadamard([48])
qml.Hadamard([18])
qml.Hadamard([38])
qml.Hadamard([16])
qml.Hadamard([36])
measurements["c_(1, 1, 1)_1"] = catalyst_measure(9)
measurements["c_(1, 3, 1)_1"] = catalyst_measure(13)
measurements["c_(2, 2, 1)_1"] = catalyst_measure(22)
measurements["c_(2, 4, 1)_1"] = catalyst_measure(26)
measurements["c_(3, 1, 1)_1"] = catalyst_measure(29)
measurements["c_(3, 3, 1)_1"] = catalyst_measure(33)
measurements["c_(4, 2, 1)_1"] = catalyst_measure(42)
measurements["c_(4, 4, 1)_1"] = catalyst_measure(46)
measurements["c_(1, 2, 1)_1"] = catalyst_measure(11)
measurements["c_(1, 4, 1)_1"] = catalyst_measure(15)
measurements["c_(2, 1, 1)_1"] = catalyst_measure(20)
measurements["c_(2, 3, 1)_1"] = catalyst_measure(24)
measurements["c_(3, 2, 1)_1"] = catalyst_measure(31)
measurements["c_(3, 4, 1)_1"] = catalyst_measure(35)
measurements["c_(4, 1, 1)_1"] = catalyst_measure(40)
measurements["c_(4, 3, 1)_1"] = catalyst_measure(44)
measurements["c_(0, 1, 1)_1"] = catalyst_measure(2)
measurements["c_(0, 3, 1)_1"] = catalyst_measure(5)
measurements["c_(5, 2, 1)_1"] = catalyst_measure(47)
measurements["c_(5, 4, 1)_1"] = catalyst_measure(48)
measurements["c_(2, 0, 1)_1"] = catalyst_measure(18)
measurements["c_(4, 0, 1)_1"] = catalyst_measure(38)
measurements["c_(1, 5, 1)_1"] = catalyst_measure(16)
measurements["c_(3, 5, 1)_1"] = catalyst_measure(36)
# End of circuit: measure q1 syndromes - cycle 0
# End of circuit: measure q1 syndromes 1 time(s)
# Start of circuit: measure logical x of q1
qml.Hadamard([0])
qml.Hadamard([1])
qml.Hadamard([3])
qml.Hadamard([4])
qml.Hadamard([6])
qml.Hadamard([7])
qml.Hadamard([8])
qml.Hadamard([10])
qml.Hadamard([12])
qml.Hadamard([14])
qml.Hadamard([17])
qml.Hadamard([19])
qml.Hadamard([21])
qml.Hadamard([23])
qml.Hadamard([25])
qml.Hadamard([27])
qml.Hadamard([28])
qml.Hadamard([30])
qml.Hadamard([32])
qml.Hadamard([34])
qml.Hadamard([37])
qml.Hadamard([39])
qml.Hadamard([41])
qml.Hadamard([43])
qml.Hadamard([45])
measurements["c_(0, 0, 0)_0"] = catalyst_measure(0)
measurements["c_(0, 1, 0)_0"] = catalyst_measure(1)
measurements["c_(0, 2, 0)_0"] = catalyst_measure(3)
measurements["c_(0, 3, 0)_0"] = catalyst_measure(4)
measurements["c_(0, 4, 0)_0"] = catalyst_measure(6)
measurements["c_(1, 0, 0)_0"] = catalyst_measure(7)
measurements["c_(1, 1, 0)_0"] = catalyst_measure(8)
measurements["c_(1, 2, 0)_0"] = catalyst_measure(10)
measurements["c_(1, 3, 0)_0"] = catalyst_measure(12)
measurements["c_(1, 4, 0)_0"] = catalyst_measure(14)
measurements["c_(2, 0, 0)_0"] = catalyst_measure(17)
measurements["c_(2, 1, 0)_0"] = catalyst_measure(19)
measurements["c_(2, 2, 0)_0"] = catalyst_measure(21)
measurements["c_(2, 3, 0)_0"] = catalyst_measure(23)
measurements["c_(2, 4, 0)_0"] = catalyst_measure(25)
measurements["c_(3, 0, 0)_0"] = catalyst_measure(27)
measurements["c_(3, 1, 0)_0"] = catalyst_measure(28)
measurements["c_(3, 2, 0)_0"] = catalyst_measure(30)
measurements["c_(3, 3, 0)_0"] = catalyst_measure(32)
measurements["c_(3, 4, 0)_0"] = catalyst_measure(34)
measurements["c_(4, 0, 0)_0"] = catalyst_measure(37)
measurements["c_(4, 1, 0)_0"] = catalyst_measure(39)
measurements["c_(4, 2, 0)_0"] = catalyst_measure(41)
measurements["c_(4, 3, 0)_0"] = catalyst_measure(43)
measurements["c_(4, 4, 0)_0"] = catalyst_measure(45)
# End of circuit: measure logical x of q1
# End of circuit: final circuit
return measurements
else:
pl_main = None
if not dry_run:
with with_alarm(timeout or float("inf")):
pl_main.compile()
times = []
measurements = []
print("Running", end="")
for _ in range(nattempts):
begin = time.time()
shot_results = []
if not dry_run:
with with_alarm(timeout or float("inf")):
raw = pl_main()
per_key_lists = {
k: v.astype(int).tolist() for k, v in raw.items()
}
nshots = (
len(next(iter(per_key_lists.values())))
if per_key_lists else 0
)
for i in range(nshots):
shot_results.append({
k: vals[i] for k, vals in per_key_lists.items()
})
end = time.time()
times.append(end - begin)
measurements.append(shot_results)
with open("running_times.json", "w") as f:
json.dump(times, f)
with open("measurements.json", "w") as f:
json.dump(measurements, f)
print(f", t={times[-1]}", end="", flush=True)
print(" (dry-run)" if dry_run else "")
if not dry_run:
dump_logical_observables(measurements)
Could you please advise me on running a 49qubit logical T+ circuit in the tensornetwork mode? The code below emits the
QUnit fidelity estimate is effectively 0!warning and it is poor indeed if the fidelity guard is disabled.A similar program for the distance 3 code shows correct results and nice timings in this mode, so I am very interested in making running a larger version too. Please let me know what can I try.
Package versions are:
pennylane 0.43.1,pennylane_catalyst 0.13.0,pennylane_qrack 0.25.0(compiled from source), isTensorNetwork flag is enabled.The full runnable program: