Esempio n. 1
0
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))
Esempio n. 2
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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))
Esempio n. 6
0
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)
Esempio n. 7
0
def test_stdchannels_creation():
    qf.Damping(0.1, 0).aschannel()
    qf.Depolarizing(0.1, 0).aschannel()
    qf.Dephasing(0.1, 0).aschannel()
Esempio n. 8
0
def test_stdkraus_creation():
    qf.Damping(0.1, 0)
    qf.Depolarizing(0.1, 0)
    qf.Dephasing(0.1, 0)
Esempio n. 9
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)
Esempio n. 10
0
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))