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)
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)
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)
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())])])])
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)])
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)
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)])
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')
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)