xref: /petsc/src/binding/petsc4py/test/test_object.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 BaseTestObject(object):
7*5808f684SSatish Balay
8*5808f684SSatish Balay    CLASS, FACTORY = None, None
9*5808f684SSatish Balay    TARGS, KARGS = (), {}
10*5808f684SSatish Balay    BUILD = None
11*5808f684SSatish Balay    def setUp(self):
12*5808f684SSatish Balay        self.obj = self.CLASS()
13*5808f684SSatish Balay        getattr(self.obj,self.FACTORY)(*self.TARGS, **self.KARGS)
14*5808f684SSatish Balay        if not self.obj: self.obj.create()
15*5808f684SSatish Balay
16*5808f684SSatish Balay    def tearDown(self):
17*5808f684SSatish Balay        self.obj = None
18*5808f684SSatish Balay
19*5808f684SSatish Balay    def testTypeRegistry(self):
20*5808f684SSatish Balay        type_reg = PETSc.__type_registry__
21*5808f684SSatish Balay        classid = self.obj.getClassId()
22*5808f684SSatish Balay        typeobj = self.CLASS
23*5808f684SSatish Balay        if isinstance(self.obj, PETSc.DMDA):
24*5808f684SSatish Balay            typeobj = PETSc.DM
25*5808f684SSatish Balay        self.assertTrue(type_reg[classid] is typeobj )
26*5808f684SSatish Balay
27*5808f684SSatish Balay    def testLogClass(self):
28*5808f684SSatish Balay        name = self.CLASS.__name__
29*5808f684SSatish Balay        if name == 'DMDA': name = 'DM'
30*5808f684SSatish Balay        logcls = PETSc.Log.Class(name)
31*5808f684SSatish Balay        classid = self.obj.getClassId()
32*5808f684SSatish Balay        self.assertEqual(logcls.id, classid)
33*5808f684SSatish Balay
34*5808f684SSatish Balay    def testClass(self):
35*5808f684SSatish Balay        self.assertTrue(isinstance(self.obj, self.CLASS))
36*5808f684SSatish Balay        self.assertTrue(type(self.obj) is self.CLASS)
37*5808f684SSatish Balay
38*5808f684SSatish Balay    def testNonZero(self):
39*5808f684SSatish Balay        self.assertTrue(bool(self.obj))
40*5808f684SSatish Balay
41*5808f684SSatish Balay    def testDestroy(self):
42*5808f684SSatish Balay        self.assertTrue(bool(self.obj))
43*5808f684SSatish Balay        self.obj.destroy()
44*5808f684SSatish Balay        self.assertFalse(bool(self.obj))
45*5808f684SSatish Balay        ## self.assertRaises(PETSc.Error, self.obj.destroy)
46*5808f684SSatish Balay        ## self.assertTrue(self.obj.this is this)
47*5808f684SSatish Balay
48*5808f684SSatish Balay    def testOptions(self):
49*5808f684SSatish Balay        self.assertFalse(self.obj.getOptionsPrefix())
50*5808f684SSatish Balay        prefix1 = 'my_'
51*5808f684SSatish Balay        self.obj.setOptionsPrefix(prefix1)
52*5808f684SSatish Balay        self.assertEqual(self.obj.getOptionsPrefix(), prefix1)
53*5808f684SSatish Balay        prefix2 = 'opt_'
54*5808f684SSatish Balay        self.obj.setOptionsPrefix(prefix2)
55*5808f684SSatish Balay        self.assertEqual(self.obj.getOptionsPrefix(), prefix2)
56*5808f684SSatish Balay        ## self.obj.appendOptionsPrefix(prefix1)
57*5808f684SSatish Balay        ## self.assertEqual(self.obj.getOptionsPrefix(),
58*5808f684SSatish Balay        ##                  prefix2 + prefix1)
59*5808f684SSatish Balay        ## self.obj.prependOptionsPrefix(prefix1)
60*5808f684SSatish Balay        ## self.assertEqual(self.obj.getOptionsPrefix(),
61*5808f684SSatish Balay        ##                  prefix1 + prefix2 + prefix1)
62*5808f684SSatish Balay        self.obj.setFromOptions()
63*5808f684SSatish Balay
64*5808f684SSatish Balay    def testName(self):
65*5808f684SSatish Balay        oldname = self.obj.getName()
66*5808f684SSatish Balay        newname = '%s-%s' %(oldname, oldname)
67*5808f684SSatish Balay        self.obj.setName(newname)
68*5808f684SSatish Balay        self.assertEqual(self.obj.getName(), newname)
69*5808f684SSatish Balay        self.obj.setName(oldname)
70*5808f684SSatish Balay        self.assertEqual(self.obj.getName(), oldname)
71*5808f684SSatish Balay
72*5808f684SSatish Balay    def testComm(self):
73*5808f684SSatish Balay        comm = self.obj.getComm()
74*5808f684SSatish Balay        self.assertTrue(isinstance(comm, PETSc.Comm))
75*5808f684SSatish Balay        self.assertTrue(comm in [PETSc.COMM_SELF, PETSc.COMM_WORLD])
76*5808f684SSatish Balay
77*5808f684SSatish Balay    def testRefCount(self):
78*5808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 1)
79*5808f684SSatish Balay        self.obj.incRef()
80*5808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 2)
81*5808f684SSatish Balay        self.obj.incRef()
82*5808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 3)
83*5808f684SSatish Balay        self.obj.decRef()
84*5808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 2)
85*5808f684SSatish Balay        self.obj.decRef()
86*5808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 1)
87*5808f684SSatish Balay        self.obj.decRef()
88*5808f684SSatish Balay        self.assertFalse(bool(self.obj))
89*5808f684SSatish Balay
90*5808f684SSatish Balay    def testHandle(self):
91*5808f684SSatish Balay        self.assertTrue(self.obj.handle)
92*5808f684SSatish Balay        self.assertTrue(self.obj.fortran)
93*5808f684SSatish Balay        h, f = self.obj.handle, self.obj.fortran
94*5808f684SSatish Balay        if (h>0 and f>0) or (h<0 and f<0):
95*5808f684SSatish Balay            self.assertEqual(h, f)
96*5808f684SSatish Balay        self.obj.destroy()
97*5808f684SSatish Balay        self.assertFalse(self.obj.handle)
98*5808f684SSatish Balay        self.assertFalse(self.obj.fortran)
99*5808f684SSatish Balay
100*5808f684SSatish Balay    def testComposeQuery(self):
101*5808f684SSatish Balay        import copy
102*5808f684SSatish Balay        try:
103*5808f684SSatish Balay            myobj = copy.deepcopy(self.obj)
104*5808f684SSatish Balay        except NotImplementedError:
105*5808f684SSatish Balay            return
106*5808f684SSatish Balay        self.assertEqual(myobj.getRefCount(), 1)
107*5808f684SSatish Balay        self.obj.compose('myobj', myobj)
108*5808f684SSatish Balay        self.assertTrue(type(self.obj.query('myobj')) is self.CLASS)
109*5808f684SSatish Balay        self.assertEqual(self.obj.query('myobj'), myobj)
110*5808f684SSatish Balay        self.assertEqual(myobj.getRefCount(), 2)
111*5808f684SSatish Balay        self.obj.compose('myobj', None)
112*5808f684SSatish Balay        self.assertEqual(myobj.getRefCount(), 1)
113*5808f684SSatish Balay        self.assertEqual(self.obj.query('myobj'), None)
114*5808f684SSatish Balay        myobj.destroy()
115*5808f684SSatish Balay
116*5808f684SSatish Balay    def testProperties(self):
117*5808f684SSatish Balay        self.assertEqual(self.obj.getClassId(),   self.obj.classid)
118*5808f684SSatish Balay        self.assertEqual(self.obj.getClassName(), self.obj.klass)
119*5808f684SSatish Balay        self.assertEqual(self.obj.getType(),      self.obj.type)
120*5808f684SSatish Balay        self.assertEqual(self.obj.getName(),      self.obj.name)
121*5808f684SSatish Balay        self.assertEqual(self.obj.getComm(),      self.obj.comm)
122*5808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(),  self.obj.refcount)
123*5808f684SSatish Balay
124*5808f684SSatish Balay    def testShallowCopy(self):
125*5808f684SSatish Balay        import copy
126*5808f684SSatish Balay        rc = self.obj.getRefCount()
127*5808f684SSatish Balay        obj = copy.copy(self.obj)
128*5808f684SSatish Balay        self.assertTrue(obj is not self.obj)
129*5808f684SSatish Balay        self.assertTrue(obj == self.obj)
130*5808f684SSatish Balay        self.assertTrue(type(obj) is type(self.obj))
131*5808f684SSatish Balay        self.assertEqual(obj.getRefCount(), rc+1)
132*5808f684SSatish Balay        del obj
133*5808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), rc)
134*5808f684SSatish Balay
135*5808f684SSatish Balay    def testDeepCopy(self):
136*5808f684SSatish Balay        import copy
137*5808f684SSatish Balay        rc = self.obj.getRefCount()
138*5808f684SSatish Balay        try:
139*5808f684SSatish Balay            obj = copy.deepcopy(self.obj)
140*5808f684SSatish Balay        except NotImplementedError:
141*5808f684SSatish Balay            return
142*5808f684SSatish Balay        self.assertTrue(obj is not self.obj)
143*5808f684SSatish Balay        self.assertTrue(obj != self.obj)
144*5808f684SSatish Balay        self.assertTrue(type(obj) is type(self.obj))
145*5808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), rc)
146*5808f684SSatish Balay        self.assertEqual(obj.getRefCount(), 1)
147*5808f684SSatish Balay        del obj
148*5808f684SSatish Balay
149*5808f684SSatish Balay# --------------------------------------------------------------------
150*5808f684SSatish Balay
151*5808f684SSatish Balayclass TestObjectRandom(BaseTestObject, unittest.TestCase):
152*5808f684SSatish Balay    CLASS = PETSc.Random
153*5808f684SSatish Balay    FACTORY = 'create'
154*5808f684SSatish Balay
155*5808f684SSatish Balayclass TestObjectViewer(BaseTestObject, unittest.TestCase):
156*5808f684SSatish Balay    CLASS = PETSc.Viewer
157*5808f684SSatish Balay    FACTORY = 'create'
158*5808f684SSatish Balay
159*5808f684SSatish Balayclass TestObjectIS(BaseTestObject, unittest.TestCase):
160*5808f684SSatish Balay    CLASS  = PETSc.IS
161*5808f684SSatish Balay    FACTORY = 'createGeneral'
162*5808f684SSatish Balay    TARGS = ([],)
163*5808f684SSatish Balay
164*5808f684SSatish Balayclass TestObjectLGMap(BaseTestObject, unittest.TestCase):
165*5808f684SSatish Balay    CLASS = PETSc.LGMap
166*5808f684SSatish Balay    FACTORY = 'create'
167*5808f684SSatish Balay    TARGS = ([],)
168*5808f684SSatish Balay
169*5808f684SSatish Balayclass TestObjectAO(BaseTestObject, unittest.TestCase):
170*5808f684SSatish Balay    CLASS  = PETSc.AO
171*5808f684SSatish Balay    FACTORY = 'createMapping'
172*5808f684SSatish Balay    TARGS = ([], [])
173*5808f684SSatish Balay
174*5808f684SSatish Balayclass TestObjectDMDA(BaseTestObject, unittest.TestCase):
175*5808f684SSatish Balay    CLASS  = PETSc.DMDA
176*5808f684SSatish Balay    FACTORY = 'create'
177*5808f684SSatish Balay    TARGS = ([3,3,3],)
178*5808f684SSatish Balay
179*5808f684SSatish Balayclass TestObjectDS(BaseTestObject, unittest.TestCase):
180*5808f684SSatish Balay    CLASS  = PETSc.DS
181*5808f684SSatish Balay    FACTORY = 'create'
182*5808f684SSatish Balay
183*5808f684SSatish Balayclass TestObjectVec(BaseTestObject, unittest.TestCase):
184*5808f684SSatish Balay    CLASS   = PETSc.Vec
185*5808f684SSatish Balay    FACTORY = 'createSeq'
186*5808f684SSatish Balay    TARGS   = (0,)
187*5808f684SSatish Balay
188*5808f684SSatish Balay    def setUp(self):
189*5808f684SSatish Balay        BaseTestObject.setUp(self)
190*5808f684SSatish Balay        self.obj.assemble()
191*5808f684SSatish Balay
192*5808f684SSatish Balayclass TestObjectScatter(BaseTestObject, unittest.TestCase):
193*5808f684SSatish Balay    CLASS  = PETSc.Scatter
194*5808f684SSatish Balay    FACTORY = 'create'
195*5808f684SSatish Balay    def setUp(self):
196*5808f684SSatish Balay        v1, v2 = PETSc.Vec().createSeq(0), PETSc.Vec().createSeq(0)
197*5808f684SSatish Balay        i1, i2 = PETSc.IS().createGeneral([]), PETSc.IS().createGeneral([])
198*5808f684SSatish Balay        self.obj = PETSc.Scatter().create(v1, i1, v2, i2)
199*5808f684SSatish Balay        del v1, v2, i1, i2
200*5808f684SSatish Balay
201*5808f684SSatish Balayclass TestObjectMat(BaseTestObject, unittest.TestCase):
202*5808f684SSatish Balay    CLASS  = PETSc.Mat
203*5808f684SSatish Balay    FACTORY = 'createAIJ'
204*5808f684SSatish Balay    TARGS = (0,)
205*5808f684SSatish Balay    KARGS   = {'nnz':0, 'comm': PETSc.COMM_SELF}
206*5808f684SSatish Balay
207*5808f684SSatish Balay    def setUp(self):
208*5808f684SSatish Balay        BaseTestObject.setUp(self)
209*5808f684SSatish Balay        self.obj.assemble()
210*5808f684SSatish Balay
211*5808f684SSatish Balayclass TestObjectNullSpace(BaseTestObject, unittest.TestCase):
212*5808f684SSatish Balay    CLASS  = PETSc.NullSpace
213*5808f684SSatish Balay    FACTORY = 'create'
214*5808f684SSatish Balay    TARGS = (True, [])
215*5808f684SSatish Balay
216*5808f684SSatish Balayclass TestObjectKSP(BaseTestObject, unittest.TestCase):
217*5808f684SSatish Balay    CLASS = PETSc.KSP
218*5808f684SSatish Balay    FACTORY = 'create'
219*5808f684SSatish Balay
220*5808f684SSatish Balayclass TestObjectPC(BaseTestObject, unittest.TestCase):
221*5808f684SSatish Balay    CLASS = PETSc.PC
222*5808f684SSatish Balay    FACTORY = 'create'
223*5808f684SSatish Balay
224*5808f684SSatish Balayclass TestObjectSNES(BaseTestObject, unittest.TestCase):
225*5808f684SSatish Balay    CLASS = PETSc.SNES
226*5808f684SSatish Balay    FACTORY = 'create'
227*5808f684SSatish Balay
228*5808f684SSatish Balayclass TestObjectTS(BaseTestObject, unittest.TestCase):
229*5808f684SSatish Balay    CLASS  = PETSc.TS
230*5808f684SSatish Balay    FACTORY = 'create'
231*5808f684SSatish Balay    def setUp(self):
232*5808f684SSatish Balay        super(TestObjectTS, self).setUp()
233*5808f684SSatish Balay        self.obj.setProblemType(PETSc.TS.ProblemType.NONLINEAR)
234*5808f684SSatish Balay        self.obj.setType(PETSc.TS.Type.BEULER)
235*5808f684SSatish Balay
236*5808f684SSatish Balayclass TestObjectTAO(BaseTestObject, unittest.TestCase):
237*5808f684SSatish Balay    CLASS  = PETSc.TAO
238*5808f684SSatish Balay    FACTORY = 'create'
239*5808f684SSatish Balay
240*5808f684SSatish Balayclass TestObjectAOBasic(BaseTestObject, unittest.TestCase):
241*5808f684SSatish Balay    CLASS  = PETSc.AO
242*5808f684SSatish Balay    FACTORY = 'createBasic'
243*5808f684SSatish Balay    TARGS = ([], [])
244*5808f684SSatish Balay
245*5808f684SSatish Balayclass TestObjectAOMapping(BaseTestObject, unittest.TestCase):
246*5808f684SSatish Balay    CLASS  = PETSc.AO
247*5808f684SSatish Balay    FACTORY = 'createMapping'
248*5808f684SSatish Balay    TARGS = ([], [])
249*5808f684SSatish Balay
250*5808f684SSatish Balay# class TestObjectFE(BaseTestObject, unittest.TestCase):
251*5808f684SSatish Balay#     CLASS  = PETSc.FE
252*5808f684SSatish Balay#     FACTORY = 'create'
253*5808f684SSatish Balay#
254*5808f684SSatish Balay# class TestObjectQuad(BaseTestObject, unittest.TestCase):
255*5808f684SSatish Balay#     CLASS  = PETSc.Quad
256*5808f684SSatish Balay#     FACTORY = 'create'
257*5808f684SSatish Balay
258*5808f684SSatish Balayclass TestObjectDMLabel(BaseTestObject, unittest.TestCase):
259*5808f684SSatish Balay    CLASS  = PETSc.DMLabel
260*5808f684SSatish Balay    FACTORY = 'create'
261*5808f684SSatish Balay    TARGS = ("test",)
262*5808f684SSatish Balay
263*5808f684SSatish Balay# --------------------------------------------------------------------
264*5808f684SSatish Balay
265*5808f684SSatish Balayimport numpy
266*5808f684SSatish Balayif numpy.iscomplexobj(PETSc.ScalarType()):
267*5808f684SSatish Balay    del TestObjectTAO
268*5808f684SSatish Balay
269*5808f684SSatish Balayif __name__ == '__main__':
270*5808f684SSatish Balay    unittest.main()
271