Example #1
0
def test_depolarizing() -> None:
    p = 1.0 - np.exp(-1 / 20)

    chan = qf.Depolarizing(p, 0).aschannel()
    rho0 = qf.Density([[0.5, 0], [0, 0.5]])
    assert qf.densities_close(rho0, chan.evolve(rho0))

    rho0 = qf.random_density(1)
    rho1 = chan.evolve(rho0)
    pr0 = np.real(qf.purity(rho0))
    pr1 = np.real(qf.purity(rho1))
    assert pr0 > pr1

    # Test data extracted from refereneqvm
    rho2 = qf.Density([[0.43328691, 0.48979689], [0.48979689, 0.56671309]])
    rho_test = qf.Density(
        [[0.43762509 + 0.0j, 0.45794666 + 0.0j], [0.45794666 + 0.0j, 0.56237491 + 0.0j]]
    )
    assert qf.densities_close(chan.evolve(rho2), rho_test)

    ket0 = qf.random_state(1)
    qf.Depolarizing(p, 0).run(ket0)

    rho1b = qf.Depolarizing(p, 0).evolve(rho0)
    assert qf.densities_close(rho1, rho1b)
Example #2
0
def test_density():
    ket = qf.random_state(3)
    matrix = bk.outer(ket.tensor, bk.conj(ket.tensor))
    qf.Density(matrix)
    qf.Density(matrix, [0, 1, 2])

    with pytest.raises(ValueError):
        qf.Density(matrix, [0, 1, 2, 3])
Example #3
0
def test_density() -> None:
    ket = qf.random_state(3)
    matrix = qf.tensors.outer(ket.tensor, np.conj(ket.tensor), rank=1)
    qf.Density(matrix)
    qf.Density(matrix, [0, 1, 2])

    with pytest.raises(ValueError):
        qf.Density(matrix, [0, 1, 2, 3])
Example #4
0
def test_density():
    ket = qf.random_state(3)
    matrix = bk.outer(ket.tensor, bk.conj(ket.tensor))
    qf.Density(matrix)
    rho = qf.Density(matrix, [0, 1, 2])

    with pytest.raises(ValueError):
        qf.Density(matrix, [0, 1, 2, 3])

    assert rho.asdensity() is rho

    rho = rho.relabel([10, 11, 12]).permute([12, 11, 10])
    assert rho.qubits == (12, 11, 10)
Example #5
0
def test_density() -> None:
    ket = qf.random_state(3)
    matrix = np.outer(ket.tensor, np.conj(ket.tensor))
    qf.Density(matrix)
    rho = qf.Density(matrix, [0, 1, 2])

    with pytest.raises(ValueError):
        qf.Density(matrix, [0, 1, 2, 3])

    assert rho.asdensity() is rho

    rho = rho.on(10, 11, 12).permute([12, 11, 10])
    assert rho.qubits == (12, 11, 10)

    rho.permute()
Example #6
0
def test_density_trace() -> None:
    rho = qf.random_density(3)
    assert np.isclose(rho.trace(), 1)

    rho = qf.Density(np.eye(8))
    assert np.isclose(rho.trace(), 8)

    rho = rho.normalize()
    assert np.isclose(rho.trace(), 1)
Example #7
0
def test_density_trace():
    rho = qf.random_density(3)
    assert qf.asarray(rho.trace()) == ALMOST_ONE

    rho = qf.Density(np.eye(8))
    assert np.isclose(qf.asarray(rho.trace()), 8)

    rho = rho.normalize()
    assert np.isclose(qf.asarray(rho.trace()), 1)
Example #8
0
def test_purity() -> None:
    density = qf.ghz_state(4).asdensity()
    assert np.isclose(qf.purity(density), 1.0)

    for _ in range(10):
        density = qf.random_density(4)
        purity = np.real(qf.purity(density))
        assert purity < 1.0
        assert purity >= 0.0

    rho = qf.Density(np.diag([0.9, 0.1]))
    assert np.isclose(qf.purity(rho), 0.82)  # Kudos: Josh Combs
Example #9
0
def test_purity():
    density = qf.ghz_state(4).asdensity()
    assert qf.asarray(qf.purity(density)) == ALMOST_ONE

    for _ in range(10):
        density = qf.random_density(4)
        purity = np.real(qf.asarray(qf.purity(density)))
        assert purity < 1.0
        assert purity >= 0.0

    rho = qf.Density(np.diag([0.9, 0.1]))
    assert np.isclose(qf.asarray(qf.purity(rho)), 0.82)   # Kudos: Josh Combes
Example #10
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)
Example #11
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)
Example #12
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)