def test_BBPSSW_success_rate(): tl = Timeline() a1 = FakeNode("a1", tl) a2 = FakeNode("a2", tl) cc0 = ClassicalChannel("cc0", tl, 0, 1e5) cc1 = ClassicalChannel("cc1", tl, 0, 1e5) cc0.delay = ONE_MILLISECOND cc1.delay = ONE_MILLISECOND cc0.set_ends(a1, a2) cc1.set_ends(a2, a1) tl.init() counter1 = counter2 = 0 fidelity = 0.8 for i in range(1000): kept_memo1 = Memory("a1.kept", tl, fidelity=fidelity, frequency=0, efficiency=1, coherence_time=1, wavelength=HALF_MICRON) kept_memo2 = Memory("a2.kept", tl, fidelity, 0, 1, 1, HALF_MICRON) meas_memo1 = Memory("a1.meas", tl, fidelity, 0, 1, 1, HALF_MICRON) meas_memo2 = Memory("a2.meas", tl, fidelity, 0, 1, 1, HALF_MICRON) kept_memo1.entangled_memory["node_id"] = "a2" kept_memo1.entangled_memory["memo_id"] = "a2.kept" kept_memo1.fidelity = fidelity kept_memo2.entangled_memory["node_id"] = "a1" kept_memo2.entangled_memory["memo_id"] = "a1.kept" kept_memo2.fidelity = fidelity meas_memo1.entangled_memory["node_id"] = "a2" meas_memo1.entangled_memory["memo_id"] = "a2.meas" meas_memo1.fidelity = fidelity meas_memo2.entangled_memory["node_id"] = "a1" meas_memo2.entangled_memory["memo_id"] = "a1.meas" meas_memo2.fidelity = fidelity pair1 = np.random.choice(range(4), 1, p=[fidelity, (1 - fidelity) / 3, (1 - fidelity) / 3, (1 - fidelity) / 3]) pair2 = np.random.choice(range(4), 1, p=[fidelity, (1 - fidelity) / 3, (1 - fidelity) / 3, (1 - fidelity) / 3]) tl.quantum_manager.set([kept_memo1.qstate_key, kept_memo2.qstate_key], BELL_STATES[pair1[0]]) tl.quantum_manager.set([meas_memo1.qstate_key, meas_memo2.qstate_key], BELL_STATES[pair2[0]]) ep1 = BBPSSW(a1, "a1.ep1.%d" % i, kept_memo1, meas_memo1) ep2 = BBPSSW(a2, "a2.ep2.%d" % i, kept_memo2, meas_memo2) a1.protocols.append(ep1) a2.protocols.append(ep2) ep1.set_others(ep2) ep2.set_others(ep1) ep1.start() ep2.start() if ep1.meas_res == ep2.meas_res: counter1 += 1 else: counter2 += 1 tl.run() assert abs(counter1 / (counter1 + counter2) - BBPSSW.success_probability(fidelity)) < 0.1
def test_BBPSSW2(): tl = Timeline() a1 = FakeNode("a1", tl) a2 = FakeNode("a2", tl) cc = ClassicalChannel("cc", tl, 0, 1e5) cc.delay = 1e9 cc.set_ends(a1, a2) tl.init() counter1 = counter2 = 0 fidelity = 0.8 for i in range(1000): kept_memo1 = Memory("a1.kept", tl, fidelity=fidelity, frequency=0, efficiency=1, coherence_time=1, wavelength=500) kept_memo2 = Memory("a2.kept", tl, fidelity, 0, 1, 1, 500) meas_memo1 = Memory("a1.meas", tl, fidelity, 0, 1, 1, 500) meas_memo2 = Memory("a2.meas", tl, fidelity, 0, 1, 1, 500) kept_memo1.entangled_memory["node_id"] = "a2" kept_memo1.entangled_memory["memo_id"] = "a2.kept" kept_memo1.fidelity = fidelity kept_memo2.entangled_memory["node_id"] = "a1" kept_memo2.entangled_memory["memo_id"] = "a1.kept" kept_memo2.fidelity = fidelity meas_memo1.entangled_memory["node_id"] = "a2" meas_memo1.entangled_memory["memo_id"] = "a2.meas" meas_memo1.fidelity = fidelity meas_memo2.entangled_memory["node_id"] = "a1" meas_memo2.entangled_memory["memo_id"] = "a1.meas" meas_memo2.fidelity = fidelity ep1 = BBPSSW(a1, "a1.ep1.%d" % i, kept_memo1, meas_memo1) ep2 = BBPSSW(a2, "a2.ep2.%d" % i, kept_memo2, meas_memo2) a1.protocols.append(ep1) a2.protocols.append(ep2) ep1.set_others(ep2) ep2.set_others(ep1) ep1.start() ep2.start() assert ep1.is_success == ep2.is_success if ep1.is_success: counter1 += 1 else: counter2 += 1 tl.run() assert abs(counter1 / (counter1 + counter2) - BBPSSW.success_probability(fidelity)) < 0.1
def create_scenario(state1, state2, seed): tl = Timeline() tl.seed(seed) a1 = FakeNode("a1", tl) a2 = FakeNode("a2", tl) cc0 = ClassicalChannel("cc0", tl, 0, 1e5) cc1 = ClassicalChannel("cc1", tl, 0, 1e5) cc0.delay = ONE_MILLISECOND cc1.delay = ONE_MILLISECOND cc0.set_ends(a1, a2) cc1.set_ends(a2, a1) kept1 = Memory('kept1', tl, fidelity=1, frequency=0, efficiency=1, coherence_time=1, wavelength=HALF_MICRON) kept2 = Memory('kept2', tl, fidelity=1, frequency=0, efficiency=1, coherence_time=1, wavelength=HALF_MICRON) meas1 = Memory('mea1', tl, fidelity=1, frequency=0, efficiency=1, coherence_time=1, wavelength=HALF_MICRON) meas2 = Memory('mea2', tl, fidelity=1, frequency=0, efficiency=1, coherence_time=1, wavelength=HALF_MICRON) tl.init() tl.quantum_manager.set([kept1.qstate_key, kept2.qstate_key], state1) tl.quantum_manager.set([meas1.qstate_key, meas2.qstate_key], state2) kept1.entangled_memory = {'node_id': 'a2', 'memo_id': 'kept2'} kept2.entangled_memory = {'node_id': 'a1', 'memo_id': 'kept1'} meas1.entangled_memory = {'node_id': 'a2', 'memo_id': 'meas2'} meas2.entangled_memory = {'node_id': 'a1', 'memo_id': 'meas1'} kept1.fidelity = kept2.fidelity = meas1.fidelity = meas2.fidelity = 1 ep1 = BBPSSW(a1, "a1.ep1", kept1, meas1) ep2 = BBPSSW(a2, "a2.ep2", kept2, meas2) a1.protocols.append(ep1) a2.protocols.append(ep2) ep1.set_others(ep2) ep2.set_others(ep1) ep1.start() ep2.start() tl.run() assert meas1.entangled_memory == meas2.entangled_memory == {'node_id': None, 'memo_id': None} return tl, kept1, kept2, meas1, meas2, ep1, ep2
def test_BBPSSW1(): tl = Timeline() a1 = FakeNode("a1", tl) a2 = FakeNode("a2", tl) cc = ClassicalChannel("cc", tl, 0, 1e5) cc.delay = 1e9 cc.set_ends(a1, a2) tl.init() for i in range(1000): fidelity = numpy.random.uniform(0.5, 1) kept_memo1 = Memory("a1.kept", tl, fidelity=fidelity, frequency=0, efficiency=1, coherence_time=1, wavelength=500) kept_memo2 = Memory("a2.kept", tl, fidelity, 0, 1, 1, 500) meas_memo1 = Memory("a1.meas", tl, fidelity, 0, 1, 1, 500) meas_memo2 = Memory("a2.meas", tl, fidelity, 0, 1, 1, 500) kept_memo1.entangled_memory["node_id"] = "a2" kept_memo1.entangled_memory["memo_id"] = "a2.kept" kept_memo1.fidelity = fidelity kept_memo2.entangled_memory["node_id"] = "a1" kept_memo2.entangled_memory["memo_id"] = "a1.kept" kept_memo2.fidelity = fidelity meas_memo1.entangled_memory["node_id"] = "a2" meas_memo1.entangled_memory["memo_id"] = "a2.meas" meas_memo1.fidelity = fidelity meas_memo2.entangled_memory["node_id"] = "a1" meas_memo2.entangled_memory["memo_id"] = "a1.meas" meas_memo2.fidelity = fidelity ep1 = BBPSSW(a1, "a1.ep1.%d" % i, kept_memo1, meas_memo1) ep2 = BBPSSW(a2, "a2.ep2.%d" % i, kept_memo2, meas_memo2) a1.protocols.append(ep1) a2.protocols.append(ep2) ep1.set_others(ep2) ep2.set_others(ep1) ep1.start() ep2.start() assert ep1.is_success == ep2.is_success tl.run() assert a1.resource_manager.log[-2] == (meas_memo1, "RAW") assert a2.resource_manager.log[-2] == (meas_memo2, "RAW") assert meas_memo1.fidelity == meas_memo2.fidelity == 0 if ep1.is_success: assert kept_memo1.fidelity == kept_memo2.fidelity == BBPSSW.improved_fidelity( fidelity) assert kept_memo1.entangled_memory[ "node_id"] == "a2" and kept_memo2.entangled_memory[ "node_id"] == "a1" assert a1.resource_manager.log[-1] == (kept_memo1, "ENTANGLED") assert a2.resource_manager.log[-1] == (kept_memo2, "ENTANGLED") else: assert kept_memo1.fidelity == kept_memo2.fidelity == 0 assert kept_memo1.entangled_memory[ "node_id"] == kept_memo2.entangled_memory["node_id"] == None assert a1.resource_manager.log[-1] == (kept_memo1, "RAW") assert a2.resource_manager.log[-1] == (kept_memo2, "RAW")
def test_BBPSSW_fidelity(): tl = Timeline() a1 = FakeNode("a1", tl) a2 = FakeNode("a2", tl) cc0 = ClassicalChannel("cc0", tl, 0, 1e5) cc1 = ClassicalChannel("cc1", tl, 0, 1e5) cc0.delay = ONE_MILLISECOND cc1.delay = ONE_MILLISECOND cc0.set_ends(a1, a2) cc1.set_ends(a2, a1) tl.init() for i in range(1000): fidelity = np.random.uniform(0.5, 1) kept_memo1 = Memory("a1.kept", tl, fidelity=fidelity, frequency=0, efficiency=1, coherence_time=1, wavelength=HALF_MICRON) kept_memo2 = Memory("a2.kept", tl, fidelity, 0, 1, 1, HALF_MICRON) meas_memo1 = Memory("a1.meas", tl, fidelity, 0, 1, 1, HALF_MICRON) meas_memo2 = Memory("a2.meas", tl, fidelity, 0, 1, 1, HALF_MICRON) kept_memo1.entangled_memory["node_id"] = "a2" kept_memo1.entangled_memory["memo_id"] = "a2.kept" kept_memo1.fidelity = fidelity kept_memo2.entangled_memory["node_id"] = "a1" kept_memo2.entangled_memory["memo_id"] = "a1.kept" kept_memo2.fidelity = fidelity meas_memo1.entangled_memory["node_id"] = "a2" meas_memo1.entangled_memory["memo_id"] = "a2.meas" meas_memo1.fidelity = fidelity meas_memo2.entangled_memory["node_id"] = "a1" meas_memo2.entangled_memory["memo_id"] = "a1.meas" meas_memo2.fidelity = fidelity pair1 = np.random.choice(range(4), 1, p=[fidelity, (1 - fidelity) / 3, (1 - fidelity) / 3, (1 - fidelity) / 3]) pair2 = np.random.choice(range(4), 1, p=[fidelity, (1 - fidelity) / 3, (1 - fidelity) / 3, (1 - fidelity) / 3]) tl.quantum_manager.set([kept_memo1.qstate_key, kept_memo2.qstate_key], BELL_STATES[pair1[0]]) tl.quantum_manager.set([meas_memo1.qstate_key, meas_memo2.qstate_key], BELL_STATES[pair2[0]]) ep1 = BBPSSW(a1, "a1.ep1.%d" % i, kept_memo1, meas_memo1) ep2 = BBPSSW(a2, "a2.ep2.%d" % i, kept_memo2, meas_memo2) a1.protocols.append(ep1) a2.protocols.append(ep2) ep1.set_others(ep2) ep2.set_others(ep1) ep1.start() ep2.start() tl.run() assert a1.resource_manager.log[-2] == (meas_memo1, RAW) assert a2.resource_manager.log[-2] == (meas_memo2, RAW) assert meas_memo1.fidelity == meas_memo2.fidelity == 0 if ep1.meas_res == ep2.meas_res: assert kept_memo1.fidelity == kept_memo2.fidelity == BBPSSW.improved_fidelity(fidelity) assert kept_memo1.entangled_memory["node_id"] == "a2" and kept_memo2.entangled_memory["node_id"] == "a1" assert a1.resource_manager.log[-1] == (kept_memo1, ENTANGLED) assert a2.resource_manager.log[-1] == (kept_memo2, ENTANGLED) else: assert kept_memo1.fidelity == kept_memo2.fidelity == 0 assert kept_memo1.entangled_memory["node_id"] == kept_memo2.entangled_memory["node_id"] == None assert a1.resource_manager.log[-1] == (kept_memo1, RAW) assert a2.resource_manager.log[-1] == (kept_memo2, RAW)