Пример #1
0
 def test_densitymatrix(self):
     # should raise an exception for non unit trace matrices
     with self.assertRaises(TypeError):
         densitymatrix(2 * self.rho.matrix, self.subsystems)
         # GHZ state is not PPT
     self.assertEqual(False, densitymatrix(self.ghz, self.subsystems).ppt([0]))
     # Separable state is PPT
     self.assertEqual(True, densitymatrix(self.sep, self.subsystems).ppt([0]))
     # make sure negativity is properly calculated
     self.assertAlmostEqual(0.5, densitymatrix(self.ghz, self.subsystems).negativity([0]))
     self.assertEqual(self.neg, self.rho.negativity([0]))
Пример #2
0
 def setUp(self):
     self.subsystems = [2, 2, 2]
     M = random.randn(8, 8) + 1.0j * random.randn(8, 8)
     rho = numpy.dot(M.conjugate().transpose(), M)
     rho /= numpy.trace(rho)
     self.rho = densitymatrix(rho, self.subsystems)
     ptrho = numpy.zeros((8, 8), dtype=numpy.complex128)
     ptrho[:4, :4] = rho[:4, :4]
     ptrho[4:, 4:] = rho[4:, 4:]
     ptrho[:4, 4:] = rho[4:, :4]
     ptrho[4:, :4] = rho[:4, 4:]
     ev = numpy.linalg.eigvalsh(ptrho)
     self.neg = numpy.sum(numpy.absolute(ev[ev < 0]))
     self.ghz = [
         [1.0 / 2, 0, 0, 0, 0, 0, 0, 1.0 / 2],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [1.0 / 2, 0, 0, 0, 0, 0, 0, 1.0 / 2],
     ]
     self.sep = [
         [1.0 / 2, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 1.0 / 2],
     ]
def randstate(minweight):
	psi = numpy.random.randn(dim) + 1.j*numpy.random.randn(dim)
	p = minweight*numpy.random.rand(1)
	rhopure = numpy.outer(psi.conjugate(),psi)
	rhopure /= numpy.trace(rhopure)
	return densitymatrix((1-p)*rhopure + p*rhomixed.random(),subsystems)