Exemple #1
0
def test_kraus_qubits() -> None:
    kraus = qf.Kraus([qf.X(1), qf.Y(0)])
    assert kraus.qubits == (0, 1)

    kraus = qf.Kraus([qf.X("a"), qf.Y("b")])
    assert len(kraus.qubits) == 2
    assert kraus.qubit_nb == 2
Exemple #2
0
def test_kraus_qubits():
    kraus = qf.Kraus([qf.X(1), qf.Y(0)])
    assert kraus.qubits == (0, 1)

    kraus = qf.Kraus([qf.X('a'), qf.Y('b')])
    assert len(kraus.qubits) == 2
    assert kraus.qubit_nb == 2
Exemple #3
0
def test_measurement():
    rho = qf.zero_state(2).asdensity()
    chan = qf.H(0).aschannel()
    rho = chan.evolve(rho)
    rho = qf.Kraus([qf.P0(0), qf.P1(0)]).aschannel().evolve(rho)
    K = qf.Kraus([qf.P0(1), qf.P1(1)])
    chan = K.aschannel()

    rho = qf.Kraus([qf.P0(1), qf.P1(1)]).aschannel().evolve(rho)
    prob = qf.asarray(rho.probabilities())
    assert np.allclose(prob, [[0.5, 0], [0.5, 0]])
    assert prob[0, 0] * 2 == ALMOST_ONE
    assert prob[1, 0] * 2 == ALMOST_ONE
Exemple #4
0
def test_measurement() -> None:
    rho = qf.zero_state(2).asdensity()
    chan = qf.H(0).aschannel()
    rho = chan.evolve(rho)
    rho = qf.Kraus([qf.P0(0), qf.P1(0)]).aschannel().evolve(rho)
    K = qf.Kraus([qf.P0(1), qf.P1(1)])
    _ = K.aschannel()

    rho = qf.Kraus([qf.P0(1), qf.P1(1)]).aschannel().evolve(rho)
    prob = rho.probabilities()
    assert np.allclose(prob, [[0.5, 0], [0.5, 0]])
    assert np.isclose(prob[0, 0] * 2, 1.0)
    assert np.isclose(prob[1, 0] * 2, 1.0)
Exemple #5
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))
Exemple #6
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))
Exemple #7
0
def test_transpose_map():
    # The transpose map is a superoperator that transposes a 1-qubit
    # density matrix. Not physical.
    # quant-ph/0202124

    ops = [
        qf.Gate(np.asarray([[1, 0], [0, 0]])),
        qf.Gate(np.asarray([[0, 0], [0, 1]])),
        qf.Gate(np.asarray([[0, 1], [1, 0]]) / np.sqrt(2)),
        qf.Gate(np.asarray([[0, 1], [-1, 0]]) / np.sqrt(2))
    ]

    kraus = qf.Kraus(ops, weights=(1, 1, 1, -1))
    rho0 = qf.random_density(1)
    rho1 = kraus.evolve(rho0)

    op0 = qf.asarray(rho0.asoperator())
    op1 = qf.asarray(rho1.asoperator())
    assert np.allclose(op0.T, op1)

    # The Choi matrix should be same as SWAP operator
    choi = kraus.aschannel().choi()
    choi = qf.asarray(choi)
    assert np.allclose(choi, qf.asarray(qf.SWAP(0, 2).asoperator()))
Exemple #8
0
def test_transpose_map() -> None:
    # The transpose map is a superoperator that transposes a 1-qubit
    # density matrix. Not physical.
    # quant-ph/0202124

    q0 = 0
    ops = [
        qf.Unitary(np.asarray([[1, 0], [0, 0]]), [q0]),
        qf.Unitary(np.asarray([[0, 0], [0, 1]]), [q0]),
        qf.Unitary(np.asarray([[0, 1], [1, 0]]) / np.sqrt(2), [q0]),
        qf.Unitary(np.asarray([[0, 1], [-1, 0]]) / np.sqrt(2), [q0]),
    ]

    kraus = qf.Kraus(ops, weights=(1, 1, 1, -1))
    rho0 = qf.random_density(1)
    rho1 = kraus.evolve(rho0)

    op0 = rho0.asoperator()
    op1 = rho1.asoperator()
    assert np.allclose(op0.T, op1)

    # The Choi matrix should be same as Swap operator
    choi = kraus.aschannel().choi()
    assert np.allclose(choi, qf.Swap(0, 2).asoperator())
Exemple #9
0
def test_kraus_errors():
    kraus = qf.Kraus([qf.X(1), qf.Y(0)])

    with pytest.raises(TypeError):
        kraus.asgate()
Exemple #10
0
def test_chan_qubits():
    chan = qf.Kraus([qf.X(1), qf.Y(0)]).aschannel()
    assert chan.qubits == (0, 1)
    assert chan.qubit_nb == 2
Exemple #11
0
def test_kruas_qubits():
    rho = qf.Kraus([qf.P0(0), qf.P1(1)])
    assert rho.qubits == (0, 1)
    assert rho.qubit_nb == 2