示例#1
0
    def test_is_compatible_leaf(self):
        self.assertEqual(_is_compatible(Loop(waveform=DummyWaveform(duration=1.1), repetition_count=10),
                                        min_len=11, quantum=1, sample_rate=1.),
                         _CompatibilityLevel.action_required)

        self.assertEqual(_is_compatible(Loop(waveform=DummyWaveform(duration=1.1), repetition_count=10),
                                        min_len=11, quantum=1, sample_rate=10.),
                         _CompatibilityLevel.compatible)
示例#2
0
    def test_is_compatible_node(self):
        program = Loop(children=[Loop(waveform=DummyWaveform(duration=1.5), repetition_count=2),
                                 Loop(waveform=DummyWaveform(duration=2.0))])

        self.assertEqual(_is_compatible(program, min_len=1, quantum=1, sample_rate=2.),
                         _CompatibilityLevel.compatible)

        self.assertEqual(_is_compatible(program, min_len=1, quantum=1, sample_rate=1.),
                         _CompatibilityLevel.action_required)
示例#3
0
    def test_is_compatible_incompatible(self):
        wf = DummyWaveform(duration=1.1)

        self.assertEqual(_is_compatible(Loop(waveform=wf), min_len=1, quantum=1, sample_rate=1.),
                         _CompatibilityLevel.incompatible)

        self.assertEqual(_is_compatible(Loop(waveform=wf, repetition_count=10), min_len=20, quantum=1, sample_rate=1.),
                         _CompatibilityLevel.incompatible)

        self.assertEqual(_is_compatible(Loop(waveform=wf, repetition_count=10), min_len=10, quantum=3, sample_rate=1.),
                         _CompatibilityLevel.incompatible)
示例#4
0
    def get_test_loop(waveform_generator=None):
        if waveform_generator is None:
            waveform_generator = lambda: None

        return Loop(repetition_count=1, children=[Loop(repetition_count=1, waveform=waveform_generator()),
                                                  Loop(repetition_count=10, children=[Loop(repetition_count=50, waveform=waveform_generator())]),
                                                  Loop(repetition_count=17, children=[Loop(repetition_count=2, children=[Loop(repetition_count=1, waveform=waveform_generator()),
                                                                                                                         Loop(repetition_count=1, waveform=waveform_generator())]),
                                                                                      Loop(repetition_count=1, waveform=waveform_generator())]),
                                                  Loop(repetition_count=3, children=[Loop(repetition_count=1, waveform=waveform_generator()),
                                                                                     Loop(repetition_count=1, waveform=waveform_generator())]),
                                                  Loop(repetition_count=4, children=[Loop(repetition_count=6, children=[Loop(repetition_count=7, waveform=waveform_generator()),
                                                                                                                        Loop(repetition_count=8, waveform=waveform_generator())]),
                                                                                     Loop(repetition_count=9, children=[Loop(repetition_count=10, waveform=waveform_generator()),
                                                                                                                        Loop(repetition_count=11, waveform=waveform_generator())])])])
示例#5
0
    def test_depth_1_single_waveform(self):
        program = Loop(children=[
            Loop(waveform=DummyWaveform(defined_channels={'A'}),
                 repetition_count=3)
        ],
                       repetition_count=1)

        t_program = TaborProgram(program,
                                 channels=(None, 'A'),
                                 markers=(None, None),
                                 device_properties=self.instr_props)

        self.assertEqual(t_program.waveform_mode, TaborSequencing.SINGLE)

        self.assertEqual(t_program.get_sequencer_tables(), [[(3, 0, 0)]])
        self.assertEqual(t_program.get_advanced_sequencer_table(), [(1, 1, 0)])
示例#6
0
    def test_make_compatible(self):
        wf1 = DummyWaveform(duration=1.5)
        wf2 = DummyWaveform(duration=2.0)

        program = Loop(children=[Loop(waveform=wf1, repetition_count=2),
                                 Loop(waveform=wf2)])

        _make_compatible(program, min_len=1, quantum=1, sample_rate=1.)

        self.assertIsNone(program.waveform)
        self.assertEqual(len(program), 2)
        self.assertIsInstance(program[0].waveform, RepetitionWaveform)
        self.assertIs(program[0].waveform._body, wf1)
        self.assertEqual(program[0].waveform._repetition_count, 2)
        self.assertIs(program[1].waveform, wf2)

        program = Loop(children=[Loop(waveform=wf1, repetition_count=2),
                                 Loop(waveform=wf2)], repetition_count=2)
        _make_compatible(program, min_len=5, quantum=1, sample_rate=1.)

        self.assertIsInstance(program.waveform, SequenceWaveform)
        self.assertEqual(program.children, [])
        self.assertEqual(program.repetition_count, 2)

        self.assertEqual(len(program.waveform._sequenced_waveforms), 2)
        self.assertIsInstance(program.waveform._sequenced_waveforms[0], RepetitionWaveform)
        self.assertIs(program.waveform._sequenced_waveforms[0]._body, wf1)
        self.assertEqual(program.waveform._sequenced_waveforms[0]._repetition_count, 2)
        self.assertIs(program.waveform._sequenced_waveforms[1], wf2)
示例#7
0
    def test_depth_1_advanced_sequence_unroll(self):
        wf_1 = DummyWaveform(defined_channels={'A'})
        wf_2 = DummyWaveform(defined_channels={'A'})

        program = Loop(children=[
            Loop(waveform=wf_1, repetition_count=3),
            Loop(waveform=wf_2, repetition_count=4)
        ],
                       repetition_count=5)

        t_program = TaborProgram(program,
                                 channels=(None, 'A'),
                                 markers=(None, None),
                                 device_properties=self.instr_props)

        self.assertEqual(t_program.waveform_mode, TaborSequencing.ADVANCED)

        # partial unroll of the last segment
        self.assertEqual(t_program.get_sequencer_tables(), [[(3, 0, 0),
                                                             (3, 1, 0),
                                                             (1, 1, 0)]])
        self.assertEqual(t_program.get_advanced_sequencer_table(), [(5, 1, 0)])
示例#8
0
    def test_advanced_sequence_exceptions(self):
        temp_properties = self.instr_props.copy()
        temp_properties['max_seq_len'] = 5

        program = Loop(children=[
            Loop(waveform=DummyWaveform(defined_channels={'A'}),
                 repetition_count=1)
            for _ in range(temp_properties['max_seq_len'] + 1)
        ],
                       repetition_count=2)
        with self.assertRaises(TaborException):
            TaborProgram(program.copy_tree_structure(),
                         channels=(None, 'A'),
                         markers=(None, None),
                         device_properties=temp_properties)

        temp_properties['min_seq_len'] = 100
        temp_properties['max_seq_len'] = 120
        with self.assertRaises(TaborException) as exception:
            TaborProgram(program.copy_tree_structure(),
                         channels=(None, 'A'),
                         markers=(None, None),
                         device_properties=temp_properties)
        self.assertEqual(
            str(exception.exception), 'The algorithm is not smart enough '
            'to make this sequence table longer')

        program = Loop(children=[
            Loop(children=[
                Loop(waveform=DummyWaveform(defined_channels={'A'})),
                Loop(waveform=DummyWaveform(defined_channels={'A'}))
            ]),
            Loop(children=[
                Loop(waveform=DummyWaveform(defined_channels={'A'})),
                Loop(waveform=DummyWaveform(defined_channels={'A'}))
            ])
        ])
        with self.assertRaises(TaborException) as exception:
            TaborProgram(program.copy_tree_structure(),
                         channels=(None, 'A'),
                         markers=(None, None),
                         device_properties=temp_properties)
        self.assertEqual(
            str(exception.exception), 'The algorithm is not smart enough '
            'to make this sequence table longer')
示例#9
0
    def test_compare_key(self):
        wf_gen = WaveformGenerator(num_channels=1)

        wf_1 = wf_gen()
        wf_2 = wf_gen()

        tree1 = Loop(children=[Loop(waveform=wf_1, repetition_count=5)])
        tree2 = Loop(children=[Loop(waveform=wf_1, repetition_count=4)])
        tree3 = Loop(children=[Loop(waveform=wf_2, repetition_count=5)])
        tree4 = Loop(children=[Loop(waveform=wf_1, repetition_count=5)])

        self.assertNotEqual(tree1, tree2)
        self.assertNotEqual(tree1, tree3)
        self.assertNotEqual(tree2, tree3)
        self.assertEqual(tree1, tree4)

        tree1 = Loop(children=[Loop(waveform=wf_1, repetition_count=5),
                               Loop(waveform=wf_2, repetition_count=7)], repetition_count=2)
        tree2 = Loop(children=[Loop(waveform=wf_1, repetition_count=5),
                               Loop(waveform=wf_2, repetition_count=5)], repetition_count=2)
        tree3 = Loop(children=[Loop(waveform=wf_1, repetition_count=5),
                               Loop(waveform=wf_1, repetition_count=7)], repetition_count=2)
        tree4 = Loop(children=[Loop(waveform=wf_1, repetition_count=5),
                               Loop(waveform=wf_2, repetition_count=7)], repetition_count=3)
        tree5 = Loop(children=[Loop(waveform=wf_1, repetition_count=5),
                               Loop(waveform=wf_2, repetition_count=7)], repetition_count=2)
        self.assertNotEqual(tree1, tree2)
        self.assertNotEqual(tree1, tree3)
        self.assertNotEqual(tree1, tree4)
        self.assertEqual(tree1, tree5)