def test_internal_create_program(self) -> None: measurement_windows = [('M', 0, 5)] single_wf = DummyWaveform(duration=6, defined_channels={'A'}) wf = MultiChannelWaveform([single_wf]) template = AtomicPulseTemplateStub(measurements=measurement_windows, parameter_names={'foo'}) scope = DictScope.from_kwargs(foo=7.2, volatile={'gutes_zeuch'}) measurement_mapping = {'M': 'N'} channel_mapping = {'B': 'A'} program = Loop() expected_program = Loop(children=[Loop(waveform=wf)], measurements=[('N', 0, 5)]) with mock.patch.object(template, 'build_waveform', return_value=wf) as build_waveform: template._internal_create_program( scope=scope, measurement_mapping=measurement_mapping, channel_mapping=channel_mapping, parent_loop=program, to_single_waveform=set(), global_transformation=None) build_waveform.assert_called_once_with( parameters=scope, channel_mapping=channel_mapping) self.assertEqual(expected_program, program) # MultiChannelProgram calls cleanup program.cleanup()
def test_cleanup(self): wfs = [DummyWaveform(duration=i) for i in range(3)] root = Loop(children=[ Loop(waveform=wfs[0]), Loop(waveform=None), Loop(children=[Loop(waveform=None)]), Loop(children=[ Loop(waveform=wfs[1], repetition_count=2, measurements=[('m', 0, 1)]) ], repetition_count=3), Loop(children=[Loop(waveform=wfs[2], repetition_count=2)], repetition_count=3, measurements=[('n', 0, 1)]) ]) expected = Loop(children=[ Loop(waveform=wfs[0]), Loop(waveform=wfs[1], repetition_count=6, measurements=[('m', 0, 1)]), Loop(children=[Loop(waveform=wfs[2], repetition_count=2)], repetition_count=3, measurements=[('n', 0, 1)]) ]) root.cleanup() self.assertEqual(expected, root)
def test_cleanup_single_rep(self): wf = DummyWaveform(duration=1) measurements = [('n', 0, 1)] root = Loop(children=[Loop(waveform=wf, repetition_count=1)], measurements=measurements, repetition_count=10) expected = Loop(waveform=wf, repetition_count=10, measurements=measurements) root.cleanup() self.assertEqual(expected, root)
def test_cleanup_warnings(self): root = Loop(children=[Loop(measurements=[('m', 0, 1)])]) with self.assertWarnsRegex(UserWarning, 'Dropping measurement'): root.cleanup() root = Loop( children=[Loop(measurements=[('m', 0, 1)], children=[Loop()])]) with self.assertWarnsRegex( UserWarning, 'Dropping measurement since there is no waveform in children'): root.cleanup()
def test_internal_create_program_one_child_no_duration(self) -> None: sub1 = DummyPulseTemplate(duration=0, waveform=None, measurements=[('b', 1, 2)], defined_channels={'A'}) sub2 = DummyPulseTemplate(duration=2, waveform=DummyWaveform(duration=2), parameter_names={'foo'}, defined_channels={'A'}) scope = DictScope.from_kwargs() measurement_mapping = {'a': 'a', 'b': 'b'} channel_mapping = dict() seq = SequencePulseTemplate(sub1, sub2, measurements=[('a', 0, 1)]) loop = Loop() seq._internal_create_program(scope=scope, measurement_mapping=measurement_mapping, channel_mapping=channel_mapping, global_transformation=None, to_single_waveform=set(), parent_loop=loop) self.assertEqual(1, loop.repetition_count) self.assertIsNone(loop.waveform) self.assertEqual([Loop(repetition_count=1, waveform=sub2.waveform)], list(loop.children)) self.assert_measurement_windows_equal({'a': ([0], [1])}, loop.get_measurement_windows()) # MultiChannelProgram calls cleanup loop.cleanup() self.assert_measurement_windows_equal({'a': ([0], [1])}, loop.get_measurement_windows()) ### test again with inverted sequence seq = SequencePulseTemplate(sub2, sub1, measurements=[('a', 0, 1)]) loop = Loop() seq._internal_create_program(scope=scope, measurement_mapping=measurement_mapping, channel_mapping=channel_mapping, global_transformation=None, to_single_waveform=set(), parent_loop=loop) self.assertEqual(1, loop.repetition_count) self.assertIsNone(loop.waveform) self.assertEqual([Loop(repetition_count=1, waveform=sub2.waveform)], list(loop.children)) self.assert_measurement_windows_equal({'a': ([0], [1])}, loop.get_measurement_windows()) # MultiChannelProgram calls cleanup loop.cleanup() self.assert_measurement_windows_equal({'a': ([0], [1])}, loop.get_measurement_windows())
def test_create_program_constant_success_measurements(self) -> None: repetitions = 3 body = DummyPulseTemplate(duration=2.0, waveform=DummyWaveform( duration=2, defined_channels={'A'}), measurements=[('b', 0, 1)]) t = RepetitionPulseTemplate(body, repetitions, parameter_constraints=['foo<9'], measurements=[('my', 2, 2)]) scope = DictScope.from_mapping({'foo': 8}) measurement_mapping = {'my': 'thy', 'b': 'b'} channel_mapping = {} program = Loop() t._internal_create_program(scope=scope, measurement_mapping=measurement_mapping, channel_mapping=channel_mapping, to_single_waveform=set(), global_transformation=None, parent_loop=program) self.assertEqual(1, len(program.children)) internal_loop = program[0] # type: Loop self.assertEqual(repetitions, internal_loop.repetition_count) self.assertEqual(1, len(internal_loop)) self.assertEqual( (scope, measurement_mapping, channel_mapping, internal_loop), body.create_program_calls[-1]) self.assertEqual(body.waveform, internal_loop[0].waveform) self.assert_measurement_windows_equal( { 'b': ([0, 2, 4], [1, 1, 1]), 'thy': ([2], [2]) }, program.get_measurement_windows()) # done in MultiChannelProgram program.cleanup() self.assert_measurement_windows_equal( { 'b': ([0, 2, 4], [1, 1, 1]), 'thy': ([2], [2]) }, program.get_measurement_windows())