コード例 #1
0
 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())
コード例 #2
0
 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})
コード例 #3
0
 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})
コード例 #4
0
 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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
 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))
コード例 #8
0
 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})
コード例 #9
0
 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)
コード例 #10
0
 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)
コード例 #11
0
 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)
コード例 #12
0
 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)
コード例 #13
0
 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)
コード例 #14
0
 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)
コード例 #15
0
 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)
コード例 #16
0
    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)
コード例 #17
0
 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)
コード例 #18
0
 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)
コード例 #19
0
    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())
コード例 #20
0
    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)
コード例 #21
0
    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())
コード例 #22
0
    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)
コード例 #23
0
 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)
コード例 #24
0
 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)
コード例 #25
0
 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)
コード例 #26
0
 def test_get_entries_instantiated_empty(self) -> None:
     table = TablePulseTemplate()
     self.assertEquals([[(0, 0, HoldInterpolationStrategy())]], table.get_entries_instantiated({}))
コード例 #27
0
 def test_get_entries_instantiated_empty(self) -> None:
     table = TablePulseTemplate()
     self.assertFalse(table.get_entries_instantiated({}))
コード例 #28
0
 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)
コード例 #29
0
 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)
コード例 #30
0
 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)