def test_get_entries_instantiated_two_entries_parameter_missing(self) -> None: table = TablePulseTemplate() t_decl = ParameterDeclaration('t', min=1, max=2) v2_decl = ParameterDeclaration('v2', min=10, max=30) table.add_entry(t_decl, v2_decl) with self.assertRaises(ParameterNotProvidedException): table.get_entries_instantiated(dict())
def test_get_entries_instantiated_unlinked_time_declarations(self) -> None: table = TablePulseTemplate() foo_decl = ParameterDeclaration('foo', min=1, max=2) bar_decl = ParameterDeclaration('bar', min=1.5, max=4) table.add_entry(foo_decl, 'v', 'linear') table.add_entry(bar_decl, 0, 'jump') instantiated_entries = table.get_entries_instantiated({'v': 2.3, 'foo': 1, 'bar': 4}) self.assertEqual([[(0, 0, HoldInterpolationStrategy()), (1, 2.3, LinearInterpolationStrategy()), (4, 0, JumpInterpolationStrategy())]], instantiated_entries) with self.assertRaises(Exception): table.get_entries_instantiated({'v': 2.3, 'foo': 2, 'bar': 1.5})
def test_get_entries_instantiated_two_entries_invalid_parameters(self) -> None: table = TablePulseTemplate() table.add_entry(0, 'v1') t_decl = ParameterDeclaration('t', min=1, max=2) v2_decl = ParameterDeclaration('v2', min=10, max=30) table.add_entry(t_decl, v2_decl) with self.assertRaises(ParameterValueIllegalException): table.get_entries_instantiated({'v1': -5, 't': 0, 'v2': 20}) with self.assertRaises(ParameterValueIllegalException): table.get_entries_instantiated({'v1': -5, 't': 1, 'v2': -20})
def test_get_entries_instantiated_two_entries_float_float_declaration_float( self) -> None: table = TablePulseTemplate({0: [('foo', -2.)]}) instantiated_entries = table.get_entries_instantiated({'foo': 2})[0] self.assertEqual([(0, -2., HoldInterpolationStrategy()), (2, -2., HoldInterpolationStrategy())], instantiated_entries)
def test_get_instantiated_entries_multi_same_time_param(self) -> None: table = TablePulseTemplate(channels=2) table.add_entry(1, 3) table.add_entry('foo', 'bar') table.add_entry(7, 3) table.add_entry(0, -5, channel=1) table.add_entry(0.5, -2, channel=1) table.add_entry('foo', 0, channel=1) table.add_entry(5, 'bar', channel=1) parameters = {'foo': 2.7, 'bar': -3.3} entries = table.get_entries_instantiated(parameters) expected = [ [ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(1, 3, HoldInterpolationStrategy()), TableEntry(2.7, -3.3, HoldInterpolationStrategy()), TableEntry(7, 3, HoldInterpolationStrategy()), ], [ TableEntry(0, -5, HoldInterpolationStrategy()), TableEntry(0.5, -2, HoldInterpolationStrategy()), TableEntry(2.7, 0, HoldInterpolationStrategy()), TableEntry(5, -3.3, HoldInterpolationStrategy()), TableEntry(7, -3.3, HoldInterpolationStrategy()) ] ] self.assertEqual(expected, entries)
def test_get_instantiated_entries_multi_same_time_param(self) -> None: table = TablePulseTemplate({ 0: [(1, 3), ('foo', 'bar'), (7, 3)], 1: [(0, -5), (0.5, -2), ('foo', 0), (5, 'bar')] }) parameters = {'foo': 2.7, 'bar': -3.3} entries = table.get_entries_instantiated(parameters) expected = { 0: [ TableEntry(0, 3, HoldInterpolationStrategy()), TableEntry(1, 3, HoldInterpolationStrategy()), TableEntry(2.7, -3.3, HoldInterpolationStrategy()), TableEntry(7, 3, HoldInterpolationStrategy()), ], 1: [ TableEntry(0, -5, HoldInterpolationStrategy()), TableEntry(0.5, -2, HoldInterpolationStrategy()), TableEntry(2.7, 0, HoldInterpolationStrategy()), TableEntry(5, -3.3, HoldInterpolationStrategy()), TableEntry(7, -3.3, HoldInterpolationStrategy()) ] } self.assertEqual(expected, entries)
def test_get_entries_instantiated_multiple_parameters_missing( self) -> None: table = TablePulseTemplate({0: [(0, 'v1'), ('t', 'v2')]}) with self.assertRaises(ParameterNotProvidedException): table.get_entries_instantiated(dict()) with self.assertRaises(ParameterNotProvidedException): table.get_entries_instantiated(dict(v1=1)) with self.assertRaises(ParameterNotProvidedException): table.get_entries_instantiated(dict(v1=1, t=2)) table.get_entries_instantiated(dict(v1=1, t=2, v2=2))
def test_get_entries_instantiated_unlinked_time_declarations(self) -> None: table = TablePulseTemplate() foo_decl = ParameterDeclaration('foo', min=1, max=2) bar_decl = ParameterDeclaration('bar', min=1.5, max=4) table.add_entry(foo_decl, 'v', 'linear') table.add_entry(bar_decl, 0, 'jump') instantiated_entries = table.get_entries_instantiated({'v': 2.3, 'foo': 1, 'bar': 4}) self.assertEqual([(0, 0, HoldInterpolationStrategy()), (1, 2.3, LinearInterpolationStrategy()), (4, 0, JumpInterpolationStrategy())], instantiated_entries) self.assertRaises(Exception, table.get_entries_instantiated, {'v': 2.3, 'foo': 2, 'bar': 1.5})
def test_get_entries_instantiated_two_equal_entries(self) -> None: table = TablePulseTemplate({0: [(0, 0), (1, 5), (3, 5), (5, 1)]}) entries = table.get_entries_instantiated(dict()) expected = [ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(1, 5, HoldInterpolationStrategy()), TableEntry(3, 5, HoldInterpolationStrategy()), TableEntry(5, 1, HoldInterpolationStrategy()) ] self.assertEqual({0: expected}, entries)
def test_get_entries_instantiated_two_entries_float_declaraton_declaration_declaration( self) -> None: table = TablePulseTemplate({0: [(0, 'v1'), ('t', 'v2')]}) instantiated_entries = table.get_entries_instantiated({ 'v1': -5, 'v2': 5, 't': 3 })[0] self.assertEqual([(0, -5, HoldInterpolationStrategy()), (3, 5, HoldInterpolationStrategy())], instantiated_entries)
def test_get_entries_instantiated_two_equal_entries(self) -> None: table = TablePulseTemplate() table.add_entry(0, 0) table.add_entry(1, 5) table.add_entry(3, 5) table.add_entry(5, 1) entries = table.get_entries_instantiated({}) expected = [[ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(1, 5, HoldInterpolationStrategy()), TableEntry(3, 5, HoldInterpolationStrategy()), TableEntry(5, 1, HoldInterpolationStrategy()) ]] self.assertEqual(expected, entries)
def test_get_entries_instantiated_two_equal_entries(self) -> None: table = TablePulseTemplate() table.add_entry(0, 0) table.add_entry(1, 5) table.add_entry(3, 5) table.add_entry(5, 1) entries = table.get_entries_instantiated({}) expected = [ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(1, 5, HoldInterpolationStrategy()), TableEntry(3, 5, HoldInterpolationStrategy()), TableEntry(5, 1, HoldInterpolationStrategy()) ] self.assertEqual(expected, entries)
def test_get_entries_instantiated_removal_for_three_subsequent_equal_entries(self) -> None: table = TablePulseTemplate() table.add_entry(1, 5) table.add_entry(1.5, 5) table.add_entry(2, 5) table.add_entry(3, 0) entries = table.get_entries_instantiated({}) expected = [ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(1, 5, HoldInterpolationStrategy()), TableEntry(2, 5, HoldInterpolationStrategy()), TableEntry(3, 0, HoldInterpolationStrategy()) ] self.assertEqual(expected, entries)
def test_get_entries_instantiated_removal_for_three_subsequent_equal_entries(self) -> None: table = TablePulseTemplate() table.add_entry(1, 5) table.add_entry(1.5, 5) table.add_entry(2, 5) table.add_entry(3, 0) entries = table.get_entries_instantiated({}) expected = [[ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(1, 5, HoldInterpolationStrategy()), TableEntry(2, 5, HoldInterpolationStrategy()), TableEntry(3, 0, HoldInterpolationStrategy()) ]] self.assertEqual(expected, entries)
def test_build_sequence(self) -> None: table = TablePulseTemplate() foo_decl = ParameterDeclaration('foo', min=1) bar_decl = ParameterDeclaration('bar') table.add_entry(foo_decl, 'v', 'linear') table.add_entry(bar_decl, 0, 'jump') parameters = {'v': 2.3, 'foo': 1, 'bar': 4} instantiated_entries = tuple(table.get_entries_instantiated(parameters)) sequencer = DummySequencer() instruction_block = DummyInstructionBlock() table.build_sequence(sequencer, parameters, {}, instruction_block) waveform = TableWaveform(instantiated_entries) self.assertEqual(1, len(instruction_block.instructions)) instruction = instruction_block.instructions[0] self.assertIsInstance(instruction, EXECInstruction) self.assertEqual(waveform, instruction.waveform)
def test_build_sequence_multi_one_channel_empty(self) -> None: table = TablePulseTemplate(channels=2) table.add_entry('foo', 4) parameters = {'foo': 3} instantiated_entries = table.get_entries_instantiated(parameters) sequencer = DummySequencer() instruction_block = DummyInstructionBlock() table.build_sequence(sequencer, parameters, {}, instruction_block) expected_waveform = TableWaveform(instantiated_entries) self.assertEqual(1, len(instruction_block.instructions)) instruction = instruction_block.instructions[0] self.assertIsInstance(instruction, EXECInstruction) self.assertEqual(expected_waveform, instruction.waveform) waveform = table.build_waveform(parameters) self.assertEqual(expected_waveform, waveform)
def test_build_sequence(self) -> None: table = TablePulseTemplate() foo_decl = ParameterDeclaration('foo', min=1) bar_decl = ParameterDeclaration('bar') table.add_entry(foo_decl, 'v', 'linear') table.add_entry(bar_decl, 0, 'jump') parameters = {'v': 2.3, 'foo': 1, 'bar': 4} instantiated_entries = tuple(table.get_entries_instantiated(parameters)) waveform = table.build_waveform(parameters) sequencer = DummySequencer() instruction_block = DummyInstructionBlock() table.build_sequence(sequencer, parameters, {}, instruction_block) expected_waveform = TableWaveform(instantiated_entries) self.assertEqual(1, len(instruction_block.instructions)) instruction = instruction_block.instructions[0] self.assertIsInstance(instruction, EXECInstruction) self.assertEqual(expected_waveform, instruction.waveform) self.assertEqual(expected_waveform, waveform)
def test_get_entries_auto_insert(self) -> None: table = TablePulseTemplate({ 0: [('foo', 'v', 'linear'), ('bar', 0, 'jump')], 1: [(0, 3, 'linear'), ('bar+foo', 2, 'linear')] }) instantiated_entries = table.get_entries_instantiated({ 'v': 2.3, 'foo': 1, 'bar': 4 }) self.assertEqual( { 0: [(0, 2.3, HoldInterpolationStrategy()), (1, 2.3, LinearInterpolationStrategy()), (4, 0, JumpInterpolationStrategy()), (5, 0, HoldInterpolationStrategy())], 1: [(0, 3, LinearInterpolationStrategy()), (5, 2, LinearInterpolationStrategy())] }, instantiated_entries)
def test_get_entries_instantiated_removal_for_three_subsequent_equal_entries_does_not_destroy_linear_interpolation(self) -> None: table = TablePulseTemplate() table.add_entry(0, 5) table.add_entry(2, 5, 'linear') table.add_entry(5, 5) table.add_entry(10, 0, 'linear') entries = table.get_entries_instantiated({}) expected = [ TableEntry(0, 5, HoldInterpolationStrategy()), TableEntry(5, 5, HoldInterpolationStrategy()), TableEntry(10, 0, LinearInterpolationStrategy()) ] self.assertEqual(expected, entries) result_sampled = TableWaveform(entries).sample(numpy.linspace(0, 10, 11), 0) self.assertEqual([5, 5, 5, 5, 5, 5, 4, 3, 2, 1, 0], result_sampled.tolist())
def test_get_entries_instantiated_two_channels_one_empty(self) -> None: table = TablePulseTemplate(channels=2) table.add_entry('foo', 4) parameters = {'foo': 10} entries = table.get_entries_instantiated(parameters) expected = [ [ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(10, 4, HoldInterpolationStrategy()), ], [ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(10, 0, HoldInterpolationStrategy()) ] ] self.assertEqual(expected, entries)
def test_get_entries_instantiated_removal_for_three_subsequent_equal_entries_does_not_destroy_linear_interpolation(self) -> None: table = TablePulseTemplate() table.add_entry(0, 5) table.add_entry(2, 5, 'linear') table.add_entry(5, 5) table.add_entry(10, 0, 'linear') entries = table.get_entries_instantiated({}) expected = [[ TableEntry(0, 5, HoldInterpolationStrategy()), TableEntry(5, 5, HoldInterpolationStrategy()), TableEntry(10, 0, LinearInterpolationStrategy()) ]] self.assertEqual(expected, entries) result_sampled = TableWaveform(entries).sample(numpy.linspace(0, 10, 11), 0) numbers = [5, 5, 5, 5, 5, 5, 4, 3, 2, 1, 0] expected = [[float(x) for x in numbers]] self.assertEqual(expected, result_sampled.tolist())
def test_get_instaniated_entries_multi_one_empty_channel(self) -> None: table = TablePulseTemplate(channels=2) table.add_entry(1, 3, channel=1) table.add_entry('foo', 'bar', 'linear', channel=1) parameters = {'foo': 5.2, 'bar': -83.8} entries = table.get_entries_instantiated(parameters) expected = [ [ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(5.2, 0, HoldInterpolationStrategy()) ], [ TableEntry(0, 0, HoldInterpolationStrategy()), TableEntry(1, 3, HoldInterpolationStrategy()), TableEntry(5.2, -83.8, LinearInterpolationStrategy()) ] ] self.assertEqual(expected, entries)
def test_get_entries_instantiated_one_entry_float_float(self) -> None: table = TablePulseTemplate({0: [(0, 2)]}) instantiated_entries = table.get_entries_instantiated(dict())[0] self.assertEqual([(0, 2, HoldInterpolationStrategy())], instantiated_entries)
def test_get_entries_instantiated_one_entry_float_declaration(self) -> None: table = TablePulseTemplate() table.add_entry(0, 'foo') instantiated_entries = table.get_entries_instantiated({'foo': 2}) self.assertEqual([[(0, 2, HoldInterpolationStrategy())]], instantiated_entries)
def test_get_entries_instantiated_two_entries_float_float_declaration_float(self) -> None: table = TablePulseTemplate() table.add_entry('foo', -3.1415) instantiated_entries = table.get_entries_instantiated({'foo': 2}) self.assertEqual([[(0, 0, HoldInterpolationStrategy()), (2, -3.1415, HoldInterpolationStrategy())]], instantiated_entries)
def test_get_entries_instantiated_empty(self) -> None: table = TablePulseTemplate() self.assertEquals([[(0, 0, HoldInterpolationStrategy())]], table.get_entries_instantiated({}))
def test_get_entries_instantiated_empty(self) -> None: table = TablePulseTemplate() self.assertFalse(table.get_entries_instantiated({}))
def test_get_entries_instantiated_two_entries_float_declaraton_declaration_declaration(self) -> None: table = TablePulseTemplate() table.add_entry(0, 'v1') table.add_entry('t', 'v2') instantiated_entries = table.get_entries_instantiated({'v1': -5, 'v2': 5, 't': 3}) self.assertEqual([(0, -5, HoldInterpolationStrategy()), (3, 5, HoldInterpolationStrategy())], instantiated_entries)
def test_get_entries_instantiated_two_entries_float_float_declaration_float(self) -> None: table = TablePulseTemplate() table.add_entry('foo', -3.1415) instantiated_entries = table.get_entries_instantiated({'foo': 2}) self.assertEqual([(0, 0, HoldInterpolationStrategy()), (2, -3.1415, HoldInterpolationStrategy())], instantiated_entries)
def test_get_entries_instantiated_one_entry_float_declaration(self) -> None: table = TablePulseTemplate() table.add_entry(0, 'foo') instantiated_entries = table.get_entries_instantiated({'foo': 2}) self.assertEqual([(0, 2, HoldInterpolationStrategy())], instantiated_entries)