def test_build_sequence_constant(self) -> None:
     repetitions = 3
     t = RepetitionPulseTemplate(self.body, repetitions)
     parameters = {}
     t.build_sequence(self.sequencer, parameters, self.block)
     self.assertEqual(
         [(self.body, parameters), (self.body, parameters), (self.body, parameters)],
         self.sequencer.sequencing_stacks[self.block],
     )
 def test_get_serialization_data_declaration(self) -> None:
     repetition_count = ParameterDeclaration("foo")
     template = RepetitionPulseTemplate(self.body, repetition_count)
     expected_data = dict(
         type=self.serializer.get_type_identifier(template),
         body=str(id(self.body)),
         repetition_count=str(id(repetition_count)),
     )
     data = template.get_serialization_data(self.serializer)
     self.assertEqual(expected_data, data)
 def test_get_serialization_data_constant(self) -> None:
     repetition_count = 3
     template = RepetitionPulseTemplate(self.body, repetition_count)
     expected_data = dict(
         type=self.serializer.get_type_identifier(template),
         body=str(id(self.body)),
         repetition_count=repetition_count,
     )
     data = template.get_serialization_data(self.serializer)
     self.assertEqual(expected_data, data)
    def test_requires_stop_declaration(self) -> None:
        body = DummyPulseTemplate(requires_stop=False)
        t = RepetitionPulseTemplate(body, ParameterDeclaration("foo"))

        parameter = DummyParameter()
        parameters = dict(foo=parameter)

        parameter.requires_stop_ = False
        self.assertFalse(t.requires_stop(parameters))
        parameter.requires_stop_ = True
        self.assertTrue(t.requires_stop(parameters))

        body.requires_stop_ = True
        parameter.requires_stop_ = False
        self.assertFalse(t.requires_stop(parameters))
        parameter.requires_stop_ = True
        self.assertTrue(t.requires_stop(parameters))
 def test_deserialize_constant(self) -> None:
     repetition_count = 3
     data = dict(repetition_count=repetition_count, body=dict(name=str(id(self.body))), identifier="foo")
     # prepare dependencies for deserialization
     self.serializer.subelements[str(id(self.body))] = self.body
     # deserialize
     template = RepetitionPulseTemplate.deserialize(self.serializer, **data)
     # compare!
     self.assertEqual(self.body, template.body)
     self.assertEqual(repetition_count, template.repetition_count)
 def setUp(self) -> None:
     self.body = DummyPulseTemplate()
     self.repetitions = ParameterDeclaration("foo", max=5)
     self.template = RepetitionPulseTemplate(self.body, self.repetitions)
     self.sequencer = DummySequencer(DummySequencingHardware())
     self.block = DummyInstructionBlock()
 def test_requires_stop_constant(self) -> None:
     body = DummyPulseTemplate(requires_stop=False)
     t = RepetitionPulseTemplate(body, 2)
     self.assertFalse(t.requires_stop({}))
     body.requires_stop_ = True
     self.assertFalse(t.requires_stop({}))
class RepetitionPulseTemplateSequencingTests(unittest.TestCase):
    def test_requires_stop_constant(self) -> None:
        body = DummyPulseTemplate(requires_stop=False)
        t = RepetitionPulseTemplate(body, 2)
        self.assertFalse(t.requires_stop({}))
        body.requires_stop_ = True
        self.assertFalse(t.requires_stop({}))

    def test_requires_stop_declaration(self) -> None:
        body = DummyPulseTemplate(requires_stop=False)
        t = RepetitionPulseTemplate(body, ParameterDeclaration("foo"))

        parameter = DummyParameter()
        parameters = dict(foo=parameter)

        parameter.requires_stop_ = False
        self.assertFalse(t.requires_stop(parameters))
        parameter.requires_stop_ = True
        self.assertTrue(t.requires_stop(parameters))

        body.requires_stop_ = True
        parameter.requires_stop_ = False
        self.assertFalse(t.requires_stop(parameters))
        parameter.requires_stop_ = True
        self.assertTrue(t.requires_stop(parameters))

    def setUp(self) -> None:
        self.body = DummyPulseTemplate()
        self.repetitions = ParameterDeclaration("foo", max=5)
        self.template = RepetitionPulseTemplate(self.body, self.repetitions)
        self.sequencer = DummySequencer(DummySequencingHardware())
        self.block = DummyInstructionBlock()

    def test_build_sequence_constant(self) -> None:
        repetitions = 3
        t = RepetitionPulseTemplate(self.body, repetitions)
        parameters = {}
        t.build_sequence(self.sequencer, parameters, self.block)
        self.assertEqual(
            [(self.body, parameters), (self.body, parameters), (self.body, parameters)],
            self.sequencer.sequencing_stacks[self.block],
        )

    def test_build_sequence_declaration_success(self) -> None:
        parameters = dict(foo=3)
        self.template.build_sequence(self.sequencer, parameters, self.block)
        self.assertEqual(
            [(self.body, parameters), (self.body, parameters), (self.body, parameters)],
            self.sequencer.sequencing_stacks[self.block],
        )

    def test_build_sequence_declaration_exceeds_bounds(self) -> None:
        parameters = dict(foo=9)
        with self.assertRaises(ParameterValueIllegalException):
            self.template.build_sequence(self.sequencer, parameters, self.block)
        self.assertFalse(self.sequencer.sequencing_stacks)

    def test_build_sequence_declaration_parameter_missing(self) -> None:
        parameters = {}
        with self.assertRaises(ParameterNotProvidedException):
            self.template.build_sequence(self.sequencer, parameters, self.block)
        self.assertFalse(self.sequencer.sequencing_stacks)

    def test_build_sequence_declaration_parameter_value_not_whole(self) -> None:
        parameters = dict(foo=3.3)
        with self.assertRaises(ParameterNotIntegerException):
            self.template.build_sequence(self.sequencer, parameters, self.block)
        self.assertFalse(self.sequencer.sequencing_stacks)