Beispiel #1
0
    def test_pre_post_decorators(self):
        pre_decorators = [LogDecorator(1)]
        post_decorators = [LogDecorator(2)]

        sink = ListSink()
        logger = DecoratedLogger(pre_decorators, BasicLogger(sink),
                                 post_decorators)

        logger.log('a')
        self.assertEqual(['2 -- 1 -- a'], sink.items)

        sink = ListSink()
        logger = DecoratedLogger(pre_decorators, BasicLogger(sink),
                                 post_decorators)

        with logger.log('a'):
            pass

        self.assertEqual(['2 -- 1 -- a', '2 -- 1 -- a (completed)'],
                         sink.items)

        sink = ListSink()
        logger = DecoratedLogger(pre_decorators, BasicLogger(sink),
                                 post_decorators)

        with logger.time('a'):
            pass

        self.assertEqual(
            ['2 -- 1 -- a', '2 -- 1 -- a (0.0 seconds) (completed)'],
            sink.items)
Beispiel #2
0
    def test_run(self):
        source = ListSource(list(range(10)))
        sink   = ListSink()

        Pipes.join(source, ProcessNameFilter(), sink).run()

        self.assertEqual(sink.items[0], ['MainProcess']*10)
Beispiel #3
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 = ListSink()
        logger = BasicLogger(sink)
        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.assertRegex(logs[3],
                         '^a \\(\\d+\\.\\d+ seconds\\) \\(completed\\)$')
        self.assertEqual(logs[4], 'e')

        self.assertAlmostEqual(float(logs[3][3:7]), 0.15, 1)
Beispiel #4
0
    def test_sink(self):
        pre_decorators = [LogDecorator(1)]
        post_decorators = [LogDecorator(2)]

        sink = ListSink()
        logger = DecoratedLogger(pre_decorators, BasicLogger(sink),
                                 post_decorators)

        self.assertIs(logger.sink, sink)

        sink = ListSink()
        logger.sink = sink

        self.assertIs(logger.sink, sink)

        logger.log('a')
        self.assertEqual(['2 -- 1 -- a'], sink.items)
    def test_items_not_picklable(self):
        stderr_sink = ListSink()

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

        self.assertEqual(1, len(stderr_sink.items))
        self.assertIn("pickle", stderr_sink.items[0])
    def test_filter_exception(self):
        stderr_sink = ListSink()

        list(
            Multiprocessor(ExceptionFilter(), 2, 1,
                           stderr_sink).filter(range(4)))

        self.assertEqual(len(stderr_sink.items), 4)

        for item in stderr_sink.items:
            self.assertIn("Exception Filter", str(item))
Beispiel #7
0
    def test_not_picklable_logging(self):
        logger_sink = ListSink()
        CobaContext.logger = BasicLogger(logger_sink)
        CobaContext.cacher = NullCacher()

        list(
            CobaMultiprocessor(ProcessNameFilter(), 2,
                               1).filter([lambda a: 1]))

        self.assertEqual(1, len(logger_sink.items))
        self.assertIn("pickle", logger_sink.items[0])
Beispiel #8
0
    def test_filter_exception_logging(self):
        CobaContext.logger = DecoratedLogger([ExceptLog()],
                                             BasicLogger(ListSink()), [])
        CobaContext.cacher = NullCacher()

        list(CobaMultiprocessor(ExceptionFilter(), 2, 1).filter(range(4)))

        self.assertEqual(4, len(CobaContext.logger.sink.items))
        self.assertIn("Exception Filter", CobaContext.logger.sink.items[0])
        self.assertIn("Exception Filter", CobaContext.logger.sink.items[1])
        self.assertIn("Exception Filter", CobaContext.logger.sink.items[2])
        self.assertIn("Exception Filter", CobaContext.logger.sink.items[3])
Beispiel #9
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())
        experiment = Experiment([sim1], [learner])

        CobaContext.logger = BasicLogger(ListSink())

        experiment.evaluate()

        self.assertEqual(1, len(CobaContext.logger.sink.items))
        self.assertIn("pickle", CobaContext.logger.sink.items[0])
Beispiel #10
0
    def test_log(self):

        sink = ListSink()
        logger = BasicLogger(sink)
        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')
Beispiel #11
0
    def test_read_exception_logging(self):
        CobaContext.logger = DecoratedLogger([ExceptLog()],
                                             BasicLogger(ListSink()), [])
        CobaContext.cacher = NullCacher()

        def broken_generator():
            yield [1]
            raise Exception("Generator Exception")

        list(CobaMultiprocessor(Identity(), 2, 1).filter(broken_generator()))

        self.assertEqual(1, len(CobaContext.logger.sink.items))
        self.assertIn("Generator Exception", CobaContext.logger.sink.items[0])
Beispiel #12
0
    def test_exception_logged_but_not_thrown(self):
        log_sink = ListSink()

        CobaContext.logger = NullLogger()
        CobaContext.cacher = NullCacher()
        CobaContext.store = None

        logger = DecoratedLogger([ExceptLog()], IndentLogger(), [])

        CobaMultiprocessor.ProcessFilter(ExceptionFilter(), logger, None, None,
                                         log_sink).filter(1)

        self.assertIn('Exception Filter', log_sink.items[0])
Beispiel #13
0
    def test_simple(self):
        sink = ListSink()

        sink.write("a")
        sink.write("b")
        sink.write("c")

        self.assertEqual(["a", "b", "c"], sink.items)
Beispiel #14
0
    def test_log_with_1(self):

        sink = ListSink()
        logger = IndentLogger(sink)
        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')
Beispiel #15
0
    def test_logging(self):
        logger_sink = ListSink()
        logger = DecoratedLogger([], IndentLogger(logger_sink),
                                 [NameLog(), StampLog()])

        CobaContext.logger = logger
        CobaContext.cacher = NullCacher()

        items = list(
            CobaMultiprocessor(ProcessNameFilter(), 2, 1).filter(range(4)))

        self.assertEqual(len(logger_sink.items), 4)
        self.assertCountEqual(items,
                              [l.split(' ')[3] for l in logger_sink.items])
        self.assertCountEqual(items,
                              [l.split(' ')[-1] for l in logger_sink.items])
Beispiel #16
0
    def test_sim_write_read_with_params_and_none_context(self):
        sink = ListSink()

        expected_env = MemorySimulation(
            params={'a': 1},
            interactions=[SimulatedInteraction(None, [1, 2], rewards=[2, 3])])
        SerializedSimulation(expected_env).write(sink)
        actual_env = SerializedSimulation(ListSource(sink.items))

        self.assertEqual(expected_env.params, actual_env.params)
        self.assertEqual(len(list(expected_env.read())),
                         len(list(actual_env.read())))
        for e_interaction, a_interaction in zip(expected_env.read(),
                                                actual_env.read()):
            self.assertEqual(e_interaction.context, a_interaction.context)
            self.assertEqual(e_interaction.actions, a_interaction.actions)
            self.assertEqual(e_interaction.kwargs, a_interaction.kwargs)
Beispiel #17
0
    def test_log_with_interrupt(self):

        sink = ListSink()
        logger = BasicLogger(sink)
        logs = sink.items

        with self.assertRaises(BaseException) as e:
            with logger.log('a'):
                logger.log('c')
                logger.log('d')
                raise KeyboardInterrupt()

        self.assertEqual(4, len(logs))

        self.assertEqual(logs[0], 'a')
        self.assertEqual(logs[1], 'c')
        self.assertEqual(logs[2], 'd')
        self.assertEqual(logs[3], 'a (interrupt)')
Beispiel #18
0
    def test_log_with_exception(self):

        sink = ListSink()
        logger = BasicLogger(sink)
        logs = sink.items

        with self.assertRaises(Exception):
            with logger.log('a'):
                logger.log('c')
                logger.log('d')
                raise Exception()

        self.assertEqual(4, len(logs))

        self.assertEqual(logs[0], 'a')
        self.assertEqual(logs[1], 'c')
        self.assertEqual(logs[2], 'd')
        self.assertEqual(logs[3], 'a (exception)')
Beispiel #19
0
    def test_log_with(self):

        sink = ListSink()
        logger = BasicLogger(sink)
        logs = sink.items

        with logger.log('a'):
            logger.log('c')
            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.assertEqual(logs[3], 'a (completed)')
        self.assertEqual(logs[4], 'e')
Beispiel #20
0
    def test_time_with_interrupt(self):

        sink = ListSink()
        logger = BasicLogger(sink)
        logs = sink.items

        with self.assertRaises(BaseException) as e:
            with logger.time('a'):
                logger.log('c')
                logger.log('d')
                raise KeyboardInterrupt()

        self.assertEqual(4, len(logs))

        self.assertEqual(logs[0], 'a')
        self.assertEqual(logs[1], 'c')
        self.assertEqual(logs[2], 'd')
        self.assertRegex(logs[3],
                         '^a \\(\\d+\\.\\d+ seconds\\) \\(interrupt\\)$')
Beispiel #21
0
    def test_time_two_separate(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 = ListSink()
        logger = BasicLogger(sink)
        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(11, len(logs))

        self.assertEqual(logs[0], 'a')
        self.assertEqual(logs[1], 'd')
        self.assertEqual(logs[2], 'e')
        self.assertRegex(logs[3], 'd \\(\\d+\\.\\d+ seconds\\)')
        self.assertRegex(logs[4], 'a \\(\\d+\\.\\d+ seconds\\)')
        self.assertEqual(logs[5], 'g')
        self.assertEqual(logs[6], 'a')
        self.assertEqual(logs[7], 'd')
        self.assertEqual(logs[8], 'e')
        self.assertRegex(logs[9], 'd \\(\\d+\\.\\d+ seconds\\)')
        self.assertRegex(logs[10], 'a \\(\\d+\\.\\d+ seconds\\)')

        self.assertAlmostEqual(float(logs[3][3:7]), 0.05, 1)
        self.assertAlmostEqual(float(logs[4][3:7]), 0.10, 1)
        self.assertAlmostEqual(float(logs[9][3:7]), 0.05, 1)
        self.assertAlmostEqual(float(logs[10][3:7]), 0.10, 1)
Beispiel #22
0
    def test_time_with_exception(self):

        sink = ListSink()
        logger = IndentLogger(sink)
        logs = sink.items

        try:
            with self.assertRaises(Exception) as e:
                with logger.time('a'):
                    logger.log('c')
                    logger.log('d')
                    raise Exception()
        except:
            pass

        self.assertEqual(3, len(logs))
        self.assertRegex(logs[0],
                         '^a \\(\\d+\\.\\d+ seconds\\) \\(exception\\)$')
        self.assertEqual(logs[1], '  * c')
        self.assertEqual(logs[2], '  * d')
    def test_class_definitions_not_loaded_in_main(self):

        stderr_sink = ListSink()

        global Test

        class Test:
            pass

        def test_function():
            list(
                Multiprocessor(ProcessNameFilter(), 2, 1,
                               stderr_sink).filter([Test()] * 2))

        t = Thread(target=test_function)
        t.start()
        t.join(5)

        self.assertFalse(t.is_alive())
        self.assertIn("unable to find", stderr_sink.items[0])
Beispiel #24
0
    def test_coba_config_set_correctly(self):

        log_sink = ListSink()

        CobaContext.logger = NullLogger()
        CobaContext.cacher = NullCacher()
        CobaContext.store = None

        filter = CobaMultiprocessor.ProcessFilter(Identity(), IndentLogger(),
                                                  MemoryCacher(), {}, log_sink)

        self.assertIsInstance(CobaContext.logger, NullLogger)
        self.assertIsInstance(CobaContext.cacher, NullCacher)
        self.assertIsNone(CobaContext.store)

        filter.filter(1)

        self.assertIsInstance(CobaContext.logger, IndentLogger)
        self.assertIsInstance(CobaContext.cacher, MemoryCacher)
        self.assertIsInstance(CobaContext.store, dict)
        self.assertIsInstance(CobaContext.logger.sink, ListSink)
Beispiel #25
0
    def test_time_with_3(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 = ListSink()
        logger = IndentLogger(sink)
        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.assertRegex(logs[0],
                         '^a \\(\\d+\\.\\d+ seconds\\) \\(completed\\)')
        self.assertEqual(logs[1], '  * c')
        self.assertRegex(
            logs[2], '^    > d \\(\\d+\\.\\d+ seconds\\) \\(completed\\)$')
        self.assertEqual(logs[3], '      - e')
        self.assertRegex(
            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)
Beispiel #26
0
    def test_ignore_raise(self):

        CobaContext.logger = IndentLogger(ListSink())

        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))
        experiment = Experiment(
            [sim1, sim2], [ModuloLearner(), BrokenLearner()],
            evaluation_task=OnlineOnPolicyEvalTask(False))

        result = experiment.evaluate()
        actual_learners = result.learners.to_tuples()
        actual_environments = result.environments.to_tuples()
        actual_interactions = result.interactions.to_tuples()

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

        self.assertIsInstance(CobaContext.logger, IndentLogger)
        self.assertEqual(
            2,
            sum([
                int("Unexpected exception:" in item)
                for item in CobaContext.logger.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_environments, expected_environments)
        self.assertCountEqual(actual_interactions, expected_interactions)
Beispiel #27
0
    def test_time_with_interrupt(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 = ListSink()
        logger = IndentLogger(sink)
        logs = sink.items

        try:
            with self.assertRaises(Exception) as e:
                with logger.time('a'):
                    logger.log('c')
                    logger.log('d')
                    raise KeyboardInterrupt()
        except:
            pass

        self.assertEqual(3, len(logs))
        self.assertRegex(logs[0],
                         '^a \\(\\d+\\.\\d+ seconds\\) \\(interrupt\\)$')
        self.assertEqual(logs[1], '  * c')
        self.assertEqual(logs[2], '  * d')
Beispiel #28
0
    def __init__(self, log_file: Optional[str] = None, minify:bool=True) -> None:

        self._log_file = log_file
        self._minify   = minify
        self._source   = DiskSource(log_file) if log_file else ListSource()
        self._sink     = DiskSink(log_file)   if log_file else ListSink(self._source.items)
Beispiel #29
0
 def test_exception(self):
     with self.assertRaises(Exception):
         Pipes.join(ListSource(list(range(4))), ExceptionFilter(), ListSink()).run()
Beispiel #30
0
 def test_sink_is_set(self):
     logger = IndentLogger(ListSink())
     self.assertIsInstance(logger.sink, ListSink)
     logger.sink = NullSink()
     self.assertIsInstance(logger.sink, NullSink)