Exemple #1
0
    def test_pow(self):
        t = tensor.Tensor([1.0, 1.0])
        self.assertLen(t.shape, 1)
        self.assertEqual(t.shape[0], 2)

        t0 = t**0.0
        self.assertEqual(t0, 1.0)

        t1 = t**1
        self.assertLen(t1.shape, 1)
        self.assertEqual(t1.shape[0], 2)

        t2 = t**2
        self.assertLen(t2.shape, 1)
        self.assertEqual(t2.shape[0], 4)

        m = tensor.Tensor([[1.0, 1.0], [1.0, 1.0]])
        self.assertLen(m.shape, 2)
        self.assertEqual(m.shape[0], 2)
        self.assertEqual(m.shape[1], 2)

        m0 = m**0.0
        self.assertEqual(m0, 1.0)

        m1 = m**1
        self.assertLen(m1.shape, 2)
        self.assertEqual(m1.shape[0], 2)
        self.assertEqual(m1.shape[1], 2)

        m2 = m**2
        self.assertLen(m2.shape, 2)
        self.assertEqual(m2.shape[0], 4)
        self.assertEqual(m2.shape[1], 4)
Exemple #2
0
def TraceOutSingle(rho, index):
    """Trace out single qubit from density matrix."""

    nbits = int(math.log2(rho.shape[0]))
    if index > nbits:
        raise AssertionError('Invalid use of Ptrace, invalid index (>nbits).')

    eye = Identity()
    zero = Operator(np.array([1.0, 0.0]))
    one = Operator(np.array([0.0, 1.0]))

    p0 = p1 = tensor.Tensor(1.0)
    for idx in range(nbits):
        if idx == index:
            p0 = p0 * zero
            p1 = p1 * one
        else:
            p0 = p0 * eye
            p1 = p1 * eye

    rho0 = p0 @ rho
    rho0 = rho0 @ p0.transpose()
    rho1 = p1 @ rho
    rho1 = rho1 @ p1.transpose()
    rho_reduced = rho0 + rho1
    return rho_reduced
Exemple #3
0
 def test_hermitian(self):
     t = tensor.Tensor([[2.0, 0.0], [0.0, 2.0]])
     self.assertTrue(t.is_hermitian())
     self.assertFalse(t.is_unitary())
Exemple #4
0
 def density(self) -> tensor.Tensor:
     return tensor.Tensor(np.outer(self, self.conj()))