예제 #1
0
    def test_from_repetition_count(self):
        dwf = DummyWaveform()
        self.assertEqual(RepetitionWaveform(dwf, 3), RepetitionWaveform.from_repetition_count(dwf, 3))

        cwf = ConstantWaveform(duration=3, amplitude=2.2, channel='A')
        with mock.patch.object(ConstantWaveform, 'from_mapping', return_value=mock.sentinel) as from_mapping:
            self.assertIs(from_mapping.return_value, RepetitionWaveform.from_repetition_count(cwf, 5))
            from_mapping.assert_called_once_with(15, {'A': 2.2})
예제 #2
0
    def test_float_sample_time(self):
        # issue 624
        body_wf = FunctionWaveform.from_expression(ExpressionScalar('sin(t)'), 1./3., channel='a')
        rwf = RepetitionWaveform(body_wf, 2)

        sample_times = np.arange(160) / 80. / 3.
        sampled = rwf.unsafe_sample(sample_times=sample_times, channel='a')
        inner_sample_times = np.concatenate((sample_times[:80], sample_times[80:] - 1./3.))
        np.testing.assert_equal(sampled, np.sin(inner_sample_times))
예제 #3
0
    def test_init(self):
        body_wf = DummyWaveform()

        with self.assertRaises(ValueError):
            RepetitionWaveform(body_wf, -1)

        with self.assertRaises(ValueError):
            RepetitionWaveform(body_wf, 1.1)

        wf = RepetitionWaveform(body_wf, 3)
        self.assertIs(wf._body, body_wf)
        self.assertEqual(wf._repetition_count, 3)
예제 #4
0
    def test_unsafe_sample(self):
        body_wf = DummyWaveform(duration=7)

        rwf = RepetitionWaveform(body=body_wf, repetition_count=10)

        sample_times = np.arange(80) * 70./80.
        inner_sample_times = (sample_times.reshape((10, -1)) - (7 * np.arange(10))[:, np.newaxis]).ravel()

        result = rwf.unsafe_sample(channel='A', sample_times=sample_times)
        np.testing.assert_equal(result, inner_sample_times)

        output_expected = np.empty_like(sample_times)
        output_received = rwf.unsafe_sample(channel='A', sample_times=sample_times, output_array=output_expected)
        self.assertIs(output_expected, output_received)
        np.testing.assert_equal(output_received, inner_sample_times)
예제 #5
0
def to_waveform(program: Loop) -> Waveform:
    if program.is_leaf():
        if program.repetition_count == 1:
            return program.waveform
        else:
            return RepetitionWaveform(program.waveform, program.repetition_count)
    else:
        if len(program) == 1:
            sequenced_waveform = to_waveform(cast(Loop, program[0]))
        else:
            sequenced_waveform = SequenceWaveform([to_waveform(cast(Loop, sub_program))
                                                   for sub_program in program])
        if program.repetition_count > 1:
            return RepetitionWaveform(sequenced_waveform, program.repetition_count)
        else:
            return sequenced_waveform
예제 #6
0
    def test_unsafe_get_subset_for_channels(self):
        body_wf = DummyWaveform(defined_channels={'a', 'b'})

        chs = {'a'}

        subset = RepetitionWaveform(body_wf, 3).get_subset_for_channels(chs)
        self.assertIsInstance(subset, RepetitionWaveform)
        self.assertIsInstance(subset._body, DummyWaveform)
        self.assertIs(subset._body.defined_channels, chs)
        self.assertEqual(subset._repetition_count, 3)
예제 #7
0
 def test_compare_key(self):
     body_wf = DummyWaveform(defined_channels={'a'})
     wf = RepetitionWaveform(body_wf, 2)
     self.assertEqual(wf.compare_key, (body_wf.compare_key, 2))
예제 #8
0
 def test_defined_channels(self):
     body_wf = DummyWaveform(defined_channels={'a'})
     self.assertIs(
         RepetitionWaveform(body_wf, 2).defined_channels,
         body_wf.defined_channels)
예제 #9
0
 def test_duration(self):
     wf = RepetitionWaveform(DummyWaveform(duration=2.2), 3)
     self.assertEqual(wf.duration, TimeType.from_float(2.2) * 3)
예제 #10
0
 def test_repr(self):
     body_wf = ConstantWaveform(amplitude=1.1, duration=1.3, channel='3')
     wf = RepetitionWaveform(body_wf, 3)
     r = repr(wf)
     self.assertEqual(wf, eval(r))