xref: /petsc/src/binding/petsc4py/test/test_log.py (revision 226f8a8a5081bc6ad7227cd631662400f0d6e2a0)
15808f684SSatish Balay# --------------------------------------------------------------------
25808f684SSatish Balay
36f336411SStefano Zampiniif __name__ == '__main__':
46f336411SStefano Zampini    import sys
56f336411SStefano Zampini    import petsc4py
66f336411SStefano Zampini
7d75802c7SJacob Faibussowitsch    petsc4py.init(sys.argv + ['-log_view'])
85808f684SSatish Balay
95808f684SSatish Balay# --------------------------------------------------------------------
105808f684SSatish Balay
115808f684SSatish Balayfrom petsc4py import PETSc
125808f684SSatish Balayimport unittest
135808f684SSatish Balay
145808f684SSatish Balay# --------------------------------------------------------------------
155808f684SSatish Balay
165808f684SSatish Balay
176f336411SStefano Zampiniclass TestLog(unittest.TestCase):
185808f684SSatish Balay    def setUp(self):
195808f684SSatish Balay        # PETSc.Log.begin()
205808f684SSatish Balay        # register stages
215808f684SSatish Balay        self.stage1 = PETSc.Log.Stage('Stage 1')
225808f684SSatish Balay        self.stage2 = PETSc.Log.Stage('Stage 2')
235808f684SSatish Balay        # register classes
245808f684SSatish Balay        self.klassA = PETSc.Log.Class('Class A')
255808f684SSatish Balay        self.klassB = PETSc.Log.Class('Class B')
265808f684SSatish Balay        # register events
275808f684SSatish Balay        self.event1 = PETSc.Log.Event('Event 1')  # no class
285808f684SSatish Balay        self.event2 = PETSc.Log.Event('Event 2')  # no class
295808f684SSatish Balay        self.eventA = PETSc.Log.Event('Event A', self.klassA)
305808f684SSatish Balay        self.eventB = PETSc.Log.Event('Event B', self.klassB)
315808f684SSatish Balay
325808f684SSatish Balay    def testGetName(self):
335808f684SSatish Balay        self.assertEqual(self.klassA.name, 'Class A')
345808f684SSatish Balay        self.assertEqual(self.klassB.name, 'Class B')
355808f684SSatish Balay        self.assertEqual(self.event1.name, 'Event 1')
365808f684SSatish Balay        self.assertEqual(self.event2.name, 'Event 2')
375808f684SSatish Balay        self.assertEqual(self.eventA.name, 'Event A')
385808f684SSatish Balay        self.assertEqual(self.eventB.name, 'Event B')
395808f684SSatish Balay        self.assertEqual(self.stage1.name, 'Stage 1')
405808f684SSatish Balay        self.assertEqual(self.stage2.name, 'Stage 2')
415808f684SSatish Balay
425808f684SSatish Balay    def testLogBeginEnd(self):
435808f684SSatish Balay        # -----
445808f684SSatish Balay        self._run_events()  # in main stage
455808f684SSatish Balay        self._run_stages()  # in user stages
465808f684SSatish Balay        # -----
475808f684SSatish Balay        for event in self._get_events():
485808f684SSatish Balay            event.deactivate()
495808f684SSatish Balay            event.setActive(False)
505808f684SSatish Balay            event.active = False
515808f684SSatish Balay        self._run_events()  # should not be logged
525808f684SSatish Balay        for event in self._get_events():
535808f684SSatish Balay            event.activate()
545808f684SSatish Balay            event.setActive(True)
555808f684SSatish Balay            event.active = True
565808f684SSatish Balay        # -----
575808f684SSatish Balay        for klass in self._get_classes():
585808f684SSatish Balay            klass.deactivate()
595808f684SSatish Balay            klass.setActive(False)
605808f684SSatish Balay            klass.active = False
615808f684SSatish Balay        self._run_events()  # A and B should not be logged
625808f684SSatish Balay        for klass in self._get_classes():
635808f684SSatish Balay            klass.activate()
645808f684SSatish Balay            klass.setActive(True)
655808f684SSatish Balay            klass.active = True
665808f684SSatish Balay        # -----
675808f684SSatish Balay        for stage in self._get_stages():
685808f684SSatish Balay            active = stage.getActive()
695808f684SSatish Balay            self.assertTrue(active)
705808f684SSatish Balay            self.assertTrue(stage.active)
715808f684SSatish Balay            stage.setActive(False)
725808f684SSatish Balay            active = stage.getActive()
735808f684SSatish Balay            self.assertFalse(active)
745808f684SSatish Balay            self.assertFalse(stage.active)
755808f684SSatish Balay        self._run_stages()  # should not be logged
765808f684SSatish Balay        for stage in self._get_stages():
775808f684SSatish Balay            stage.setActive(True)
785808f684SSatish Balay            stage.active = True
795808f684SSatish Balay            active = stage.getActive()
805808f684SSatish Balay            self.assertTrue(active)
815808f684SSatish Balay            self.assertTrue(stage.active)
825808f684SSatish Balay        # -----
835808f684SSatish Balay        self._run_events()
845808f684SSatish Balay        self._run_stages()
855808f684SSatish Balay
86*52c9054eSConnor Ward    def test_log_decorator(self):
87*52c9054eSConnor Ward        timed_func = PETSc.Log.EventDecorator()(lambda: None)
88*52c9054eSConnor Ward        timed_func()
89*52c9054eSConnor Ward
905808f684SSatish Balay    def _run_stages(self):
915808f684SSatish Balay        for stage in self._get_stages():
925808f684SSatish Balay            self._run_events(stage)
935808f684SSatish Balay
945808f684SSatish Balay    def _get_stages(self):
955808f684SSatish Balay        return (self.stage1, self.stage2)
965808f684SSatish Balay
975808f684SSatish Balay    def _get_classes(self):
985808f684SSatish Balay        return (self.klassA, self.klassB)
995808f684SSatish Balay
1005808f684SSatish Balay    def _get_events(self):
1016f336411SStefano Zampini        return (self.event1, self.event2, self.eventA, self.eventB)
1025808f684SSatish Balay
1035808f684SSatish Balay    def _run_events(self, stage=None):
1045808f684SSatish Balay        if stage is not None:
1055808f684SSatish Balay            stage.push()
1065808f684SSatish Balay        self._events_begin()
1075808f684SSatish Balay        self._events_end()
1085808f684SSatish Balay        if stage is not None:
1095808f684SSatish Balay            stage.pop()
1105808f684SSatish Balay
1115808f684SSatish Balay    def _events_begin(self):
1125808f684SSatish Balay        for event in self._get_events():
1135808f684SSatish Balay            event.begin()
1145808f684SSatish Balay
1155808f684SSatish Balay    def _events_end(self):
1165808f684SSatish Balay        for event in reversed(self._get_events()):
1175808f684SSatish Balay            event.end()
1185808f684SSatish Balay
1195808f684SSatish Balay
1205808f684SSatish Balay# --------------------------------------------------------------------
1215808f684SSatish Balay
1225808f684SSatish Balayif __name__ == '__main__':
1235808f684SSatish Balay    unittest.main()
124