xref: /petsc/src/binding/petsc4py/test/test_lgmap.py (revision 5808f68492579297331054bd8ff190489c3b8c20)
1*5808f684SSatish Balayfrom petsc4py import PETSc
2*5808f684SSatish Balayimport unittest
3*5808f684SSatish Balay
4*5808f684SSatish Balay# --------------------------------------------------------------------
5*5808f684SSatish Balay
6*5808f684SSatish Balayclass BaseTestLGMap(object):
7*5808f684SSatish Balay
8*5808f684SSatish Balay    def _mk_idx(self, comm):
9*5808f684SSatish Balay        comm_size = comm.getSize()
10*5808f684SSatish Balay        comm_rank = comm.getRank()
11*5808f684SSatish Balay        lsize = 10
12*5808f684SSatish Balay        first = lsize * comm_rank
13*5808f684SSatish Balay        last  = first + lsize
14*5808f684SSatish Balay        if comm_rank > 0:
15*5808f684SSatish Balay            first -= 1
16*5808f684SSatish Balay        if comm_rank < (comm_size-1):
17*5808f684SSatish Balay            last += 1
18*5808f684SSatish Balay        return list(range(first, last))
19*5808f684SSatish Balay
20*5808f684SSatish Balay    def tearDown(self):
21*5808f684SSatish Balay        self.lgmap = None
22*5808f684SSatish Balay
23*5808f684SSatish Balay    def testGetSize(self):
24*5808f684SSatish Balay        size = self.lgmap.getSize()
25*5808f684SSatish Balay        self.assertTrue(size >= 0)
26*5808f684SSatish Balay
27*5808f684SSatish Balay    def testGetIndices(self):
28*5808f684SSatish Balay        size = self.lgmap.getSize()
29*5808f684SSatish Balay        idx  = self.lgmap.getIndices()
30*5808f684SSatish Balay        self.assertEqual(len(idx), size)
31*5808f684SSatish Balay        for i, val in enumerate(self.idx):
32*5808f684SSatish Balay            self.assertEqual(idx[i], val)
33*5808f684SSatish Balay
34*5808f684SSatish Balay    def testGetInfo(self):
35*5808f684SSatish Balay        info = self.lgmap.getInfo()
36*5808f684SSatish Balay        self.assertEqual(type(info), dict)
37*5808f684SSatish Balay        if self.lgmap.getComm().getSize() == 1:
38*5808f684SSatish Balay            self.assertEqual(info, {})
39*5808f684SSatish Balay        else:
40*5808f684SSatish Balay            self.assertTrue(len(info) > 1)
41*5808f684SSatish Balay            self.assertTrue(len(info) < 4)
42*5808f684SSatish Balay
43*5808f684SSatish Balay    def testApply(self):
44*5808f684SSatish Balay        idxin  = list(range(self.lgmap.getSize()))
45*5808f684SSatish Balay        idxout = self.lgmap.apply(idxin)
46*5808f684SSatish Balay        self.lgmap.apply(idxin, idxout)
47*5808f684SSatish Balay        invmap = self.lgmap.applyInverse(idxout)
48*5808f684SSatish Balay
49*5808f684SSatish Balay
50*5808f684SSatish Balay    def testApplyIS(self):
51*5808f684SSatish Balay        is_in  = PETSc.IS().createStride(self.lgmap.getSize())
52*5808f684SSatish Balay        is_out = self.lgmap.apply(is_in)
53*5808f684SSatish Balay
54*5808f684SSatish Balay    def testProperties(self):
55*5808f684SSatish Balay        for prop in ('size', 'indices', 'info'):
56*5808f684SSatish Balay            self.assertTrue(hasattr(self.lgmap, prop))
57*5808f684SSatish Balay
58*5808f684SSatish Balay# --------------------------------------------------------------------
59*5808f684SSatish Balay
60*5808f684SSatish Balayclass TestLGMap(BaseTestLGMap, unittest.TestCase):
61*5808f684SSatish Balay
62*5808f684SSatish Balay    def setUp(self):
63*5808f684SSatish Balay        self.idx   = self._mk_idx(PETSc.COMM_WORLD)
64*5808f684SSatish Balay        self.lgmap = PETSc.LGMap().create(self.idx, comm=PETSc.COMM_WORLD)
65*5808f684SSatish Balay
66*5808f684SSatish Balayclass TestLGMapIS(BaseTestLGMap, unittest.TestCase):
67*5808f684SSatish Balay
68*5808f684SSatish Balay    def setUp(self):
69*5808f684SSatish Balay        self.idx   = self._mk_idx(PETSc.COMM_WORLD)
70*5808f684SSatish Balay        self.iset  = PETSc.IS().createGeneral(self.idx, comm=PETSc.COMM_WORLD)
71*5808f684SSatish Balay        self.lgmap = PETSc.LGMap().create(self.iset)
72*5808f684SSatish Balay
73*5808f684SSatish Balay    def tearDown(self):
74*5808f684SSatish Balay        self.iset  = None
75*5808f684SSatish Balay        self.lgmap = None
76*5808f684SSatish Balay
77*5808f684SSatish Balay    def testSameComm(self):
78*5808f684SSatish Balay        comm1 = self.lgmap.getComm()
79*5808f684SSatish Balay        comm2 = self.iset.getComm()
80*5808f684SSatish Balay        self.assertEqual(comm1, comm2)
81*5808f684SSatish Balay
82*5808f684SSatish Balay# --------------------------------------------------------------------
83*5808f684SSatish Balay
84*5808f684SSatish Balayclass TestLGMapBlock(unittest.TestCase):
85*5808f684SSatish Balay
86*5808f684SSatish Balay    BS = 3
87*5808f684SSatish Balay
88*5808f684SSatish Balay    def setUp(self):
89*5808f684SSatish Balay        comm = PETSc.COMM_WORLD
90*5808f684SSatish Balay        comm_size = comm.getSize()
91*5808f684SSatish Balay        comm_rank = comm.getRank()
92*5808f684SSatish Balay        lsize = 10
93*5808f684SSatish Balay        first = lsize * comm_rank
94*5808f684SSatish Balay        last  = first + lsize
95*5808f684SSatish Balay        if comm_rank > 0:
96*5808f684SSatish Balay            first -= 1
97*5808f684SSatish Balay        if comm_rank < (comm_size-1):
98*5808f684SSatish Balay            last += 1
99*5808f684SSatish Balay        self.idx = list(range(first, last))
100*5808f684SSatish Balay        bs = self.BS
101*5808f684SSatish Balay        self.lgmap = PETSc.LGMap().create(self.idx, bs, comm=PETSc.COMM_WORLD)
102*5808f684SSatish Balay
103*5808f684SSatish Balay    def tearDown(self):
104*5808f684SSatish Balay        self.lgmap = None
105*5808f684SSatish Balay
106*5808f684SSatish Balay    def testGetSize(self):
107*5808f684SSatish Balay        size = self.lgmap.getSize()
108*5808f684SSatish Balay        self.assertTrue(size >= 0)
109*5808f684SSatish Balay
110*5808f684SSatish Balay    def testGetBlockSize(self):
111*5808f684SSatish Balay        bs = self.lgmap.getBlockSize()
112*5808f684SSatish Balay        self.assertEqual(bs, self.BS)
113*5808f684SSatish Balay
114*5808f684SSatish Balay    def testGetBlockIndices(self):
115*5808f684SSatish Balay        size = self.lgmap.getSize()
116*5808f684SSatish Balay        bs = self.lgmap.getBlockSize()
117*5808f684SSatish Balay        idx = self.lgmap.getBlockIndices()
118*5808f684SSatish Balay        self.assertEqual(len(idx), size//bs)
119*5808f684SSatish Balay        for i, val in enumerate(self.idx):
120*5808f684SSatish Balay            self.assertEqual(idx[i], val)
121*5808f684SSatish Balay
122*5808f684SSatish Balay    def testGetIndices(self):
123*5808f684SSatish Balay        size = self.lgmap.getSize()
124*5808f684SSatish Balay        bs = self.lgmap.getBlockSize()
125*5808f684SSatish Balay        idx = self.lgmap.getIndices()
126*5808f684SSatish Balay        self.assertEqual(len(idx), size)
127*5808f684SSatish Balay        for i, val in enumerate(self.idx):
128*5808f684SSatish Balay            for j in range(bs):
129*5808f684SSatish Balay                self.assertEqual(idx[i*bs+j], val*bs+j)
130*5808f684SSatish Balay
131*5808f684SSatish Balay    def testGetBlockInfo(self):
132*5808f684SSatish Balay        info = self.lgmap.getBlockInfo()
133*5808f684SSatish Balay        self.assertEqual(type(info), dict)
134*5808f684SSatish Balay        if self.lgmap.getComm().getSize() == 1:
135*5808f684SSatish Balay            self.assertEqual(info, {})
136*5808f684SSatish Balay        else:
137*5808f684SSatish Balay            self.assertTrue(len(info) > 1)
138*5808f684SSatish Balay            self.assertTrue(len(info) < 4)
139*5808f684SSatish Balay
140*5808f684SSatish Balay    def testGetInfo(self):
141*5808f684SSatish Balay        info = self.lgmap.getInfo()
142*5808f684SSatish Balay        self.assertEqual(type(info), dict)
143*5808f684SSatish Balay        if self.lgmap.getComm().getSize() == 1:
144*5808f684SSatish Balay            self.assertEqual(info, {})
145*5808f684SSatish Balay        else:
146*5808f684SSatish Balay            self.assertTrue(len(info) > 1)
147*5808f684SSatish Balay            self.assertTrue(len(info) < 4)
148*5808f684SSatish Balay
149*5808f684SSatish Balay# --------------------------------------------------------------------
150*5808f684SSatish Balay
151*5808f684SSatish Balayif __name__ == '__main__':
152*5808f684SSatish Balay    unittest.main()
153