示例#1
0
    def test_run(self):
        source = MemorySource(list(range(10)))
        sink = MemorySink()

        Pipe.join(source, [Pipe_Tests.ProcessNameFilter()], sink).run()

        self.assertEqual(sink.items, ['MainProcess'] * 10)
示例#2
0
    def test_exception(self):
        CobaConfig.Logger = BasicLogger(MemorySink())

        list(MultiprocessFilter([ExceptionFilter()], 2, 1).filter(range(4)))

        for item in CobaConfig.Logger.sink.items:
            self.assertIn("Unexpected exception:", item)
示例#3
0
    def test_time_two_separate(self):

        sink   = MemorySink()
        logger = IndentLogger(sink, with_stamp=False)
        logs   = sink.items

        with logger.time('a'):
            time.sleep(0.05)
            with logger.time('d'):
                logger.log('e')
                time.sleep(0.05)
        
        logger.log('g')
        
        with logger.time('a'):
            time.sleep(0.05)
            with logger.time('d'):
                logger.log('e')
                time.sleep(0.05)
        
        self.assertEqual(7, len(logs))
        self.assertRegexpMatches(logs[0 ], 'a \\(\\d+\\.\\d+ seconds\\)')
        self.assertRegexpMatches(logs[1 ], '  \\* d \\(\\d+\\.\\d+ seconds\\)')
        self.assertEqual        (logs[2 ], '    > e')
        self.assertEqual        (logs[3 ], 'g')
        self.assertRegexpMatches(logs[4 ], 'a \\(\\d+\\.\\d+ seconds\\)')
        self.assertRegexpMatches(logs[5 ], '  \\* d \\(\\d+\\.\\d+ seconds\\)')
        self.assertEqual        (logs[6 ], '    > e')

        self.assertAlmostEqual(float(logs[0][3:7 ]), 0.10, 1)
        self.assertAlmostEqual(float(logs[1][7:11]), 0.05, 1)
        self.assertAlmostEqual(float(logs[4][3:7 ]), 0.10, 1)
        self.assertAlmostEqual(float(logs[5][7:11]), 0.05, 1)
示例#4
0
    def test_time_with_1(self):

        #This test is somewhat time dependent.
        #I don't think it should ever fail, but if it does
        #try running it again and see if it works that time.

        sink   = MemorySink()
        logger = BasicLogger(sink,with_stamp=False, with_name=False)
        logs   = sink.items

        with logger.time('a'):
            logger.log('c')
            time.sleep(0.15)
            logger.log('d')
        logger.log('e')

        self.assertEqual(5, len(logs))

        self.assertEqual        (logs[0], 'a')
        self.assertEqual        (logs[1], 'c')
        self.assertEqual        (logs[2], 'd')
        self.assertRegexpMatches(logs[3], '^a \\(\\d+\\.\\d+ seconds\\) \\(completed\\)$')
        self.assertEqual        (logs[4], 'e')


        self.assertAlmostEqual(float(logs[3][3:7 ]), 0.15, 1)
示例#5
0
    def test_time_with_3(self):

        sink   = MemorySink()
        logger = IndentLogger(sink, with_stamp=False)
        logs   = sink.items

        with logger.time('a'):
            with logger.log('c'):
                time.sleep(0.05)
                with logger.time('d'):
                    logger.log('e')
                    time.sleep(0.05)
                with logger.time('d'):
                    logger.log('e')
                    time.sleep(0.05)
            logger.log('f')
        logger.log('g')

        self.assertEqual(8, len(logs))
        self.assertRegexpMatches(logs[0], '^a \\(\\d+\\.\\d+ seconds\\) \\(completed\\)')
        self.assertEqual        (logs[1], '  * c')
        self.assertRegexpMatches(logs[2], '^    > d \\(\\d+\\.\\d+ seconds\\) \\(completed\\)$')
        self.assertEqual        (logs[3], '      - e')
        self.assertRegexpMatches(logs[4], '^    > d \\(\\d+\\.\\d+ seconds\\) \\(completed\\)$')
        self.assertEqual        (logs[5], '      - e')
        self.assertEqual        (logs[6], '  * f')
        self.assertEqual        (logs[7], 'g'    )

        self.assertAlmostEqual(float(logs[0][3:7 ]), 0.15, 1)
        self.assertAlmostEqual(float(logs[2][9:13]), 0.05, 1)
        self.assertAlmostEqual(float(logs[4][9:13]), 0.05, 1)
示例#6
0
    def test_not_picklable_sans_reduce(self):
        CobaConfig.Logger = BasicLogger(MemorySink())

        list(
            MultiprocessFilter([ProcessNameFilter()], 2,
                               1).filter([NotPicklableFilter()]))

        self.assertEqual(1, len(CobaConfig.Logger.sink.items))
        self.assertIn("pickle", CobaConfig.Logger.sink.items[0])
示例#7
0
    def test_wrapped_not_picklable_learner_sans_reduce(self):
        sim1 = LambdaSimulation(5, lambda i: i, lambda i, c: [0, 1, 2],
                                lambda i, c, a: cast(float, a))
        learner = WrappedLearner(NotPicklableLearner())
        benchmark = Benchmark([sim1])

        CobaConfig.Logger = BasicLogger(MemorySink())

        benchmark.evaluate([learner])

        self.assertEqual(1, len(CobaConfig.Logger.sink.items))
        self.assertIn("pickle", CobaConfig.Logger.sink.items[0])
示例#8
0
    def test_log(self):

        sink   = MemorySink()
        logger = IndentLogger(sink, with_stamp=False, with_name=False)
        logs   = sink.items

        logger.log('a')
        logger.log('c')
        logger.log('d')

        self.assertEqual(logs[0], 'a' )
        self.assertEqual(logs[1], 'c' )
        self.assertEqual(logs[2], 'd' )
示例#9
0
    def test_logging(self):

        #this is an important example. Even if we set the main logger's
        #with_stamp to false it doesn't propogate to the processes.

        logger_sink = MemorySink()
        logger = IndentLogger(logger_sink, with_stamp=False, with_name=True)

        CobaConfig.Logger = logger

        items = list(
            MultiprocessFilter([ProcessNameFilter()], 2, 1).filter(range(4)))

        self.assertEqual(len(logger_sink.items), 4)
        self.assertEqual(items, [l.split(' ')[3] for l in logger_sink.items])
        self.assertEqual(items, [l.split(' ')[-1] for l in logger_sink.items])
示例#10
0
    def test_log_exception_2(self):
        
        sink   = MemorySink()
        logger = IndentLogger(sink, with_stamp=False)
        logs   = sink.items
        exception = Exception("Test Exception")

        logger.log('a')
        logger.log_exception(exception,'')

        tb = ''.join(traceback.format_tb(exception.__traceback__))
        msg = ''.join(traceback.TracebackException.from_exception(exception).format_exception_only())

        expected_msg = f"\n\n{tb}\n  {msg}"

        self.assertTrue(exception.__logged__) #type:ignore
        self.assertEqual(logs[0], "a")
        self.assertEqual(logs[1], expected_msg)
示例#11
0
    def test_log_exception_1(self):
        
        sink   = MemorySink()
        logger = IndentLogger(sink, with_stamp=False)
        logs   = sink.items

        try:
            raise Exception("Test Exception")
        except Exception as ex:
            logger.log_exception(ex,'error:')

            tb = ''.join(traceback.format_tb(ex.__traceback__))
            msg = ''.join(traceback.TracebackException.from_exception(ex).format_exception_only())

            expected_msg = f"error:\n\n{tb}\n  {msg}"

            self.assertTrue(ex.__logged__) #type:ignore
            self.assertEqual(len(logs), 1)
            self.assertEqual(logs[0], expected_msg)
示例#12
0
    def test_log_with_1(self):

        #This test is somewhat time dependent.
        #I don't think it should ever fail, but if it does
        #try running it again and see if it works that time.

        sink   = MemorySink()
        logger = IndentLogger(sink,with_stamp=False, with_name=False)
        logs   = sink.items

        with logger.log('a'):
            logger.log('c')
            logger.log('d')
        logger.log('e')

        self.assertEqual(4, len(logs))
        self.assertEqual(logs[0], 'a'    )
        self.assertEqual(logs[1], '  * c')
        self.assertEqual(logs[2], '  * d')
        self.assertEqual(logs[3], 'e'    )
示例#13
0
    def test_ignore_raise(self):

        log_sink = MemorySink()
        CobaConfig.Logger = IndentLogger(log_sink)

        sim1 = LambdaSimulation(2, lambda i: i, lambda i, c: [0, 1, 2],
                                lambda i, c, a: cast(float, a))
        sim2 = LambdaSimulation(3, lambda i: i, lambda i, c: [3, 4, 5],
                                lambda i, c, a: cast(float, a))
        learners = [ModuloLearner(), BrokenLearner()]
        benchmark = Benchmark([sim1, sim2])

        result = benchmark.evaluate(learners)
        actual_learners = result.learners.to_tuples()
        actual_simulations = result.simulations.to_tuples()
        actual_interactions = result.interactions.to_tuples()

        expected_learners = [(0, "Modulo(p=0)", "Modulo", '0'),
                             (1, "Broken", "Broken", float('nan'))]
        expected_simulations = [
            (0, "LambdaSimulation", "None", "None", '"LambdaSimulation"'),
            (1, "LambdaSimulation", "None", "None", '"LambdaSimulation"')
        ]
        expected_interactions = [(0, 0, 1, 0), (0, 0, 2, 1), (1, 0, 1, 3),
                                 (1, 0, 2, 4), (1, 0, 3, 5)]

        self.assertEqual(
            2,
            sum([
                int("Unexpected exception:" in item) for item in log_sink.items
            ]))

        self.assertCountEqual(actual_learners[0], expected_learners[0])
        self.assertCountEqual(actual_learners[1][:3], expected_learners[1][:3])
        self.assertTrue(math.isnan(expected_learners[1][3]))

        self.assertCountEqual(actual_simulations, expected_simulations)
        self.assertCountEqual(actual_interactions, expected_interactions)
示例#14
0
    def test_exception(self):
        source = MemorySource(list(range(4)))
        sink = MemorySink()

        with self.assertRaises(Exception):
            Pipe.join(source, [Pipe_Tests.ExceptionFilter()], sink).run()