Ejemplo n.º 1
0
    def test_published_messages(self) -> None:
        config = Config(LABBY_CONFIG_YAML)
        sequence = ExperimentSequence("./sequences/seq.yaml", SEQUENCE_YAML)
        runner = ExperimentRunner(config, sequence)

        with Sub0(dial=runner.subscription_address) as sub:
            sub.subscribe(b"")
            received_messages: List[ExperimentSequenceStatus] = []

            with patch_time("2020-08-08"), patch_file_contents(
                    "output/seq/000.csv"), patch("os.makedirs"):
                runner.start()
                while True:
                    msg = sub.recv()
                    status = ExperimentSequenceStatus.from_msgpack(msg)
                    received_messages.append(status)
                    if status.is_finished():
                        break
                runner.join()

            self.assertEqual(
                received_messages,
                [
                    ExperimentSequenceStatus(experiments=[
                        ExperimentStatus(
                            name="000",
                            state=ExperimentState.RUNNING,
                            progress=0.0,
                        )
                    ]),
                    ExperimentSequenceStatus(experiments=[
                        ExperimentStatus(
                            name="000",
                            state=ExperimentState.RUNNING,
                            progress=0.0,
                        )
                    ]),
                    ExperimentSequenceStatus(experiments=[
                        ExperimentStatus(
                            name="000",
                            state=ExperimentState.RUNNING,
                            progress=0.5,
                        )
                    ]),
                    ExperimentSequenceStatus(experiments=[
                        ExperimentStatus(
                            name="000",
                            state=ExperimentState.RUNNING,
                            progress=1.0,
                        )
                    ]),
                    ExperimentSequenceStatus(experiments=[
                        ExperimentStatus(
                            name="000",
                            state=ExperimentState.FINISHED,
                            progress=1.0,
                        )
                    ]),
                ],
            )
Ejemplo n.º 2
0
 def test_patch_time(self) -> None:
     with patch_time("2020-08-08"):
         self.assertEqual(self._current_time(), "Sat Aug  8 00:00:00 2020")
         time.sleep(1)
         self.assertEqual(self._current_time(), "Sat Aug  8 00:00:01 2020")
         time.sleep(3600)
         self.assertEqual(self._current_time(), "Sat Aug  8 01:00:01 2020")
Ejemplo n.º 3
0
    def test_patch_time_with_ticker(self) -> None:
        state: str = "unitialized"

        def _ticker() -> Generator[float, None, None]:
            nonlocal state
            state = "initial_state"
            yield 0.0
            state = "]0s, 1s]"
            yield 1.0
            state = "]1s, 1.5s]"
            yield 1.5
            state = "]1.5s, 2s]"
            yield 2
            state = "end_state"

        with patch_time("2020-08-08", _ticker()):
            self.assertEqual(state, "initial_state")
            time.sleep(0.01)
            self.assertEqual(state, "]0s, 1s]")
            time.sleep(0.98)
            self.assertEqual(state, "]0s, 1s]")
            self.assertEqual(self._current_time(), "Sat Aug  8 00:00:00 2020")
            time.sleep(0.01)
            self.assertEqual(self._current_time(), "Sat Aug  8 00:00:01 2020")
            self.assertEqual(state, "]0s, 1s]")

            # state change (t=1.01)
            time.sleep(0.01)
            self.assertEqual(state, "]1s, 1.5s]")
            time.sleep(0.49)
            self.assertEqual(state, "]1s, 1.5s]")

            # state change (t=1.51)
            time.sleep(0.01)
            self.assertEqual(state, "]1.5s, 2s]")
            self.assertEqual(self._current_time(), "Sat Aug  8 00:00:01 2020")
            time.sleep(0.49)
            self.assertEqual(self._current_time(), "Sat Aug  8 00:00:02 2020")
            self.assertEqual(state, "]1.5s, 2s]")

            # state change (t=2.01)
            time.sleep(0.01)
            self.assertEqual(state, "end_state")

            # state change (t=2.01)
            time.sleep(3600.0)
            self.assertEqual(state, "end_state")
            self.assertEqual(self._current_time(), "Sat Aug  8 01:00:02 2020")
Ejemplo n.º 4
0
    def test_experiment_output(self) -> None:
        config = Config(LABBY_CONFIG_YAML)
        sequence = ExperimentSequence("./sequences/seq.yaml", SEQUENCE_YAML)
        runner = ExperimentRunner(config, sequence)

        with patch_time("2020-08-08"), patch_file_contents(
                "output/seq/000.csv") as output, patch(
                    "os.makedirs") as makedirs:
            runner.start()
            runner.join()

        makedirs.assert_called_with(PosixPath("output/seq/"), exist_ok=True)
        self.assertEqual(len(output.write.call_args_list), 4)
        output.write.assert_has_calls([
            call("seconds,voltage\n"),
            call("0.0,15.0\n"),
            call("0.5,15.0\n"),
            call("1.0,15.0\n"),
        ])
Ejemplo n.º 5
0
    def test_run_sequence(self) -> None:
        SEQUENCE_CONTENTS = """
---
sequence:
  - experiment_type: labby.tests.test_server.TestExperiment
  - experiment_type: labby.tests.test_server.TestExperiment
"""
        with patch_file_contents(
            "sequence/test.yml", SEQUENCE_CONTENTS
        ), patch_file_contents("output/test/000.csv") as output_0, patch_file_contents(
            "output/test/001.csv"
        ) as output_1, patch(
            "os.makedirs"
        ) as makedirs, patch_time(
            "2020-08-08"
        ):
            self.client.run_sequence("sequence/test.yml")
            while True:
                sequence_status = self.client.experiment_status().sequence_status
                if sequence_status and sequence_status.is_finished():
                    break
                time.sleep(0)

            makedirs.assert_called_with(PosixPath("output/test/"), exist_ok=True)
            self.assertEqual(len(output_0.write.call_args_list), 4)
            output_0.write.assert_has_calls(
                [
                    call("seconds,voltage\n"),
                    call("0.0,15.0\n"),
                    call("0.5,15.0\n"),
                    call("1.0,15.0\n"),
                ]
            )
            output_1.write.assert_has_calls(
                [
                    call("seconds,voltage\n"),
                    call("0.0,15.0\n"),
                    call("0.5,15.0\n"),
                    call("1.0,15.0\n"),
                ]
            )