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)
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])
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])
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)
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()
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)
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)
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
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
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_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)