15808f684SSatish Balayfrom petsc4py import PETSc 25808f684SSatish Balayimport unittest 3aa23289cSDaiane Iglesia Dolciimport numpy as np 45808f684SSatish Balay 55808f684SSatish Balay# -------------------------------------------------------------------- 65808f684SSatish Balay 75808f684SSatish Balay 86f336411SStefano Zampiniclass BaseTestVec: 95808f684SSatish Balay COMM = None 105808f684SSatish Balay TYPE = None 115808f684SSatish Balay 125808f684SSatish Balay def setUp(self): 135808f684SSatish Balay v = PETSc.Vec() 145808f684SSatish Balay v.create(self.COMM) 155808f684SSatish Balay v.setSizes(100) 165808f684SSatish Balay v.setType(self.TYPE) 175808f684SSatish Balay self.vec = v 185808f684SSatish Balay 195808f684SSatish Balay def tearDown(self): 205808f684SSatish Balay self.vec.destroy() 215808f684SSatish Balay self.vec = None 2262e5d2d2SJDBetteridge PETSc.garbage_cleanup() 235808f684SSatish Balay 245808f684SSatish Balay def testDuplicate(self): 255808f684SSatish Balay self.vec.set(1) 265808f684SSatish Balay vec = self.vec.duplicate() 275808f684SSatish Balay self.assertFalse(self.vec.equal(vec)) 285808f684SSatish Balay self.assertEqual(self.vec.sizes, vec.sizes) 295808f684SSatish Balay del vec 305808f684SSatish Balay 315808f684SSatish Balay def testCopy(self): 325808f684SSatish Balay self.vec.set(1) 335808f684SSatish Balay vec = self.vec.duplicate() 345808f684SSatish Balay self.vec.copy(vec) 355808f684SSatish Balay self.assertTrue(self.vec.equal(vec)) 365808f684SSatish Balay del vec 375808f684SSatish Balay 385808f684SSatish Balay def testDot(self): 395808f684SSatish Balay self.vec.set(1) 405808f684SSatish Balay d = self.vec.dot(self.vec) 415808f684SSatish Balay self.assertAlmostEqual(abs(d), self.vec.getSize()) 425808f684SSatish Balay self.vec.dotBegin(self.vec) 435808f684SSatish Balay d = self.vec.dotEnd(self.vec) 445808f684SSatish Balay self.assertAlmostEqual(abs(d), self.vec.getSize()) 455808f684SSatish Balay 465808f684SSatish Balay def testNorm(self): 475808f684SSatish Balay from math import sqrt 486f336411SStefano Zampini 495808f684SSatish Balay self.vec.set(1) 505808f684SSatish Balay n1 = self.vec.norm(PETSc.NormType.NORM_1) 515808f684SSatish Balay n2 = self.vec.norm(PETSc.NormType.NORM_2) 525808f684SSatish Balay ni = self.vec.norm(PETSc.NormType.NORM_INFINITY) 535808f684SSatish Balay self.assertAlmostEqual(n1, self.vec.getSize()) 545808f684SSatish Balay self.assertAlmostEqual(n2, sqrt(self.vec.getSize())) 555808f684SSatish Balay self.assertAlmostEqual(n2, self.vec.norm()) 565808f684SSatish Balay self.assertAlmostEqual(ni, 1.0) 575808f684SSatish Balay self.vec.normBegin(PETSc.NormType.NORM_1) 585808f684SSatish Balay nn1 = self.vec.normEnd(PETSc.NormType.NORM_1) 595808f684SSatish Balay self.assertAlmostEqual(nn1, n1) 605808f684SSatish Balay self.vec.normBegin() 615808f684SSatish Balay nn2 = self.vec.normEnd() 625808f684SSatish Balay self.assertAlmostEqual(nn2, n2) 635808f684SSatish Balay self.vec.normBegin(PETSc.NormType.NORM_INFINITY) 645808f684SSatish Balay nni = self.vec.normEnd(PETSc.NormType.NORM_INFINITY) 655808f684SSatish Balay self.assertAlmostEqual(nni, ni) 665808f684SSatish Balay 675808f684SSatish Balay def testNormalize(self): 685808f684SSatish Balay from math import sqrt 696f336411SStefano Zampini 705808f684SSatish Balay self.vec.set(1) 715808f684SSatish Balay n2 = self.vec.normalize() 725808f684SSatish Balay self.assertAlmostEqual(n2, sqrt(self.vec.getSize())) 735808f684SSatish Balay self.assertAlmostEqual(1, self.vec.norm()) 745808f684SSatish Balay 755808f684SSatish Balay def testSumMinMax(self): 765808f684SSatish Balay self.vec.set(1) 775808f684SSatish Balay self.assertEqual(self.vec.sum(), self.vec.getSize()) 785808f684SSatish Balay self.vec.set(-7) 795808f684SSatish Balay self.assertEqual(self.vec.min()[1], -7) 805808f684SSatish Balay self.vec.set(10) 815808f684SSatish Balay self.assertEqual(self.vec.max()[1], 10) 825808f684SSatish Balay 835808f684SSatish Balay def testSwap(self): 845808f684SSatish Balay v1 = self.vec 855808f684SSatish Balay v2 = v1.duplicate() 865808f684SSatish Balay v1.set(1) 875808f684SSatish Balay v2.set(2) 885808f684SSatish Balay v1.swap(v2) 895808f684SSatish Balay idx, _ = self.vec.getOwnershipRange() 905808f684SSatish Balay self.assertEqual(v1[idx], 2) 915808f684SSatish Balay self.assertEqual(v2[idx], 1) 925808f684SSatish Balay 935808f684SSatish Balay def testBsize(self): 945808f684SSatish Balay self.vec.setBlockSize(1) 955808f684SSatish Balay self.assertEqual(self.vec.getBlockSize(), 1) 965808f684SSatish Balay self.vec.setBlockSize(1) 975808f684SSatish Balay 985808f684SSatish Balay def testGetSetVals(self): 995808f684SSatish Balay start, end = self.vec.getOwnershipRange() 1005808f684SSatish Balay self.vec[start] = -7 1015808f684SSatish Balay self.vec[end - 1] = -7 10260211e57SBarry Smith self.vec.assemble() 1035808f684SSatish Balay self.assertEqual(self.vec[start], -7) 1045808f684SSatish Balay self.assertEqual(self.vec[end - 1], -7) 1056f336411SStefano Zampini for i in range(start, end): 1066f336411SStefano Zampini self.vec[i] = i 10760211e57SBarry Smith self.vec.assemble() 1085808f684SSatish Balay values = [self.vec[i] for i in range(start, end)] 1095808f684SSatish Balay self.assertEqual(values, list(range(start, end))) 1105808f684SSatish Balay sz = self.vec.getSize() 1115808f684SSatish Balay self.assertEqual(self.vec.sum(), (sz - 1) / 2.0 * sz) 1125808f684SSatish Balay 1135808f684SSatish Balay def testGetSetValsBlocked(self): 1145808f684SSatish Balay return 1155808f684SSatish Balay lsize, gsize = self.vec.getSizes() 1165808f684SSatish Balay start, end = self.vec.getOwnershipRange() 1175808f684SSatish Balay bsizes = list(range(1, lsize + 1)) 1185808f684SSatish Balay nblocks = list(range(1, lsize + 1)) 1196f336411SStefano Zampini compat = [ 1206f336411SStefano Zampini (bs, nb) 1216f336411SStefano Zampini for bs in bsizes 1226f336411SStefano Zampini if not (gsize % bs or lsize % bs) 1236f336411SStefano Zampini for nb in nblocks 1246f336411SStefano Zampini if bs * nb <= lsize 1256f336411SStefano Zampini ] 1265808f684SSatish Balay for bsize, nblock in compat: 1275808f684SSatish Balay self.vec.setBlockSize(bsize) 1285808f684SSatish Balay bindex = [start // bsize + i for i in range(nblock)] 1295808f684SSatish Balay bvalue = [float(i) for i in range(nblock * bsize)] 1305808f684SSatish Balay self.vec.setValuesBlocked(bindex, bvalue) 1315808f684SSatish Balay self.vec.assemble() 1325808f684SSatish Balay index = [start + i for i in range(nblock * bsize)] 1335808f684SSatish Balay value = self.vec.getValues(index) 1345808f684SSatish Balay self.assertEqual(bvalue, list(value)) 1355808f684SSatish Balay 1365808f684SSatish Balay def testGetSetArray(self): 1375808f684SSatish Balay self.vec.set(1) 1385808f684SSatish Balay arr0 = self.vec.getArray().copy() 1395808f684SSatish Balay self.assertEqual(arr0.sum(), self.vec.getLocalSize()) 1405808f684SSatish Balay arr0 = self.vec.getArray().copy() 1415808f684SSatish Balay self.vec.setRandom() 1425808f684SSatish Balay arr1 = self.vec.getArray().copy() 1435808f684SSatish Balay self.vec.setArray(arr1) 1445808f684SSatish Balay arr1 = self.vec.getArray().copy() 1455808f684SSatish Balay arr2 = self.vec.getArray().copy() 1465808f684SSatish Balay self.assertTrue((arr1 == arr2).all()) 1476f336411SStefano Zampini 1485808f684SSatish Balay refs = self.vec.getRefCount() 149fd6b63b0Smint Yzr arr3 = np.asarray(self.vec) 1505808f684SSatish Balay self.assertEqual(self.vec.getRefCount(), refs + 1) 1515808f684SSatish Balay self.assertTrue((arr1 == arr3).all()) 1525808f684SSatish Balay arr3[:] = 0 1535808f684SSatish Balay self.assertAlmostEqual(abs(self.vec.sum()), 0) 1545808f684SSatish Balay self.assertEqual(self.vec.max()[1], 0) 1555808f684SSatish Balay self.assertEqual(self.vec.min()[1], 0) 1565808f684SSatish Balay self.vec.set(1) 1575808f684SSatish Balay self.assertAlmostEqual(abs(arr3.sum()), self.vec.getLocalSize()) 1585808f684SSatish Balay self.assertEqual(arr3.min(), 1) 1595808f684SSatish Balay self.assertEqual(arr3.max(), 1) 1605808f684SSatish Balay del arr3 1615808f684SSatish Balay self.assertEqual(self.vec.getRefCount(), refs) 1625808f684SSatish Balay 1635808f684SSatish Balay def testPlaceArray(self): 1645808f684SSatish Balay self.vec.set(1) 1655808f684SSatish Balay array = self.vec.getArray().copy() 1665808f684SSatish Balay self.vec.placeArray(array) 1675808f684SSatish Balay array[:] = 2 1685808f684SSatish Balay self.assertAlmostEqual(abs(self.vec.sum()), 2 * self.vec.getSize()) 1695808f684SSatish Balay self.vec.resetArray() 1705808f684SSatish Balay self.assertAlmostEqual(abs(self.vec.sum()), self.vec.getSize()) 1715808f684SSatish Balay 172df341386SStefano Zampini def testLocalVector(self): 173df341386SStefano Zampini rank = self.vec.getComm().Get_rank() 174df341386SStefano Zampini self.vec.getArray()[:] = rank + 1 175df341386SStefano Zampini ln = self.vec.getLocalSize() 176df341386SStefano Zampini lvec = self.vec.createLocalVector() 177df341386SStefano Zampini self.vec.getLocalVector(lvec) 178df341386SStefano Zampini self.assertEqual(abs(lvec.sum()), (rank + 1) * ln) 179df341386SStefano Zampini self.vec.restoreLocalVector(lvec) 180df341386SStefano Zampini self.vec.getLocalVector(lvec, readonly=True) 181df341386SStefano Zampini self.assertEqual(abs(lvec.sum()), (rank + 1) * ln) 182df341386SStefano Zampini self.vec.restoreLocalVector(lvec, readonly=True) 183df341386SStefano Zampini lvec.destroy() 184df341386SStefano Zampini 1855808f684SSatish Balay def testSetOption(self): 1865808f684SSatish Balay opt1 = PETSc.Vec.Option.IGNORE_OFF_PROC_ENTRIES 1875808f684SSatish Balay opt2 = PETSc.Vec.Option.IGNORE_NEGATIVE_INDICES 1885808f684SSatish Balay for opt in [opt1, opt2] * 2: 1895808f684SSatish Balay for flag in [True, False] * 2: 1905808f684SSatish Balay self.vec.setOption(opt, flag) 1915808f684SSatish Balay 1925808f684SSatish Balay def testGetSetItem(self): 1935808f684SSatish Balay v = self.vec 1945808f684SSatish Balay w = v.duplicate() 1955808f684SSatish Balay # 1965808f684SSatish Balay v[...] = 7 1975808f684SSatish Balay self.assertEqual(v.max()[1], 7) 1985808f684SSatish Balay self.assertEqual(v.min()[1], 7) 1995808f684SSatish Balay # 2005808f684SSatish Balay v.setRandom() 2015808f684SSatish Balay w[...] = v 2025808f684SSatish Balay self.assertTrue(w.equal(v)) 2035808f684SSatish Balay # 2045808f684SSatish Balay v.setRandom() 2055808f684SSatish Balay w[...] = v.getArray() 2065808f684SSatish Balay self.assertTrue(w.equal(v)) 2075808f684SSatish Balay # 2085808f684SSatish Balay s, e = v.getOwnershipRange() 2095808f684SSatish Balay v.setRandom() 2105808f684SSatish Balay w[s:e] = v.getArray().copy() 21160211e57SBarry Smith w.assemble() 2125808f684SSatish Balay self.assertTrue(w.equal(v)) 2135808f684SSatish Balay w1, v1 = w[s], v[s] 2145808f684SSatish Balay w2, v2 = w[e - 1], v[e - 1] 2155808f684SSatish Balay self.assertEqual(w1, v1) 2165808f684SSatish Balay self.assertEqual(w2, v2) 2175808f684SSatish Balay 2185808f684SSatish Balay def testMAXPY(self): 2195808f684SSatish Balay y = self.vec 2205808f684SSatish Balay y.set(1) 2215808f684SSatish Balay x = [y.copy() for _ in range(3)] 2225808f684SSatish Balay a = [1] * len(x) 2235808f684SSatish Balay y.maxpy(a, x) 2245808f684SSatish Balay z = y.duplicate() 2255808f684SSatish Balay z.set(len(x) + 1) 2266f336411SStefano Zampini self.assertTrue(y.equal(z)) 2275808f684SSatish Balay 228dda1fc56SLisandro Dalcin def testBinOp(self): 229dda1fc56SLisandro Dalcin x = self.vec 230dda1fc56SLisandro Dalcin x.set(1) 231dda1fc56SLisandro Dalcin n = x.getSize() 232dda1fc56SLisandro Dalcin y = 2 + 2 * x + 1 - x * 3 - 1 233dda1fc56SLisandro Dalcin self.assertEqual(y.min()[1], 1) 234dda1fc56SLisandro Dalcin self.assertEqual(y.max()[1], 1) 235dda1fc56SLisandro Dalcin z = (4 * x) / (2 * y) 236dda1fc56SLisandro Dalcin self.assertEqual(z.min()[1], 2) 237dda1fc56SLisandro Dalcin self.assertEqual(z.max()[1], 2) 238dda1fc56SLisandro Dalcin z = z / 2 239dda1fc56SLisandro Dalcin self.assertEqual(z.min()[1], 1) 240dda1fc56SLisandro Dalcin self.assertEqual(z.max()[1], 1) 241dda1fc56SLisandro Dalcin s = (+x) @ (-y) 242dda1fc56SLisandro Dalcin self.assertEqual(s, -n) 243dda1fc56SLisandro Dalcin # 244dda1fc56SLisandro Dalcin M, N = n, 2 * n 245dda1fc56SLisandro Dalcin A = PETSc.Mat().createDense((M, N), comm=self.COMM) 246dda1fc56SLisandro Dalcin A.setUp() 247dda1fc56SLisandro Dalcin rs, re = A.getOwnershipRange() 248dda1fc56SLisandro Dalcin cs, ce = A.getOwnershipRangeColumn() 249dda1fc56SLisandro Dalcin a, b = 3, 5 250dda1fc56SLisandro Dalcin for i in range(rs, re): 251dda1fc56SLisandro Dalcin for j in range(N): 252dda1fc56SLisandro Dalcin A[i, j] = a * i + b * j 253dda1fc56SLisandro Dalcin A.assemble() 254dda1fc56SLisandro Dalcin y = x @ A 255dda1fc56SLisandro Dalcin self.assertEqual(y.getSize(), N) 256dda1fc56SLisandro Dalcin for i in range(cs, ce): 257dda1fc56SLisandro Dalcin self.assertEqual(y[i], a * M * (M - 1) / 2 + b * i * M) 258dda1fc56SLisandro Dalcin y.set(1) 259dda1fc56SLisandro Dalcin z = A @ y 260dda1fc56SLisandro Dalcin self.assertEqual(z.getSize(), M) 261dda1fc56SLisandro Dalcin for i in range(rs, re): 262dda1fc56SLisandro Dalcin self.assertEqual(z[i], b * N * (N - 1) / 2 + a * i * N) 2635808f684SSatish Balay 264aa23289cSDaiane Iglesia Dolci def testConcatenate(self): 265aa23289cSDaiane Iglesia Dolci x = self.vec 266aa23289cSDaiane Iglesia Dolci y = x.duplicate() 267aa23289cSDaiane Iglesia Dolci x.set(1) 268aa23289cSDaiane Iglesia Dolci y.set(2) 269aa23289cSDaiane Iglesia Dolci z, index_ises = PETSc.Vec.concatenate([x, y]) 270aa23289cSDaiane Iglesia Dolci self.assertEqual(z.getLocalSize(), x.getLocalSize() + y.getLocalSize()) 271aa23289cSDaiane Iglesia Dolci self.assertEqual(z.min()[1], x.min()[1]) 272aa23289cSDaiane Iglesia Dolci self.assertEqual(z.max()[1], y.max()[1]) 273aa23289cSDaiane Iglesia Dolci np.allclose(z.getArray(), np.concatenate([x.getArray(), y.getArray()])) 274aa23289cSDaiane Iglesia Dolci np.allclose(z.getArray()[0 : x.getLocalSize()], x.getArray()) 275aa23289cSDaiane Iglesia Dolci np.allclose(z.getArray()[x.getLocalSize() :], y.getArray()) 2766f336411SStefano Zampini 277*9167abc3Spaul.kuehner def testMean(self): 278*9167abc3Spaul.kuehner x = self.vec 279*9167abc3Spaul.kuehner x.getArray()[:] = self.COMM.rank + 1 280*9167abc3Spaul.kuehner self.assertAlmostEqual(x.mean(), np.mean(np.arange(1, self.COMM.size + 1))) 281*9167abc3Spaul.kuehner 282*9167abc3Spaul.kuehner 2835808f684SSatish Balay# -------------------------------------------------------------------- 2845808f684SSatish Balay 2856f336411SStefano Zampini 2865808f684SSatish Balayclass TestVecSeq(BaseTestVec, unittest.TestCase): 2875808f684SSatish Balay COMM = PETSc.COMM_SELF 2885808f684SSatish Balay TYPE = PETSc.Vec.Type.SEQ 2895808f684SSatish Balay 2906f336411SStefano Zampini 2915808f684SSatish Balayclass TestVecMPI(BaseTestVec, unittest.TestCase): 2925808f684SSatish Balay COMM = PETSc.COMM_WORLD 2935808f684SSatish Balay TYPE = PETSc.Vec.Type.MPI 2945808f684SSatish Balay 2956f336411SStefano Zampini 2965808f684SSatish Balayclass TestVecShared(BaseTestVec, unittest.TestCase): 2975808f684SSatish Balay if PETSc.COMM_WORLD.getSize() == 1: 2985808f684SSatish Balay TYPE = PETSc.Vec.Type.SHARED 2995808f684SSatish Balay else: 3005808f684SSatish Balay TYPE = PETSc.Vec.Type.MPI 3015808f684SSatish Balay COMM = PETSc.COMM_WORLD 3025808f684SSatish Balay 3036f336411SStefano Zampini 3045808f684SSatish Balay# class TestVecSieve(BaseTestVec, unittest.TestCase): 3055808f684SSatish Balay# CLASS = PETSc.VecSieve 3065808f684SSatish Balay# TARGS = ([],) 3075808f684SSatish Balay 3085808f684SSatish Balay# class TestVecGhost(BaseTestVec, unittest.TestCase): 3095808f684SSatish Balay# CLASS = PETSc.VecGhost 3105808f684SSatish Balay# TARGS = ([],) 3115808f684SSatish Balay 3125808f684SSatish Balay# -------------------------------------------------------------------- 3135808f684SSatish Balay 3145808f684SSatish Balay 3156f336411SStefano Zampiniclass TestVecWithArray(unittest.TestCase): 3165808f684SSatish Balay def testCreateSeq(self): 317fd6b63b0Smint Yzr a = np.zeros(5, dtype=PETSc.ScalarType) 3185808f684SSatish Balay 3195808f684SSatish Balay v1 = PETSc.Vec().createWithArray(a, comm=PETSc.COMM_SELF) 3205808f684SSatish Balay v2 = PETSc.Vec().createWithArray(a, size=5, comm=PETSc.COMM_SELF) 3215808f684SSatish Balay v3 = PETSc.Vec().createWithArray(a, size=3, comm=PETSc.COMM_SELF) 3225808f684SSatish Balay 3235808f684SSatish Balay self.assertTrue(v1.size == 5) 3245808f684SSatish Balay self.assertTrue(v2.size == 5) 3255808f684SSatish Balay self.assertTrue(v3.size == 3) 3265808f684SSatish Balay 3276f336411SStefano Zampini a1 = v1.getDict()['__array__'] 3286f336411SStefano Zampini self.assertTrue(a is a1) 3296f336411SStefano Zampini a2 = v2.getDict()['__array__'] 3306f336411SStefano Zampini self.assertTrue(a is a2) 3316f336411SStefano Zampini a3 = v3.getDict()['__array__'] 3326f336411SStefano Zampini self.assertTrue(a is a3) 3335808f684SSatish Balay 3345808f684SSatish Balay def testCreateMPI(self): 335fd6b63b0Smint Yzr a = np.zeros(5, dtype=PETSc.ScalarType) 3365808f684SSatish Balay 3375808f684SSatish Balay v1 = PETSc.Vec().createWithArray(a, comm=PETSc.COMM_WORLD) 3385808f684SSatish Balay v2 = PETSc.Vec().createWithArray(a, size=(5, None), comm=PETSc.COMM_WORLD) 3395808f684SSatish Balay v3 = PETSc.Vec().createWithArray(a, size=(3, None), comm=PETSc.COMM_WORLD) 3405808f684SSatish Balay 3415808f684SSatish Balay self.assertTrue(v1.local_size == 5) 3425808f684SSatish Balay self.assertTrue(v2.local_size == 5) 3435808f684SSatish Balay self.assertTrue(v3.local_size == 3) 3445808f684SSatish Balay 3456f336411SStefano Zampini a1 = v1.getDict()['__array__'] 3466f336411SStefano Zampini self.assertTrue(a is a1) 3476f336411SStefano Zampini a2 = v2.getDict()['__array__'] 3486f336411SStefano Zampini self.assertTrue(a is a2) 3496f336411SStefano Zampini a3 = v3.getDict()['__array__'] 3506f336411SStefano Zampini self.assertTrue(a is a3) 3515808f684SSatish Balay 3525808f684SSatish Balay def testSetMPIGhost(self): 3535808f684SSatish Balay v = PETSc.Vec().create() 3545808f684SSatish Balay v.setType(PETSc.Vec.Type.MPI) 3555808f684SSatish Balay v.setSizes((5, None)) 356*9167abc3Spaul.kuehner ghosts = [i % v.size for i in range(v.owner_range[1], v.owner_range[1] + 3)] 3575808f684SSatish Balay v.setMPIGhost(ghosts) 358fd6b63b0Smint Yzr v.setArray(np.array(range(*v.owner_range), dtype=PETSc.ScalarType)) 3595808f684SSatish Balay v.ghostUpdate() 3605808f684SSatish Balay with v.localForm() as loc: 361*9167abc3Spaul.kuehner self.assertTrue((loc[0 : v.local_size] == range(*v.owner_range)).all()) 3625808f684SSatish Balay self.assertTrue((loc[v.local_size :] == ghosts).all()) 3635808f684SSatish Balay 364fd6b63b0Smint Yzr def testGetGhostIS(self): 365fd6b63b0Smint Yzr v = PETSc.Vec().create() 366fd6b63b0Smint Yzr v.setType(PETSc.Vec.Type.MPI) 367fd6b63b0Smint Yzr v.setSizes((5, None)) 368*9167abc3Spaul.kuehner ghosts = [i % v.size for i in range(v.owner_range[1], v.owner_range[1] + 3)] 369fd6b63b0Smint Yzr v.setMPIGhost(ghosts) 370fd6b63b0Smint Yzr v.setArray(np.array(range(*v.owner_range), dtype=PETSc.ScalarType)) 371fd6b63b0Smint Yzr v.ghostUpdate() 372fd6b63b0Smint Yzr self.assertTrue((v.getGhostIS().getIndices() == ghosts).all()) 373fd6b63b0Smint Yzr 3746f336411SStefano Zampini 3755808f684SSatish Balay# -------------------------------------------------------------------- 3765808f684SSatish Balay 3775808f684SSatish Balayif __name__ == '__main__': 3785808f684SSatish Balay unittest.main() 3795808f684SSatish Balay 3805808f684SSatish Balay# -------------------------------------------------------------------- 381