Example #1
0
    def test_waveform_before_trigger_exception(self):
        runtime = init_runtime()
        sequence = init_fixed_sequence(runtime)
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)

        waveform_slice0 = DC(0.1e-6, 2)

        slice0.add_waveform(mock_awg3, waveform_slice0)

        sequence.setup_trigger()

        with pytest.raises(AssertionError):
            sequence.setup_channels()
Example #2
0
    def test_sequence_stack(self):
        runtime = init_runtime()
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)
        assert isinstance(slice0, FixedLengthSlice)
        waveform1 = DC(0.1e-6, 1)
        waveform2 = DC(0.1e-6, 2)
        waveform3 = DC(0.1e-6, 3)

        slice0.add_waveform(mock_awg0, waveform1)
        slice0.add_waveform(mock_awg0, waveform2)
        slice0.add_waveform(mock_awg0, waveform3)

        sequence.setup_trigger()
        sequence.setup_channels()
        sequence.run_channels()

        expected_waveform, _ = Blank(2.7e-6).concat(waveform1).concat(waveform2) \
            .concat(waveform3) \
            .normalized_sample(mock_awg0.device.sample_rate)

        assert isinstance(expected_waveform, np.ndarray)
        assert isinstance(mock_awg0.device.raw_waveform, np.ndarray)

        assert len(expected_waveform) == len(mock_awg0.device.raw_waveform)

        assert (mock_awg0.device.raw_waveform == expected_waveform).all()
Example #3
0
    def test_slice_padding_across_multiple_trigger_channels(self):
        runtime = init_runtime()
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)
        assert isinstance(slice2, FixedLengthSlice)
        waveform_awg0 = DC(0.1e-6, 1)
        waveform_awg2 = DC(0.1e-6, 1)
        waveform_awg4 = DC(0.1e-6, 1)

        slice2.add_waveform(mock_awg0, waveform_awg0)
        slice2.add_waveform(mock_awg3, waveform_awg2)
        slice2.add_waveform(mock_awg6, waveform_awg4)

        sequence.setup_trigger()
        sequence.setup_channels()
        sequence.run_channels()

        awg_0_expected_waveform, _ = Blank(2e-6 + 0.9e-6).concat(waveform_awg0) \
            .normalized_sample(mock_awg0.device.sample_rate)
        awg_2_expected_waveform, _ = Blank(1e-6 + 0.9e-6).concat(waveform_awg2) \
            .normalized_sample(mock_awg3.device.sample_rate)
        awg_4_expected_waveform, _ = Blank(0.9e-6).concat(waveform_awg4) \
            .normalized_sample(mock_awg6.device.sample_rate)

        for exp, awg in [
            (awg_0_expected_waveform, mock_awg0.device.raw_waveform),
            (awg_2_expected_waveform, mock_awg3.device.raw_waveform),
            (awg_4_expected_waveform, mock_awg6.device.raw_waveform)
        ]:
            assert isinstance(exp, np.ndarray)
            assert isinstance(awg, np.ndarray)
            assert len(exp) == len(awg)
            assert (exp == awg).all()
Example #4
0
    def test_trigger_setup(self):
        runtime = init_runtime()
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)
        sequence.setup_trigger()

        for channel, expected_raise_at, expected_duration in [(0, 0, 2e-6),
                                                              (1, 1e-6, 0),
                                                              (2, 2e-6, 0)]:
            raise_at, duration = mock_dg.device.get_channel_delay(channel)
            assert raise_at == expected_raise_at
            if expected_duration > 0:
                assert duration == expected_duration
Example #5
0
    def test_procedure_result_retrieve(self):
        runtime = init_runtime()
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)

        assert isinstance(slice0, Slice)

        cycle = self.MyTestStackCycle(runtime, slice0, mock_awg0,
                                      [(0.1e-6, 1)])
        cycle.add_procedure(self.DummyResultProcedure("prefix_"))
        res = cycle.run()

        assert res["prefix_res1"] == 3333
        assert res["prefix_res2"] == 4444
Example #6
0
    def test_procedure_has_update(self):
        runtime = init_runtime()
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)

        assert isinstance(slice0, Slice)

        cycle = self.MyTestStackCycle(runtime, slice0, mock_awg0,
                                      [(0.1e-6, 1)])
        cycle.run()

        assert not cycle.procedures[0].has_update

        cycle.procedures[0].waveform = DC(0.1e-6, 2)

        assert cycle.procedures[0].has_update
Example #7
0
    def test_stack_procedures(self):
        runtime = init_runtime()
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)

        assert isinstance(slice0, Slice)

        cycle = self.MyTestStackCycle(runtime, slice0, mock_awg0,
                                      [(0.1e-6, 1), (0.1e-6, 2), (0.1e-6, 3)])
        cycle.run()

        expected_waveform, _ = Blank(2.7e-6).concat(DC(0.1e-6, 1)) \
            .concat(DC(0.1e-6, 2)).concat(DC(0.1e-6, 3)) \
            .normalized_sample(mock_awg0.device.sample_rate)

        assert isinstance(expected_waveform, np.ndarray)
        assert isinstance(mock_awg0.device.raw_waveform, np.ndarray)

        assert len(expected_waveform) == len(mock_awg0.device.raw_waveform)
        assert (mock_awg0.device.raw_waveform == expected_waveform).all()
Example #8
0
    def test_sweep(self):
        runtime = init_runtime()
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)

        assert isinstance(slice0, Slice)

        cycle = self.MyTestSweepCycle(runtime, slice0, mock_awg0)
        cycle.proc.amp = 1
        test_experiment = Sweep1DExperiment(runtime, "Test Experiment", cycle)

        res = test_experiment.sweep(
            scan_param="proc.len",
            scan_param_unit="s",
            points=np.linspace(0, 1e-6, 3),
            result_name="prefix_res1",
            result_unit="arb."
        )

        assert (res['prefix_res1'] == np.array([3333, 3334, 3335])).all()
Example #9
0
    def test_slice_padding_after(self):
        runtime = init_runtime()
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)
        assert isinstance(slice0, FixedLengthSlice)
        waveform = DC(0.1e-6, 1)

        slice0.set_waveform_padding(mock_awg0, PaddingPosition.PADDING_BEHIND)
        slice0.add_waveform(mock_awg0, waveform)

        sequence.setup_trigger()
        sequence.setup_channels()
        sequence.run_channels()

        expected_waveform, _ = waveform.concat(Blank(3e-6 - 0.1e-6)) \
            .normalized_sample(mock_awg0.device.sample_rate)

        assert isinstance(expected_waveform, np.ndarray)
        assert isinstance(mock_awg0.device.raw_waveform, np.ndarray)

        assert len(expected_waveform) == len(mock_awg0.device.raw_waveform)

        assert (mock_awg0.device.raw_waveform == expected_waveform).all()
Example #10
0
    def test_same_awg_channel_across_slices(self):
        runtime = init_runtime()
        sequence, slice0, slice1, slice2 = init_fixed_sequence(runtime)

        waveform_slice1 = DC(0.1e-6, 2)
        waveform_slice2 = DC(0.1e-6, 3)

        slice1.add_waveform(mock_awg0, waveform_slice1)
        slice2.add_waveform(mock_awg0, waveform_slice2)

        sequence.setup_trigger()
        sequence.setup_channels()
        sequence.run_channels()

        expected_waveform, _ = Blank(1.9e-6).concat(waveform_slice1) \
            .concat(Blank(0.9e-6)).concat(waveform_slice2) \
            .normalized_sample(mock_awg0.device.sample_rate)

        assert isinstance(expected_waveform, np.ndarray)
        assert isinstance(mock_awg0.device.raw_waveform, np.ndarray)

        assert len(expected_waveform) == len(mock_awg0.device.raw_waveform)
        assert (mock_awg0.device.raw_waveform == expected_waveform).all()
Example #11
0
from unittest.mock import MagicMock, PropertyMock, patch, call
import numpy as np

from thunderq.cycles.native import Cycle
from utils import init_runtime, init_fixed_sequence

runtime = init_runtime()
init_fixed_sequence(runtime)

test_param1 = PropertyMock()
test_param2 = PropertyMock()
test_param3 = PropertyMock()

test_result = np.linspace(0, 99, 100)


def prepare_cycle():
    global test_param1, test_param2, test_param3
    cycle = MagicMock()
    test_param1 = PropertyMock()
    test_param2 = PropertyMock()
    test_param3 = PropertyMock()
    type(cycle).test_param1 = test_param1
    type(cycle).test_param2 = test_param2
    type(cycle).test_param3 = test_param3
    type(cycle).add_procedure = MagicMock()
    type(cycle).clear_procedures = MagicMock()
    type(cycle).run = MagicMock()
    type(cycle).run.side_effect = [{'test_result': v} for v in test_result]
    type(cycle).run_sequence = MagicMock()
    type(cycle).stop_sequence = MagicMock()