def test_GellMann(self): id2x2 = np.array([[1,0],[0,1]]) sigmax = np.array([[0,1],[1,0]]) sigmay = np.array([[0,-1.0j],[1.0j,0]]) sigmaz = np.array([[1,0],[0,-1]]) # Gell-Mann 2x2 matrices should just be the sigma matrices GM2_mxs = pygsti.gm_matrices_unnormalized(2) self.assertTrue(len(GM2_mxs) == 4) self.assertArraysAlmostEqual( GM2_mxs[0], id2x2 ) self.assertArraysAlmostEqual( GM2_mxs[1], sigmax ) self.assertArraysAlmostEqual( GM2_mxs[2], sigmay ) self.assertArraysAlmostEqual( GM2_mxs[3], sigmaz ) with self.assertRaises(ValueError): pygsti.gm_matrices_unnormalized("FooBar") #arg must be tuple,list,or int ''' # GM [1,1] matrices are the basis matrices for each block, concatenated together GM11_mxs = pygsti.gm_matrices_unnormalized([1,1]) self.assertTrue(len(GM11_mxs) == 2) self.assertArraysAlmostEqual( GM11_mxs[0], np.array([[1,0],[0,0]],'d') ) self.assertArraysAlmostEqual( GM11_mxs[1], np.array([[0,0],[0,1]],'d') ) ''' # Normalized Gell-Mann 2x2 matrices should just be the sigma matrices / sqrt(2) NGM2_mxs = pygsti.gm_matrices(2) self.assertTrue(len(NGM2_mxs) == 4) self.assertArraysAlmostEqual( NGM2_mxs[0], id2x2/np.sqrt(2) ) self.assertArraysAlmostEqual( NGM2_mxs[1], sigmax/np.sqrt(2) ) self.assertArraysAlmostEqual( NGM2_mxs[2], sigmay/np.sqrt(2) ) self.assertArraysAlmostEqual( NGM2_mxs[3], sigmaz/np.sqrt(2) )
def test_GellMann(self): id2x2 = np.array([[1,0],[0,1]]) sigmax = np.array([[0,1],[1,0]]) sigmay = np.array([[0,-1.0j],[1.0j,0]]) sigmaz = np.array([[1,0],[0,-1]]) # Gell-Mann 2x2 matrices should just be the sigma matrices GM2_mxs = pygsti.gm_matrices_unnormalized(2) self.assertTrue(len(GM2_mxs) == 4) self.assertArraysAlmostEqual( GM2_mxs[0], id2x2 ) self.assertArraysAlmostEqual( GM2_mxs[1], sigmax ) self.assertArraysAlmostEqual( GM2_mxs[2], sigmay ) self.assertArraysAlmostEqual( GM2_mxs[3], sigmaz ) with self.assertRaises(ValueError): pygsti.gm_matrices_unnormalized("FooBar") #arg must be tuple,list,or int # GM [1,1] matrices are the basis matrices for each block, concatenated together GM11_mxs = pygsti.gm_matrices_unnormalized([1,1]) self.assertTrue(len(GM11_mxs) == 2) self.assertArraysAlmostEqual( GM11_mxs[0], np.array([[1,0],[0,0]],'d') ) self.assertArraysAlmostEqual( GM11_mxs[1], np.array([[0,0],[0,1]],'d') ) # Normalized Gell-Mann 2x2 matrices should just be the sigma matrices / sqrt(2) NGM2_mxs = pygsti.gm_matrices(2) self.assertTrue(len(NGM2_mxs) == 4) self.assertArraysAlmostEqual( NGM2_mxs[0], id2x2/np.sqrt(2) ) self.assertArraysAlmostEqual( NGM2_mxs[1], sigmax/np.sqrt(2) ) self.assertArraysAlmostEqual( NGM2_mxs[2], sigmay/np.sqrt(2) ) self.assertArraysAlmostEqual( NGM2_mxs[3], sigmaz/np.sqrt(2) )
def test_orthogonality(self): #Gell Mann dim = 5 mxs = pygsti.gm_matrices(dim) N = len(mxs); self.assertTrue(N == dim**2) gm_trMx = np.zeros((N,N), 'complex') for i in range(N): for j in range(N): gm_trMx[i,j] = np.trace(np.dot(np.conjugate(np.transpose(mxs[i])),mxs[j])) #Note: conjugate transpose not needed since mxs are Hermitian self.assertArraysAlmostEqual( gm_trMx, np.identity(N,'complex') ) #Std Basis dim = 5 mxs = pygsti.std_matrices(dim) N = len(mxs); self.assertTrue(N == dim**2) std_trMx = np.zeros((N,N), 'complex') for i in range(N): for j in range(N): std_trMx[i,j] = np.trace(np.dot(np.conjugate(np.transpose(mxs[i])),mxs[j])) self.assertArraysAlmostEqual( std_trMx, np.identity(N,'complex') ) #Pauli-product basis dim = 4 mxs = pygsti.pp_matrices(dim) N = len(mxs); self.assertTrue(N == dim**2) with self.assertRaises(ValueError): pygsti.pp_matrices("Foobar") #dim must be an int with self.assertRaises(ValueError): pygsti.pp_matrices(3) #dim must be a power of 2 specialCase = pygsti.pp_matrices(1) #single 1x1 identity mx self.assertEqual( specialCase, [ np.identity(1,'complex') ] ) pp_trMx = np.zeros((N,N), 'complex') for i in range(N): for j in range(N): pp_trMx[i,j] = np.trace(np.dot(np.conjugate(np.transpose(mxs[i])),mxs[j])) #Note: conjugate transpose not needed since mxs are Hermitian self.assertArraysAlmostEqual( pp_trMx, np.identity(N,'complex') )