Esempio n. 1
0
    def test_density_matrix_seed(self):

        rgen1 = np.random.RandomState(1)
        dm1 = uniform.density_matrix(2, 2, False, rgen1)

        rgen2 = np.random.RandomState(1)
        dm2 = uniform.density_matrix(2, 2, False, rgen2)

        self.assertEqual(la.norm(dm1 - dm2), 0)
Esempio n. 2
0
    def test_partial_trace(self):
        a = uni.density_matrix(2)
        b = uni.density_matrix(2)

        tot = a ^ b

        self.assertAlmostEqual(
            la.norm(a.density_matrix() - tot.TrB().density_matrix()), 0)
        self.assertAlmostEqual(
            la.norm(b.density_matrix() - tot.TrA().density_matrix()), 0)
Esempio n. 3
0
    def test_density_matrix_as_matrix(self):
        dm = uniform.density_matrix(4, as_state=False)

        self.assertTrue(dm.shape == (4, 4))
        self.assertTrue(type(dm), np.ndarray)
        self.assertTrue(dm.dtype == np.complex128)
        self.assertTrue(ch.QuantumState(dm).is_valid())
Esempio n. 4
0
    def test_partial_trace_asym(self):
        a = uni.density_matrix(2)
        b = uni.density_matrix(3)

        tot = a ^ b

        self.assertAlmostEqual(
            la.norm(a.density_matrix() - tot.TrB(2).density_matrix()), 0)
        self.assertAlmostEqual(
            la.norm(b.density_matrix() - tot.TrA(3).density_matrix()), 0)

        tot = b ^ a

        self.assertAlmostEqual(
            la.norm(b.density_matrix() - tot.TrB(3).density_matrix()), 0)
        self.assertAlmostEqual(
            la.norm(a.density_matrix() - tot.TrA(2).density_matrix()), 0)
Esempio n. 5
0
    def test_kron_n(self):

        X = uni.density_matrix(2)
        X3_a = X.kron(3)
        X3_b = X ^ X ^ X

        self.assertEqual(
            la.norm(X3_a.density_matrix() - X3_b.density_matrix()), 0)
    def test_2_qubit_bv_random(self):

        bv = uniform.bloch_vector(4,pure=True)

        self.assertAlmostEqual(np.trace(bv.density_matrix()),1,12)

        dm = uniform.density_matrix(4,rank=1)

        self.assertAlmostEqual(la.norm(dm.bloch_vector()),1,12)

        bv2 = ch.QuantumState(dm.bloch_vector(),'bv')

        dv1 = dm.density_vector()
        dv2 = bv2.density_vector()

        self.assertAlmostEqual(la.norm(dm.density_matrix()-bv2.density_matrix()),0,15)
    def test_1_qutrit_random_op(self):

        state = uniform.density_matrix(3)
        op = uniform.choi(3)

        out = op*state

        op2 = ch.QuantumChannel(op.ptm(),'ptm')

        self.assertAlmostEqual(la.norm(op.choi()-op2.choi()),0,14)
        
        bvout = op.ptm()[1:,1:]@state.bloch_vector()+op.ptm()[1:,0,np.newaxis]*1./np.sqrt(2)
        bvout2 = ch.QuantumState(bvout,'bv')

        self.assertAlmostEqual(la.norm(out.bloch_vector()-bvout),0,14)

        self.assertAlmostEqual(la.norm(out.density_matrix()-bvout2.density_matrix()),0,14)
    def test_2_qutrit_random_op(self):

        state = uniform.density_matrix(9)
        op = uniform.choi(9)

        out = op*state

        op2 = ch.QuantumChannel(op.ptm(),'ptm')

        self.assertAlmostEqual(la.norm(op.choi()-op2.choi()),0,14)

        #This illustrates the ugliness of wanting a unit sphere
        bvout = op.ptm()[1:,1:]@state.bloch_vector()+op.ptm()[1:,0,np.newaxis]*1./np.sqrt(8)
        bvout2 = ch.QuantumState(bvout,'bv')

        self.assertAlmostEqual(la.norm(out.bloch_vector()-bvout),0,15)

        self.assertAlmostEqual(la.norm(out.density_matrix()-bvout2.density_matrix()),0,14)
Esempio n. 9
0
    def test_density_matrix_as_state(self):
        dm = uniform.density_matrix(3)

        self.assertTrue(dm.is_valid())
Esempio n. 10
0
    def test_rank_density_matrix(self):

        for i in range(1, 10):
            dm = uniform.density_matrix(9, i)

            self.assertTrue(dm.rank() == i)