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