def test_build_sequence_constant(self) -> None: repetitions = 3 t = RepetitionPulseTemplate(self.body, repetitions) parameters = {} conditions = dict(foo=DummyCondition(requires_stop=True)) t.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertEqual([(self.body, parameters, conditions), (self.body, parameters, conditions), (self.body, parameters, conditions)], self.sequencer.sequencing_stacks[self.block])
def test_build_sequence_constant(self) -> None: repetitions = 3 t = RepetitionPulseTemplate(self.body, repetitions) parameters = {} conditions = dict(foo=DummyCondition(requires_stop=True)) t.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertTrue(self.block.embedded_blocks) body_block = self.block.embedded_blocks[0] self.assertEqual({body_block}, set(self.sequencer.sequencing_stacks.keys())) self.assertEqual([(self.body, parameters, conditions)], self.sequencer.sequencing_stacks[body_block]) self.assertEqual([REPJInstruction(repetitions, InstructionPointer(body_block, 0))], self.block.instructions)
def test_parameter_not_provided(self): parameters = dict(foo=ConstantParameter(4)) conditions = dict(foo=DummyCondition(requires_stop=True)) measurement_mapping = dict(moth='fire') channel_mapping = dict(asd='f') template = RepetitionPulseTemplate(self.body, 'foo*bar', parameter_constraints=['foo<9']) with self.assertRaises(ParameterNotProvidedException): template.build_sequence(self.sequencer, parameters, conditions, measurement_mapping, channel_mapping, self.block)
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) condition = DummyCondition() conditions = dict(foo=condition) for body_requires_stop in [True, False]: for condition_requires_stop in [True, False]: for parameter_requires_stop in [True, False]: body.requires_stop_ = body_requires_stop condition.requires_stop_ = condition_requires_stop parameter.requires_stop_ = parameter_requires_stop self.assertEqual(parameter_requires_stop, t.requires_stop(parameters, conditions)) def setUp(self) -> None: self.body = DummyPulseTemplate() self.repetitions = ParameterDeclaration('foo', max=5) self.template = RepetitionPulseTemplate(self.body, self.repetitions) self.sequencer = DummySequencer() self.block = DummyInstructionBlock() def test_build_sequence_constant(self) -> None: repetitions = 3 t = RepetitionPulseTemplate(self.body, repetitions) parameters = {} conditions = dict(foo=DummyCondition(requires_stop=True)) t.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertTrue(self.block.embedded_blocks) body_block = self.block.embedded_blocks[0] self.assertEqual({body_block}, set(self.sequencer.sequencing_stacks.keys())) self.assertEqual([(self.body, parameters, conditions)], self.sequencer.sequencing_stacks[body_block]) self.assertEqual([REPJInstruction(repetitions, InstructionPointer(body_block, 0))], self.block.instructions) def test_build_sequence_declaration_success(self) -> None: parameters = dict(foo=3) conditions = dict(foo=DummyCondition(requires_stop=True)) self.template.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertTrue(self.block.embedded_blocks) body_block = self.block.embedded_blocks[0] self.assertEqual({body_block}, set(self.sequencer.sequencing_stacks.keys())) self.assertEqual([(self.body, parameters, conditions)], self.sequencer.sequencing_stacks[body_block]) self.assertEqual([REPJInstruction(parameters['foo'], InstructionPointer(body_block, 0))], self.block.instructions) def test_build_sequence_declaration_exceeds_bounds(self) -> None: parameters = dict(foo=9) conditions = dict(foo=DummyCondition(requires_stop=True)) with self.assertRaises(ParameterValueIllegalException): self.template.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertFalse(self.sequencer.sequencing_stacks) def test_build_sequence_declaration_parameter_missing(self) -> None: parameters = {} conditions = dict(foo=DummyCondition(requires_stop=True)) with self.assertRaises(ParameterNotProvidedException): self.template.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertFalse(self.sequencer.sequencing_stacks) def test_build_sequence_declaration_parameter_value_not_whole(self) -> None: parameters = dict(foo=3.3) conditions = dict(foo=DummyCondition(requires_stop=True)) with self.assertRaises(ParameterNotIntegerException): self.template.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertFalse(self.sequencer.sequencing_stacks)
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) condition = DummyCondition() conditions = dict(foo=condition) for body_requires_stop in [True, False]: for condition_requires_stop in [True, False]: for parameter_requires_stop in [True, False]: body.requires_stop_ = body_requires_stop condition.requires_stop_ = condition_requires_stop parameter.requires_stop_ = parameter_requires_stop self.assertEqual(parameter_requires_stop, t.requires_stop(parameters, conditions)) def setUp(self) -> None: self.body = DummyPulseTemplate() self.repetitions = ParameterDeclaration('foo', max=5) self.template = RepetitionPulseTemplate(self.body, self.repetitions) self.sequencer = DummySequencer() self.block = DummyInstructionBlock() def test_build_sequence_constant(self) -> None: repetitions = 3 t = RepetitionPulseTemplate(self.body, repetitions) parameters = {} conditions = dict(foo=DummyCondition(requires_stop=True)) t.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertEqual([(self.body, parameters, conditions), (self.body, parameters, conditions), (self.body, parameters, conditions)], self.sequencer.sequencing_stacks[self.block]) def test_build_sequence_declaration_success(self) -> None: parameters = dict(foo=3) conditions = dict(foo=DummyCondition(requires_stop=True)) self.template.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertEqual([(self.body, parameters, conditions), (self.body, parameters, conditions), (self.body, parameters, conditions)], self.sequencer.sequencing_stacks[self.block]) def test_build_sequence_declaration_exceeds_bounds(self) -> None: parameters = dict(foo=9) conditions = dict(foo=DummyCondition(requires_stop=True)) with self.assertRaises(ParameterValueIllegalException): self.template.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertFalse(self.sequencer.sequencing_stacks) def test_build_sequence_declaration_parameter_missing(self) -> None: parameters = {} conditions = dict(foo=DummyCondition(requires_stop=True)) with self.assertRaises(ParameterNotProvidedException): self.template.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertFalse(self.sequencer.sequencing_stacks) def test_build_sequence_declaration_parameter_value_not_whole(self) -> None: parameters = dict(foo=3.3) conditions = dict(foo=DummyCondition(requires_stop=True)) with self.assertRaises(ParameterNotIntegerException): self.template.build_sequence(self.sequencer, parameters, conditions, self.block) self.assertFalse(self.sequencer.sequencing_stacks)
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, 'foo') parameter = DummyParameter() parameters = dict(foo=parameter) condition = DummyCondition() conditions = dict(foo=condition) for body_requires_stop in [True, False]: for condition_requires_stop in [True, False]: for parameter_requires_stop in [True, False]: body.requires_stop_ = body_requires_stop condition.requires_stop_ = condition_requires_stop parameter.requires_stop_ = parameter_requires_stop self.assertEqual(parameter_requires_stop, t.requires_stop(parameters, conditions)) def setUp(self) -> None: self.body = DummyPulseTemplate() self.repetitions = 'foo' self.template = RepetitionPulseTemplate( self.body, self.repetitions, parameter_constraints=['foo<9']) self.sequencer = DummySequencer() self.block = DummyInstructionBlock() def test_build_sequence_constant(self) -> None: repetitions = 3 t = RepetitionPulseTemplate(self.body, repetitions) parameters = {} measurement_mapping = {'my': 'thy'} conditions = dict(foo=DummyCondition(requires_stop=True)) channel_mapping = {} t.build_sequence(self.sequencer, parameters, conditions, measurement_mapping, channel_mapping, self.block) self.assertTrue(self.block.embedded_blocks) body_block = self.block.embedded_blocks[0] self.assertEqual({body_block}, set(self.sequencer.sequencing_stacks.keys())) self.assertEqual([(self.body, parameters, conditions, measurement_mapping, channel_mapping)], self.sequencer.sequencing_stacks[body_block]) self.assertEqual( [REPJInstruction(repetitions, InstructionPointer(body_block, 0))], self.block.instructions) def test_build_sequence_declaration_success(self) -> None: parameters = dict(foo=ConstantParameter(3)) conditions = dict(foo=DummyCondition(requires_stop=True)) measurement_mapping = dict(moth='fire') channel_mapping = dict(asd='f') self.template.build_sequence(self.sequencer, parameters, conditions, measurement_mapping, channel_mapping, self.block) self.assertTrue(self.block.embedded_blocks) body_block = self.block.embedded_blocks[0] self.assertEqual({body_block}, set(self.sequencer.sequencing_stacks.keys())) self.assertEqual([(self.body, parameters, conditions, measurement_mapping, channel_mapping)], self.sequencer.sequencing_stacks[body_block]) self.assertEqual( [REPJInstruction(3, InstructionPointer(body_block, 0))], self.block.instructions) def test_parameter_not_provided(self): parameters = dict(foo=ConstantParameter(4)) conditions = dict(foo=DummyCondition(requires_stop=True)) measurement_mapping = dict(moth='fire') channel_mapping = dict(asd='f') template = RepetitionPulseTemplate(self.body, 'foo*bar', parameter_constraints=['foo<9']) with self.assertRaises(ParameterNotProvidedException): template.build_sequence(self.sequencer, parameters, conditions, measurement_mapping, channel_mapping, self.block) def test_build_sequence_declaration_exceeds_bounds(self) -> None: parameters = dict(foo=ConstantParameter(9)) conditions = dict(foo=DummyCondition(requires_stop=True)) with self.assertRaises(ParameterConstraintViolation): self.template.build_sequence(self.sequencer, parameters, conditions, {}, {}, self.block) self.assertFalse(self.sequencer.sequencing_stacks) def test_build_sequence_declaration_parameter_missing(self) -> None: parameters = {} conditions = dict(foo=DummyCondition(requires_stop=True)) with self.assertRaises(ParameterNotProvidedException): self.template.build_sequence(self.sequencer, parameters, conditions, {}, {}, self.block) self.assertFalse(self.sequencer.sequencing_stacks) def test_build_sequence_declaration_parameter_value_not_whole( self) -> None: parameters = dict(foo=ConstantParameter(3.3)) conditions = dict(foo=DummyCondition(requires_stop=True)) with self.assertRaises(ParameterNotIntegerException): self.template.build_sequence(self.sequencer, parameters, conditions, {}, {}, self.block) self.assertFalse(self.sequencer.sequencing_stacks)