Exemple #1
0
    def test_unsafe_sample(self):
        dwfs = (DummyWaveform(duration=1.),
                DummyWaveform(duration=3.),
                DummyWaveform(duration=2.))

        swf = SequenceWaveform(dwfs)

        sample_times = np.arange(0, 60)*0.1
        expected_output = np.concatenate((sample_times[:10], sample_times[10:40]-1, sample_times[40:]-4))

        output = swf.unsafe_sample('A', sample_times=sample_times)
        np.testing.assert_equal(expected_output, output)

        output_2 = swf.unsafe_sample('A', sample_times=sample_times, output_array=output)
        self.assertIs(output_2, output)
Exemple #2
0
    def test_unsafe_get_subset_for_channels(self):
        dwf_1 = DummyWaveform(duration=2.2, defined_channels={'A', 'B', 'C'})
        dwf_2 = DummyWaveform(duration=3.3, defined_channels={'A', 'B', 'C'})

        wf = SequenceWaveform([dwf_1, dwf_2])

        subset = {'A', 'C'}
        sub_wf = wf.unsafe_get_subset_for_channels(subset)
        self.assertIsInstance(sub_wf, SequenceWaveform)

        self.assertEqual(len(sub_wf.compare_key), 2)
        self.assertEqual(sub_wf.compare_key[0].defined_channels, subset)
        self.assertEqual(sub_wf.compare_key[1].defined_channels, subset)

        self.assertEqual(sub_wf.compare_key[0].duration, TimeType.from_float(2.2))
        self.assertEqual(sub_wf.compare_key[1].duration, TimeType.from_float(3.3))
Exemple #3
0
    def test_sample_times_type(self) -> None:
        with mock.patch.object(DummyWaveform, 'unsafe_sample') as unsafe_sample_patch:
            dwfs = (DummyWaveform(duration=1.),
                    DummyWaveform(duration=3.),
                    DummyWaveform(duration=2.))

            swf = SequenceWaveform(dwfs)

            sample_times = np.arange(0, 60) * 0.1
            expected_output = np.concatenate((sample_times[:10], sample_times[10:40] - 1, sample_times[40:] - 4))
            expected_inputs = sample_times[0:10], sample_times[10:40] - 1, sample_times[40:] - 4

            swf.unsafe_sample('A', sample_times=sample_times)
            inputs = [call_args[1]['sample_times'] for call_args in unsafe_sample_patch.call_args_list] # type: List[np.ndarray]
            np.testing.assert_equal(expected_inputs, inputs)
            self.assertEqual([input.dtype for input in inputs], [np.float64 for _ in inputs])
Exemple #4
0
 def build_waveform(self,
                    parameters: Dict[str, Real],
                    channel_mapping: Dict[ChannelID, ChannelID]) -> SequenceWaveform:
     self.validate_parameter_constraints(parameters=parameters)
     return SequenceWaveform([sub_template.build_waveform(parameters,
                                                          channel_mapping=channel_mapping)
                              for sub_template in self.__subtemplates])
Exemple #5
0
    def test_init(self):
        dwf_ab = DummyWaveform(duration=1.1, defined_channels={'A', 'B'})
        dwf_abc = DummyWaveform(duration=2.2, defined_channels={'A', 'B', 'C'})

        with self.assertRaises(ValueError):
            SequenceWaveform([])

        with self.assertRaises(ValueError):
            SequenceWaveform((dwf_ab, dwf_abc))

        swf1 = SequenceWaveform((dwf_ab, dwf_ab))
        self.assertEqual(swf1.duration, 2 * dwf_ab.duration)
        self.assertEqual(len(swf1.compare_key), 2)

        swf2 = SequenceWaveform((swf1, dwf_ab))
        self.assertEqual(swf2.duration, 3 * dwf_ab.duration)

        self.assertEqual(len(swf2.compare_key), 3)
    def test_from_sequence(self):
        dwf = DummyWaveform(duration=1.1, defined_channels={'A'})

        self.assertIs(dwf, SequenceWaveform.from_sequence((dwf,)))

        swf1 = SequenceWaveform.from_sequence((dwf, dwf))
        swf2 = SequenceWaveform.from_sequence((swf1, dwf))

        assert_constant_consistent(self, swf1)
        assert_constant_consistent(self, swf2)

        self.assertEqual(3*(dwf,), swf2.sequenced_waveforms)

        cwf_2_a = ConstantWaveform(duration=1.1, amplitude=2.2, channel='A')
        cwf_3 = ConstantWaveform(duration=1.1, amplitude=3.3, channel='A')
        cwf_2_b = ConstantWaveform(duration=1.1, amplitude=2.2, channel='A')

        with mock.patch.object(ConstantWaveform, 'from_mapping', return_value=mock.sentinel) as from_mapping:
            new_constant = SequenceWaveform.from_sequence((cwf_2_a, cwf_2_b))
            self.assertIs(from_mapping.return_value, new_constant)
            from_mapping.assert_called_once_with(2*TimeType.from_float(1.1), {'A': 2.2})

        swf3 = SequenceWaveform.from_sequence((cwf_2_a, dwf))
        self.assertEqual((cwf_2_a, dwf), swf3.sequenced_waveforms)
        self.assertIsNone(swf3.constant_value('A'))
        assert_constant_consistent(self, swf3)

        swf3 = SequenceWaveform.from_sequence((cwf_2_a, cwf_3))
        self.assertEqual((cwf_2_a, cwf_3), swf3.sequenced_waveforms)
        self.assertIsNone(swf3.constant_value('A'))
        assert_constant_consistent(self, swf3)
Exemple #7
0
def _render_instruction_block(
    sequence: AbstractInstructionBlock,
    render_measurements=False
) -> Tuple[Optional[Waveform], List[MeasurementWindow]]:
    """Transform program into single waveform and measurement windows. The specific implementation of render for
    InstructionBlock arguments."""

    waveforms, measurements, total_time = iter_instruction_block(
        sequence, render_measurements)
    if not waveforms:
        return None, measurements
    sequence_waveform = SequenceWaveform(waveforms)

    return sequence_waveform, measurements
Exemple #8
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
 def test_repr(self):
     cwf_2_a = ConstantWaveform(duration=1.1, amplitude=2.2, channel='A')
     cwf_3 = ConstantWaveform(duration=1.1, amplitude=3.3, channel='A')
     swf = SequenceWaveform([cwf_2_a, cwf_3])
     r = repr(swf)
     self.assertEqual(swf, eval(r))