xref: /petsc/src/binding/petsc4py/test/test_log.py (revision 226f8a8a5081bc6ad7227cd631662400f0d6e2a0)
1# --------------------------------------------------------------------
2
3if __name__ == '__main__':
4    import sys
5    import petsc4py
6
7    petsc4py.init(sys.argv + ['-log_view'])
8
9# --------------------------------------------------------------------
10
11from petsc4py import PETSc
12import unittest
13
14# --------------------------------------------------------------------
15
16
17class TestLog(unittest.TestCase):
18    def setUp(self):
19        # PETSc.Log.begin()
20        # register stages
21        self.stage1 = PETSc.Log.Stage('Stage 1')
22        self.stage2 = PETSc.Log.Stage('Stage 2')
23        # register classes
24        self.klassA = PETSc.Log.Class('Class A')
25        self.klassB = PETSc.Log.Class('Class B')
26        # register events
27        self.event1 = PETSc.Log.Event('Event 1')  # no class
28        self.event2 = PETSc.Log.Event('Event 2')  # no class
29        self.eventA = PETSc.Log.Event('Event A', self.klassA)
30        self.eventB = PETSc.Log.Event('Event B', self.klassB)
31
32    def testGetName(self):
33        self.assertEqual(self.klassA.name, 'Class A')
34        self.assertEqual(self.klassB.name, 'Class B')
35        self.assertEqual(self.event1.name, 'Event 1')
36        self.assertEqual(self.event2.name, 'Event 2')
37        self.assertEqual(self.eventA.name, 'Event A')
38        self.assertEqual(self.eventB.name, 'Event B')
39        self.assertEqual(self.stage1.name, 'Stage 1')
40        self.assertEqual(self.stage2.name, 'Stage 2')
41
42    def testLogBeginEnd(self):
43        # -----
44        self._run_events()  # in main stage
45        self._run_stages()  # in user stages
46        # -----
47        for event in self._get_events():
48            event.deactivate()
49            event.setActive(False)
50            event.active = False
51        self._run_events()  # should not be logged
52        for event in self._get_events():
53            event.activate()
54            event.setActive(True)
55            event.active = True
56        # -----
57        for klass in self._get_classes():
58            klass.deactivate()
59            klass.setActive(False)
60            klass.active = False
61        self._run_events()  # A and B should not be logged
62        for klass in self._get_classes():
63            klass.activate()
64            klass.setActive(True)
65            klass.active = True
66        # -----
67        for stage in self._get_stages():
68            active = stage.getActive()
69            self.assertTrue(active)
70            self.assertTrue(stage.active)
71            stage.setActive(False)
72            active = stage.getActive()
73            self.assertFalse(active)
74            self.assertFalse(stage.active)
75        self._run_stages()  # should not be logged
76        for stage in self._get_stages():
77            stage.setActive(True)
78            stage.active = True
79            active = stage.getActive()
80            self.assertTrue(active)
81            self.assertTrue(stage.active)
82        # -----
83        self._run_events()
84        self._run_stages()
85
86    def test_log_decorator(self):
87        timed_func = PETSc.Log.EventDecorator()(lambda: None)
88        timed_func()
89
90    def _run_stages(self):
91        for stage in self._get_stages():
92            self._run_events(stage)
93
94    def _get_stages(self):
95        return (self.stage1, self.stage2)
96
97    def _get_classes(self):
98        return (self.klassA, self.klassB)
99
100    def _get_events(self):
101        return (self.event1, self.event2, self.eventA, self.eventB)
102
103    def _run_events(self, stage=None):
104        if stage is not None:
105            stage.push()
106        self._events_begin()
107        self._events_end()
108        if stage is not None:
109            stage.pop()
110
111    def _events_begin(self):
112        for event in self._get_events():
113            event.begin()
114
115    def _events_end(self):
116        for event in reversed(self._get_events()):
117            event.end()
118
119
120# --------------------------------------------------------------------
121
122if __name__ == '__main__':
123    unittest.main()
124