1import unittest 2from petsc4py import PETSc 3import os 4from PetscBinaryIO import * 5 6class TestPetscBinaryIO(unittest.TestCase): 7 def setUp(self): 8 try: 9 os.remove('test.dat') 10 except OSError: 11 pass 12 try: 13 os.remove('test.dat.info') 14 except OSError: 15 pass 16 17 def test_VecRead(self): 18 """Test reading a Vec""" 19 array = np.array([1.1, 2.2, 3.3]) 20 vec = PETSc.Vec().createSeq(3) 21 vec[...] = array 22 viewer = PETSc.Viewer().createBinary('test.dat', PETSc.Viewer.Mode.W) 23 vec.view(viewer) 24 viewer.destroy() 25 vec.destroy() 26 27 result, = PetscBinaryIO().readBinaryFile('test.dat') 28 self.assertTrue(np.allclose(array, result)) 29 30 def test_VecWrite(self): 31 """Test writing a Vec""" 32 array = np.array([1.1, 2.2, 3.3]) 33 PetscBinaryIO().writeBinaryFile('test.dat', [array.view(Vec),]) 34 35 vec = PETSc.Vec().createSeq(3) 36 vec.set(0.) 37 viewer = PETSc.Viewer().createBinary('test.dat', PETSc.Viewer.Mode.R) 38 vec.load(viewer) 39 viewer.destroy() 40 41 self.assertTrue(np.allclose(array, vec[...])) 42 vec.destroy() 43 44 def test_ISRead(self): 45 """Test reading an IS""" 46 indices = np.array([3,4,5]) 47 anis = PETSc.IS().createGeneral(list(indices)) 48 viewer = PETSc.Viewer().createBinary('test.dat', PETSc.Viewer.Mode.W) 49 anis.view(viewer) 50 viewer.destroy() 51 anis.destroy() 52 53 result, = PetscBinaryIO().readBinaryFile('test.dat') 54 self.assertTrue((indices == result).all()) 55 56 def test_MatRead(self): 57 """Test reading a Mat""" 58 mat = PETSc.Mat().createAIJ(2) 59 mat[0,0] = 1.1 60 mat[0,1] = 2.1 61 mat[1,1] = 3.1 62 mat.assemble() 63 64 vals = np.array([1.1,2.1,3.1]) 65 counts = np.array([0,2,3]) 66 cols = np.array([0,1,1]) 67 68 viewer = PETSc.Viewer().createBinary('test.dat', PETSc.Viewer.Mode.W) 69 mat.view(viewer) 70 viewer.destroy() 71 mat.destroy() 72 73 result, = PetscBinaryIO().readBinaryFile('test.dat') 74 self.assertTrue(np.allclose(vals, result[1][2])) 75 self.assertTrue((counts == result[1][0]).all()) 76 self.assertTrue((cols == result[1][1]).all()) 77 self.assertTrue((2,2) == result[0]) 78 79 def test_MatWrite(self): 80 """Test writing a Mat""" 81 vals = np.array([1.1,2.1,3.1]) 82 counts = np.array([0,2,3]) 83 cols = np.array([0,1,1]) 84 mat = MatSparse(((2,2),(counts,cols,vals))) 85 86 dense = np.array([1.1,2.1,0.0,3.1]) 87 88 PetscBinaryIO().writeBinaryFile('test.dat', [mat,]) 89 90 mat = PETSc.Mat().createAIJ(2) 91 viewer = PETSc.Viewer().createBinary('test.dat', PETSc.Viewer.Mode.R) 92 mat.load(viewer) 93 viewer.destroy() 94 95 self.assertTrue(np.allclose(dense, mat[:,:].ravel())) 96 mat.destroy() 97 98 99if __name__ == '__main__': 100 unittest.main() 101 try: 102 os.remove('test.dat') 103 except OSError: 104 pass 105 try: 106 os.remove('test.dat.info') 107 except OSError: 108 pass 109