def test_kraus_complete(): kraus = qf.Kraus([qf.X(1)]) assert qf.kraus_iscomplete(kraus) kraus = qf.Damping(0.1, 0) assert qf.kraus_iscomplete(kraus) assert qf.kraus_iscomplete(qf.Damping(0.1, 0)) assert qf.kraus_iscomplete(qf.Dephasing(0.1, 0)) assert qf.kraus_iscomplete(qf.Depolarizing(0.1, 0))
def test_channel_adjoint(): kraus0 = qf.Damping(0.1, 0) chan0 = kraus0.aschannel() chan1 = chan0.H.H assert qf.channels_close(chan0, chan1) chan2 = kraus0.H.aschannel() assert qf.channels_close(chan2, chan0.H) # 2 qubit hermitian channel chan3 = qf.CZ(0, 1).aschannel() chan4 = chan3.H assert qf.channels_close(chan3, chan4)
def test_amplitude_damping(): rho = qf.zero_state(1).asdensity() p = 1.0 - np.exp(-(50) / 15000) chan = qf.Damping(p, 0).aschannel() rho1 = chan.evolve(rho) assert qf.densities_close(rho, rho1) rho2 = qf.X(0).aschannel().evolve(rho1) rho3 = chan.evolve(rho2) expected = qf.Density([[0.00332778 + 0.j, 0.00000000 + 0.j], [0.00000000 + 0.j, 0.99667222 + 0.j]]) assert qf.densities_close(expected, rho3)
def test_kraus_evolve(): rho = qf.zero_state(1).asdensity() p = 1 - np.exp(-50 / 15000) kraus = qf.Damping(p, 0) rho1 = kraus.evolve(rho) assert qf.densities_close(rho, rho1) rho2 = qf.X(0).aschannel().evolve(rho1) rho3 = kraus.evolve(rho2) expected = qf.Density([[0.00332778 + 0.j, 0.00000000 + 0.j], [0.00000000 + 0.j, 0.99667222 + 0.j]]) assert qf.densities_close(expected, rho3)
def test_askraus(): def _roundtrip(kraus): assert qf.kraus_iscomplete(kraus) chan0 = kraus.aschannel() kraus1 = qf.channel_to_kraus(chan0) assert qf.kraus_iscomplete(kraus1) chan1 = kraus1.aschannel() assert qf.channels_close(chan0, chan1) p = 1 - np.exp(-50 / 15000) _roundtrip(qf.Kraus([qf.X(1)])) _roundtrip(qf.Damping(p, 0)) _roundtrip(qf.Depolarizing(0.9, 1))
def test_kraus_run(): ket0 = qf.zero_state(['a']) ket0 = qf.X('a').run(ket0) p = 1.0 - np.exp(-2000 / 15000) kraus = qf.Damping(p, 'a') reps = 1000 results = [kraus.run(ket0).asdensity().asoperator() for _ in range(reps)] matrix = reduce(add, results) / reps rho_kraus = qf.Density(matrix, ['a']) rho0 = ket0.asdensity() chan = kraus.aschannel() rho_chan = chan.evolve(rho0) # If this fails occasionally consider increasing tolerance # Can't be very tolerant due to stochastic dynamics assert qf.densities_close(rho_chan, rho_kraus, tolerance=0.05)
def test_stdchannels_creation(): qf.Damping(0.1, 0).aschannel() qf.Depolarizing(0.1, 0).aschannel() qf.Dephasing(0.1, 0).aschannel()
def test_stdkraus_creation(): qf.Damping(0.1, 0) qf.Depolarizing(0.1, 0) qf.Dephasing(0.1, 0)
def test_channle_choi() -> None: chan0 = qf.Damping(0.1, 0).aschannel() choi = chan0.choi() chan1 = qf.Channel.from_choi(choi, [0]) assert qf.channels_close(chan0, chan1)
def test_average_gate_fidelity() -> None: kraus = qf.Damping(0.9, q0=0) qf.average_gate_fidelity(kraus) qf.average_gate_fidelity(kraus, qf.X(0))