Ejemplo n.º 1
0
 def test_genericgate_constructor_invalid(self):
     reset_tensor_cache()
     lm = LocationModel(4, 2)
     self.assertRaises(ValueError, GenericGate, "Test", 2, 4, lm)
     self.assertRaises(ValueError, GenericGate, "Test", 4, 2, lm, [0, 1])
     self.assertRaises(ValueError, GenericGate, "Test", 4, 2, lm, [0] * 16,
                       [0, 1])
Ejemplo n.º 2
0
    def test_get_norder_paulis_tensor_2(self):
        num_qubits = 2
        reset_tensor_cache()
        tensors = get_norder_paulis_tensor(num_qubits)
        self.assertTrue(len(tensors) == 4**num_qubits)

        paulis = []
        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            for tensor in tensors:
                paulis.append(tensor.eval())

        X = np.array([[0, 1], [1, 0]], dtype=np.complex128)
        Y = np.array([[0, -1j], [1j, 0]], dtype=np.complex128)
        Z = np.array([[1, 0], [0, -1]], dtype=np.complex128)
        I = np.array([[1, 0], [0, 1]], dtype=np.complex128)

        self.assertTrue(self.in_array(np.kron(X, X), paulis))
        self.assertTrue(self.in_array(np.kron(X, Y), paulis))
        self.assertTrue(self.in_array(np.kron(X, Z), paulis))
        self.assertTrue(self.in_array(np.kron(X, I), paulis))
        self.assertTrue(self.in_array(np.kron(Y, X), paulis))
        self.assertTrue(self.in_array(np.kron(Y, Y), paulis))
        self.assertTrue(self.in_array(np.kron(Y, Z), paulis))
        self.assertTrue(self.in_array(np.kron(Y, I), paulis))
        self.assertTrue(self.in_array(np.kron(Z, X), paulis))
        self.assertTrue(self.in_array(np.kron(Z, Y), paulis))
        self.assertTrue(self.in_array(np.kron(Z, Z), paulis))
        self.assertTrue(self.in_array(np.kron(Z, I), paulis))
        self.assertTrue(self.in_array(np.kron(I, X), paulis))
        self.assertTrue(self.in_array(np.kron(I, Y), paulis))
        self.assertTrue(self.in_array(np.kron(I, Z), paulis))
        self.assertTrue(self.in_array(np.kron(I, I), paulis))
    def test_fixedgate_get_fun_vals(self):
        reset_tensor_cache()
        fg = FixedGate("Test", 4, 2, (0, 1))

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            fun_vals = fg.get_fun_vals(sess)

        self.assertTrue(np.array_equal(fun_vals, [0.25] * 16))
    def test_genericgate_get_fun_vals(self):
        reset_tensor_cache()
        lm = LocationModel(4, 2)
        gg = GenericGate("Test", 4, 2, lm, loc_vals=[1, 0, 0, 0, 0, 0])

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            fun_vals = gg.get_fun_vals(sess)

        self.assertTrue(np.array_equal(fun_vals, [0.25] * 16))
Ejemplo n.º 5
0
    def test_genericgate_get_location ( self ):
        reset_tensor_cache()
        lm = LocationModel( 4, 2 )
        gg = GenericGate( "Test", 4, 2, lm, loc_vals = [ 1, 0, 0, 0, 0, 0 ] )

        with tf.Session() as sess:
            sess.run( tf.global_variables_initializer() )
            location = gg.get_location( sess )

        self.assertTrue( np.array_equal( location, list( lm.locations )[0] ) )
    def test_fixedgate_get_unitary(self):
        reset_tensor_cache()
        fg = FixedGate("Test", 4, 2, (0, 1))

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            gate = fg.get_unitary(sess)

        paulis = get_pauli_n_qubit_projection(4, (0, 1))
        H = pauli_dot_product([0.25] * 16, paulis)
        U = la.expm(1j * H)
        self.assertTrue(hilbert_schmidt_distance(gate, U) <= 1e-16)
    def test_fixedgate_get_herm ( self ):
        reset_tensor_cache()
        fg = FixedGate( "Test", 4, 2, (0, 1) )
        herm = fg.get_herm()

        with tf.Session() as sess:
            sess.run( tf.global_variables_initializer() )
            herm = herm.eval()

        paulis = get_pauli_n_qubit_projection( 4, (0, 1) )
        H = pauli_dot_product( [ 0.25 ] * 16, paulis )
        self.assertTrue( np.array_equal( herm, H )  )
    def test_genericgate_get_unitary(self):
        reset_tensor_cache()
        lm = LocationModel(4, 2)
        gg = GenericGate("Test", 4, 2, lm, loc_vals=[1, 0, 0, 0, 0, 0])

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            gate = gg.get_unitary(sess)

        paulis = get_pauli_n_qubit_projection(4, (0, 1))
        H = pauli_dot_product([0.25] * 16, paulis)
        U = la.expm(1j * H)
        self.assertTrue(hilbert_schmidt_distance(gate, U) <= 1e-16)
    def test_genericgate_get_herm(self):
        reset_tensor_cache()
        lm = LocationModel(4, 2)
        gg = GenericGate("Test", 4, 2, lm, loc_vals=[1, 0, 0, 0, 0, 0])
        herm = gg.get_herm()

        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            herm = herm.eval()

        paulis = get_pauli_n_qubit_projection(4, list(lm.locations)[0])
        H = pauli_dot_product([0.25] * 16, paulis)
        self.assertTrue(np.allclose(herm, H, rtol=0, atol=1e-15))
Ejemplo n.º 10
0
    def test_get_norder_paulis_tensor_0(self):
        num_qubits = 0
        reset_tensor_cache()
        tensors = get_norder_paulis_tensor(num_qubits)
        self.assertTrue(len(tensors) == 4**num_qubits)

        paulis = []
        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            for tensor in tensors:
                paulis.append(tensor.eval())

        I = np.array([[1, 0], [0, 1]], dtype=np.complex128)

        self.assertTrue(self.in_array(I, paulis))
Ejemplo n.º 11
0
    def test_genericgate_constructor_valid(self):
        reset_tensor_cache()
        lm = LocationModel(4, 2)
        gg = GenericGate("Test", 4, 2, lm)
        self.assertEqual(gg.name, "Test")
        self.assertEqual(gg.num_qubits, 4)
        self.assertEqual(gg.gate_size, 2)
        self.assertTrue(np.array_equal(gg.loc_vals, [0] * 6))
        self.assertTrue(np.array_equal(gg.fun_vals, [0.25] * 16))
        self.assertTrue(np.array_equal(list(lm.locations), gg.topology))

        gg = GenericGate("Test", 4, 2, lm, parity=0)
        self.assertEqual(gg.name, "Test")
        self.assertEqual(gg.num_qubits, 4)
        self.assertEqual(gg.gate_size, 2)
        self.assertTrue(np.array_equal(gg.fun_vals, [0.25] * 16))
        self.assertTrue(np.array_equal(lm.buckets[0], gg.topology))
Ejemplo n.º 12
0
    def test_get_pauli_tensor_1_qubit_proj_4_0 ( self ):
        num_qubits = 4
        qubit_proj = 0
        reset_tensor_cache()
        tensors = get_pauli_tensor_n_qubit_projection( num_qubits, [ qubit_proj ] )
        self.assertTrue( len( tensors ) == 4 )

        paulis = []
        with tf.Session() as sess:
            sess.run( tf.global_variables_initializer() )
            for tensor in tensors:
                paulis.append( tensor.eval() )

        X = np.array( [[0, 1], [1, 0]], dtype = np.complex128 )
        Y = np.array( [[0, -1j], [1j, 0]], dtype = np.complex128 )
        Z = np.array( [[1, 0], [0, -1]], dtype = np.complex128 )
        I = np.array( [[1, 0], [0, 1]], dtype = np.complex128 )

        self.assertTrue( self.in_array( np.kron( np.kron( np.kron( X, I ), I ), I ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( np.kron( Y, I ), I ), I ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( np.kron( Z, I ), I ), I ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( np.kron( I, I ), I ), I ), paulis ) )
Ejemplo n.º 13
0
    def test_get_pauli_tensor_2_qubit_proj_3_1_2 ( self ):
        num_qubits = 3
        qubit_pro1 = 1
        qubit_pro2 = 2
        reset_tensor_cache()
        tensors = get_pauli_tensor_n_qubit_projection( num_qubits, [ qubit_pro1, qubit_pro2 ] )
        self.assertTrue( len( tensors ) == 16 )

        paulis = []
        with tf.Session() as sess:
            sess.run( tf.global_variables_initializer() )
            for tensor in tensors:
                paulis.append( tensor.eval() )

        X = np.array( [[0, 1], [1, 0]], dtype = np.complex128 )
        Y = np.array( [[0, -1j], [1j, 0]], dtype = np.complex128 )
        Z = np.array( [[1, 0], [0, -1]], dtype = np.complex128 )
        I = np.array( [[1, 0], [0, 1]], dtype = np.complex128 )

        self.assertTrue( self.in_array( np.kron( np.kron( I, X ), I ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, Y ), I ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, Z ), I ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, I ), I ), paulis ) )

        self.assertTrue( self.in_array( np.kron( np.kron( I, X ), X ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, Y ), X ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, Z ), X ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, I ), X ), paulis ) )

        self.assertTrue( self.in_array( np.kron( np.kron( I, X ), Y ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, Y ), Y ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, Z ), Y ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, I ), Y ), paulis ) )

        self.assertTrue( self.in_array( np.kron( np.kron( I, X ), Z ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, Y ), Z ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, Z ), Z ), paulis ) )
        self.assertTrue( self.in_array( np.kron( np.kron( I, I ), Z ), paulis ) )
 def test_reset_tensor_cache ( self ):
     pauli_tensors = get_norder_paulis_tensor( 4 )
     self.assertTrue( len( norder_paulis_tensor_map ) >= 5 )
     reset_tensor_cache()
     print( len( norder_paulis_tensor_map ) )
     self.assertTrue( len( norder_paulis_tensor_map ) == 2 )
Ejemplo n.º 15
0
 def test_fixedgate_get_location(self):
     reset_tensor_cache()
     fg = FixedGate("Test", 4, 2, (0, 1))
     self.assertTrue(np.array_equal(fg.get_location(), (0, 1)))