def test_collect_dependencies(workbench): """Test collecting build dependencies. """ from exopy_pulses.pulses.sequences.base_sequences import RootSequence root = RootSequence(context=DummyContext()) pulse1 = Pulse(def_1='1.0', def_2='{7_start} - 1.0') pulse2 = Pulse(def_1='{a} + 1.0', def_2='{6_start} + 1.0') pulse3 = Pulse(def_1='{3_stop} + 0.5', def_2='10.0') pulse4 = Pulse(def_1='2.0', def_2='0.5', def_mode='Start/Duration') pulse5 = Pulse(def_1='{1_stop}', def_2='0.5', def_mode='Start/Duration') pulse5.shape = SquareShape(amplitude='0.5') pulse5.kind = 'Analogical' pulse5.modulation.frequency = '1.0**' pulse5.modulation.phase = '1.0' pulse5.modulation.activated = True sequence2 = BaseSequence() sequence2.add_child_item(0, pulse3) sequence1 = BaseSequence() sequence1.add_child_item(0, pulse2) sequence1.add_child_item(1, sequence2) sequence1.add_child_item(2, pulse4) root.add_child_item(0, pulse1) root.add_child_item(1, sequence1) root.add_child_item(2, pulse5) core = workbench.get_plugin(u'enaml.workbench.core') com = 'exopy.app.dependencies.analyse' dep = core.invoke_command(com, {'obj': root, 'dependencies': 'build'}) assert not dep.errors com = 'exopy.app.dependencies.collect' dep = core.invoke_command(com, { 'kind': 'build', 'dependencies': dep.dependencies }) assert not dep.errors assert 'exopy.pulses.item' in dep.dependencies assert 'exopy.pulses.context' in dep.dependencies assert 'exopy.pulses.shape' in dep.dependencies assert 'exopy.pulses.modulation' in dep.dependencies
def test_compiling_sequence1(self): self.root.external_vars = OrderedDict({'a': 1.5}) pulse1 = Pulse(channel='Ch1_M1', def_1='1.0', def_2='{7_start} - 1.0') pulse2 = Pulse(channel='Ch1_M2', def_1='{a} + 1.0', def_2='{6_start} + 1.0') pulse3 = Pulse(channel='Ch2_M1', def_1='{3_stop} + 0.5', def_2='10.0') pulse4 = Pulse(channel='Ch2_M2', def_1='2.0', def_2='0.5', def_mode='Start/Duration') pulse5 = Pulse(channel='Ch3_M1', def_1='3.0', def_2='0.5', def_mode='Start/Duration') sequence2 = BaseSequence() sequence2.add_child_item(0, pulse3) sequence1 = BaseSequence() for i, item in enumerate([pulse2, sequence2, pulse4]): sequence1.add_child_item(i, item) for i, item in enumerate([pulse1, sequence1, pulse5]): self.root.add_child_item(i, item) res, infos, errors = self.compile(self.root, self.driver) print(errors) assert res assert self.driver.running for i in (1, 2, 3): assert 'Test_Ch%d' % i in self.driver.sequences assert len(self.driver.sequences) == 3 for i in (1, 2, 3): assert (self.driver.channels[i].array is self.driver.sequences['Test_Ch%d' % i])
def test_sequence_indexing2(): """Test adding, moving, deleting a sequence in a sequence. """ root = RootSequence() context = TestContext() root.context = context pulse1 = Pulse() pulse2 = Pulse() pulse3 = Pulse() pulse4 = Pulse() sequence1 = BaseSequence() sequence2 = BaseSequence() root.add_child_item(0, pulse1) root.add_child_item(1, sequence1) root.add_child_item(2, pulse2) assert sequence1.parent is root assert sequence1.root is root sequence1.add_child_item(0, sequence2) assert sequence2.parent is sequence1 assert sequence2.root is root assert pulse1.index == 1 assert pulse2.index == 4 assert (sorted(root.get_accessible_vars()) == sorted( ['1_start', '1_stop', '1_duration', '4_start', '4_stop', '4_duration'])) pulse1.index = 200 sequence2.add_child_item(0, pulse3) assert pulse3.parent is sequence2 assert pulse3.root is root assert pulse2.index == 5 assert pulse3.index == 4 assert (sorted(root.get_accessible_vars()) == sorted([ '1_start', '1_stop', '1_duration', '4_start', '4_stop', '4_duration', '5_start', '5_stop', '5_duration' ])) # Check that only the pulse below the modified sequence are updated. assert pulse1.index == 200 pulse1.index = 0 sequence1.add_child_item(0, pulse4) assert pulse4.index == 3 assert sequence2.index == 4 assert pulse3.index == 5 assert pulse2.index == 6 assert (sorted(root.get_accessible_vars()) == sorted([ '1_start', '1_stop', '1_duration', '3_start', '3_stop', '3_duration', '5_start', '5_stop', '5_duration', '6_start', '6_stop', '6_duration' ])) sequence1.remove_child_item(1) assert sequence2.parent is None assert sequence2.index == 0 assert pulse2.index == 4 assert (sorted(root.get_accessible_vars()) == sorted([ '1_start', '1_stop', '1_duration', '3_start', '3_stop', '3_duration', '4_start', '4_stop', '4_duration' ])) sequence1.index = 200 root2 = RootSequence() sequence2.root = root2 while True: sequence2.remove_child_item(0) if not sequence2.items: break # Check the observer was properly removed assert sequence1.index == 200