コード例 #1
0
    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()
コード例 #2
0
ファイル: loop_tests.py プロジェクト: peendebak/qupulse
    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)
コード例 #3
0
    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)
コード例 #4
0
ファイル: loop_tests.py プロジェクト: peendebak/qupulse
    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()
コード例 #5
0
    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())
コード例 #6
0
    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())