xref: /petsc/src/binding/petsc4py/test/test_is.py (revision 5808f68492579297331054bd8ff190489c3b8c20)
1*5808f684SSatish Balayfrom petsc4py import PETSc
2*5808f684SSatish Balayimport unittest
3*5808f684SSatish Balayimport random
4*5808f684SSatish Balay
5*5808f684SSatish Balay# --------------------------------------------------------------------
6*5808f684SSatish Balay
7*5808f684SSatish Balayclass BaseTestIS(object):
8*5808f684SSatish Balay
9*5808f684SSatish Balay    TYPE = None
10*5808f684SSatish Balay
11*5808f684SSatish Balay    def tearDown(self):
12*5808f684SSatish Balay        self.iset = None
13*5808f684SSatish Balay
14*5808f684SSatish Balay    def testGetType(self):
15*5808f684SSatish Balay        istype = self.iset.getType()
16*5808f684SSatish Balay        self.assertEqual(istype, self.TYPE)
17*5808f684SSatish Balay
18*5808f684SSatish Balay    def testGetSize(self):
19*5808f684SSatish Balay        lsize = self.iset.getLocalSize()
20*5808f684SSatish Balay        gsize = self.iset.getSize()
21*5808f684SSatish Balay        self.assertTrue(lsize <= gsize)
22*5808f684SSatish Balay
23*5808f684SSatish Balay    def testDuplicate(self):
24*5808f684SSatish Balay        iset = self.iset.duplicate()
25*5808f684SSatish Balay        self.assertTrue(self.iset.equal(iset))
26*5808f684SSatish Balay        del iset
27*5808f684SSatish Balay
28*5808f684SSatish Balay    def testCopy(self):
29*5808f684SSatish Balay        iset = self.iset.copy()
30*5808f684SSatish Balay        self.assertTrue(self.iset.equal(iset))
31*5808f684SSatish Balay        del iset
32*5808f684SSatish Balay
33*5808f684SSatish Balay    def testEqual(self):
34*5808f684SSatish Balay        self.assertTrue(self.iset.equal(self.iset))
35*5808f684SSatish Balay        iset = self.iset.duplicate()
36*5808f684SSatish Balay        self.assertTrue(self.iset.equal(iset))
37*5808f684SSatish Balay        del iset
38*5808f684SSatish Balay
39*5808f684SSatish Balay    def testSort(self):
40*5808f684SSatish Balay        self.iset.sort()
41*5808f684SSatish Balay        self.assertTrue(self.iset.isSorted())
42*5808f684SSatish Balay
43*5808f684SSatish Balay    def testDifference(self):
44*5808f684SSatish Balay        iset = self.iset.difference(self.iset)
45*5808f684SSatish Balay        self.assertEqual(iset.getLocalSize(), 0)
46*5808f684SSatish Balay        del iset
47*5808f684SSatish Balay
48*5808f684SSatish Balay    def testComplement(self):
49*5808f684SSatish Balay        self.iset.sort()
50*5808f684SSatish Balay        nmin = self.iset.getIndices().min()
51*5808f684SSatish Balay        nmax = self.iset.getIndices().max()
52*5808f684SSatish Balay        iset = self.iset.complement(nmin, nmax+1)
53*5808f684SSatish Balay        iset.complement(nmin, nmax+1)
54*5808f684SSatish Balay        del iset
55*5808f684SSatish Balay
56*5808f684SSatish Balay    def testSum(self):
57*5808f684SSatish Balay        if self.iset.getComm().getSize() > 1:
58*5808f684SSatish Balay            return
59*5808f684SSatish Balay        self.iset.sort()
60*5808f684SSatish Balay        iset = self.iset.duplicate()
61*5808f684SSatish Balay        iset.sum(self.iset)
62*5808f684SSatish Balay        self.assertTrue(self.iset.equal(iset))
63*5808f684SSatish Balay        del iset
64*5808f684SSatish Balay
65*5808f684SSatish Balay    def testExpand(self):
66*5808f684SSatish Balay        iset = self.iset.expand(self.iset)
67*5808f684SSatish Balay        if self.iset.type == iset.type:
68*5808f684SSatish Balay            self.assertTrue(self.iset.equal(iset))
69*5808f684SSatish Balay        del iset
70*5808f684SSatish Balay
71*5808f684SSatish Balay    def testRenumber(self):
72*5808f684SSatish Balay        (n1,is1) = self.iset.renumber()
73*5808f684SSatish Balay        (n2,is2) = self.iset.renumber(self.iset)
74*5808f684SSatish Balay        del is1
75*5808f684SSatish Balay        del is2
76*5808f684SSatish Balay
77*5808f684SSatish Balay    def testProperties(self):
78*5808f684SSatish Balay        proplist = ['sizes', 'size', 'local_size', 'indices',
79*5808f684SSatish Balay                    'permutation', 'identity', 'sorted']
80*5808f684SSatish Balay        for prop in proplist:
81*5808f684SSatish Balay            self.assertTrue(hasattr(self.iset, prop))
82*5808f684SSatish Balay
83*5808f684SSatish Balay    def testArray(self):
84*5808f684SSatish Balay        import numpy
85*5808f684SSatish Balay        refs = self.iset.getRefCount()
86*5808f684SSatish Balay        arr1 = numpy.asarray(self.iset)
87*5808f684SSatish Balay        self.assertEqual(self.iset.getRefCount(), refs+1)
88*5808f684SSatish Balay        arr2 = self.iset.array
89*5808f684SSatish Balay        self.assertEqual(self.iset.getRefCount(), refs+2)
90*5808f684SSatish Balay        self.assertTrue((arr1 == arr2).all())
91*5808f684SSatish Balay        del arr2
92*5808f684SSatish Balay        self.assertEqual(self.iset.getRefCount(), refs+1)
93*5808f684SSatish Balay        del arr1
94*5808f684SSatish Balay        self.assertEqual(self.iset.getRefCount(), refs)
95*5808f684SSatish Balay
96*5808f684SSatish Balay
97*5808f684SSatish Balay# --------------------------------------------------------------------
98*5808f684SSatish Balay
99*5808f684SSatish Balayclass TestISGeneral(BaseTestIS, unittest.TestCase):
100*5808f684SSatish Balay
101*5808f684SSatish Balay    TYPE = PETSc.IS.Type.GENERAL
102*5808f684SSatish Balay
103*5808f684SSatish Balay    def setUp(self):
104*5808f684SSatish Balay        self.idx = list(range(10))
105*5808f684SSatish Balay        random.shuffle(self.idx)
106*5808f684SSatish Balay        self.iset = PETSc.IS().createGeneral(self.idx)
107*5808f684SSatish Balay
108*5808f684SSatish Balay    def testGetIndices(self):
109*5808f684SSatish Balay        idx = self.iset.getIndices()
110*5808f684SSatish Balay        self.assertEqual(self.idx, list(idx))
111*5808f684SSatish Balay
112*5808f684SSatish Balay
113*5808f684SSatish Balayclass TestISStride(BaseTestIS, unittest.TestCase):
114*5808f684SSatish Balay
115*5808f684SSatish Balay    TYPE = PETSc.IS.Type.STRIDE
116*5808f684SSatish Balay
117*5808f684SSatish Balay    def setUp(self):
118*5808f684SSatish Balay        self.info = (10, 7, 3)
119*5808f684SSatish Balay        size, start, step = self.info
120*5808f684SSatish Balay        self.iset = PETSc.IS().createStride(size, start, step)
121*5808f684SSatish Balay
122*5808f684SSatish Balay    def testGetIndices(self):
123*5808f684SSatish Balay        size, start, step = self.info
124*5808f684SSatish Balay        indices = [start+i*step for i in range(size)]
125*5808f684SSatish Balay        self.assertEqual(list(self.iset.getIndices()), indices)
126*5808f684SSatish Balay
127*5808f684SSatish Balay    def testToGeneral(self):
128*5808f684SSatish Balay        self.iset.toGeneral()
129*5808f684SSatish Balay        self.assertEqual(self.iset.getType(), PETSc.IS.Type.GENERAL)
130*5808f684SSatish Balay
131*5808f684SSatish Balay
132*5808f684SSatish Balayclass TestISBlock(BaseTestIS, unittest.TestCase):
133*5808f684SSatish Balay
134*5808f684SSatish Balay    TYPE = PETSc.IS.Type.BLOCK
135*5808f684SSatish Balay
136*5808f684SSatish Balay    def setUp(self):
137*5808f684SSatish Balay        self.bsize = 3
138*5808f684SSatish Balay        self.index = list(range(0,10,2))
139*5808f684SSatish Balay        random.shuffle(self.index)
140*5808f684SSatish Balay        self.iset = PETSc.IS().createBlock(self.bsize, self.index)
141*5808f684SSatish Balay        self.assertEqual(self.iset.getType(), PETSc.IS.Type.BLOCK)
142*5808f684SSatish Balay
143*5808f684SSatish Balay    def testGetSize(self):
144*5808f684SSatish Balay        lsize = self.iset.getLocalSize()
145*5808f684SSatish Balay        self.assertEqual(lsize/self.bsize, len(self.index))
146*5808f684SSatish Balay
147*5808f684SSatish Balay    def testGetBlockSize(self):
148*5808f684SSatish Balay        bs = self.iset.getBlockSize()
149*5808f684SSatish Balay        self.assertEqual(bs, self.bsize)
150*5808f684SSatish Balay
151*5808f684SSatish Balay    def testGetBlockIndices(self):
152*5808f684SSatish Balay        index = list(self.iset.getBlockIndices())
153*5808f684SSatish Balay        self.assertEqual(index, self.index)
154*5808f684SSatish Balay
155*5808f684SSatish Balay    def testGetIndices(self):
156*5808f684SSatish Balay        bs = self.bsize
157*5808f684SSatish Balay        idx = []
158*5808f684SSatish Balay        for i in self.iset.getBlockIndices():
159*5808f684SSatish Balay            for j in range(bs):
160*5808f684SSatish Balay                idx.append(i*bs+j)
161*5808f684SSatish Balay        index = list(self.iset.getIndices())
162*5808f684SSatish Balay        #self.assertEqual(index, idx)
163*5808f684SSatish Balay
164*5808f684SSatish Balay
165*5808f684SSatish Balay# --------------------------------------------------------------------
166*5808f684SSatish Balay
167*5808f684SSatish Balayif __name__ == '__main__':
168*5808f684SSatish Balay    unittest.main()
169