コード例 #1
0
 def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]:
     repetition_count = self.__repetition_count
     if isinstance(repetition_count, ParameterDeclaration):
         repetition_count = serializer._serialize_subpulse(repetition_count)
     return dict(
         type=serializer.get_type_identifier(self),
         body=serializer._serialize_subpulse(self.__body),
         repetition_count=repetition_count
     )
コード例 #2
0
 def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]:
     data = dict()
     data['is_measurement_pulse'] = self.__is_measurement_pulse
     data['time_parameter_declarations'] = [serializer._serialize_subpulse(self.__time_parameter_declarations[key]) for key in sorted(self.__time_parameter_declarations.keys())]
     data['voltage_parameter_declarations'] = [serializer._serialize_subpulse(self.__voltage_parameter_declarations[key]) for key in sorted(self.__voltage_parameter_declarations.keys())]
     entries = []
     for (time, voltage, interpolation) in self.__entries:
         if isinstance(time, ParameterDeclaration):
             time = time.name
         if isinstance(voltage, ParameterDeclaration):
             voltage = voltage.name
         entries.append((time, voltage, str(interpolation)))
     data['entries'] = entries
     data['type'] = serializer.get_type_identifier(self)
     return data
コード例 #3
0
 def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]:
     data = dict(
         type=serializer.get_type_identifier(self),
         condition=self.__condition,
         body=serializer._serialize_subpulse(self.__body)
     )
     return data
コード例 #4
0
    def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]:
        data = dict()
        data['external_parameters'] = sorted(list(self.parameter_names))
        data['is_interruptable'] = self.is_interruptable

        subtemplates = []
        for (subtemplate, mapping_functions) in self.subtemplates:
            mapping_functions_strings = {k: m.string for k, m in mapping_functions.items()}
            subtemplate = serializer._serialize_subpulse(subtemplate)
            subtemplates.append(dict(template=subtemplate, mappings=copy.deepcopy(mapping_functions_strings)))
        data['subtemplates'] = subtemplates

        data['type'] = serializer.get_type_identifier(self)
        return data
コード例 #5
0
 def get_serialization_data(self, serializer: Serializer) -> Dict[str, Any]:
     return dict(data=serializer._serialize_subpulse(self.data))
コード例 #6
0
class SerializerTests(unittest.TestCase):

    def setUp(self) -> None:
        self.backend = DummyStorageBackend()
        self.serializer = Serializer(self.backend)
        self.deserialization_data = dict(data='THIS IS DARTAA!',
                                         type=self.serializer.get_type_identifier(DummySerializable()))

    def test_serialize_subpulse_no_identifier(self) -> None:
        serializable = DummySerializable(data='bar')
        serialized = self.serializer._serialize_subpulse(serializable)
        self.assertEqual(serializable.get_serialization_data(self.serializer), serialized)

    def test_serialize_subpulse_identifier(self) -> None:
        serializable = DummySerializable(identifier='bar')
        serialized = self.serializer._serialize_subpulse(serializable)
        self.assertEqual(serializable.identifier, serialized)

    def test_serialize_subpulse_duplicate_identifier(self) -> None:
        serializable = DummySerializable(identifier='bar')
        self.serializer._serialize_subpulse(serializable)
        self.serializer._serialize_subpulse(serializable)
        serializable = DummySerializable(data='this is other data than before', identifier='bar')
        with self.assertRaises(Exception):
            self.serializer._serialize_subpulse(serializable)

    def test_dictify_no_identifier(self) -> None:
        serializable = DummySerializable(data='bar')
        dictified = self.serializer.dictify(serializable)
        self.assertEqual({'': serializable.get_serialization_data(self.serializer)}, dictified)

    def test_dictify_identifier(self) -> None:
        serializable = DummySerializable(data='bar', identifier='foo')
        dicified = self.serializer.dictify(serializable)
        self.assertEqual({serializable.identifier: serializable.get_serialization_data(self.serializer)}, dicified)

    def test_dicitify_no_identifier_one_nesting_no_identifier(self) -> None:
        inner_serializable = DummySerializable(data='bar')
        serializable = NestedDummySerializable(data=inner_serializable)
        dicitified = self.serializer.dictify(serializable)
        self.assertEqual({'': serializable.get_serialization_data(self.serializer)}, dicitified)

    def test_dictify_no_identifier_one_nesting_identifier(self) -> None:
        inner_serializable = DummySerializable(data='bar', identifier='foo')
        serializable = NestedDummySerializable(data=inner_serializable)
        dicitified = self.serializer.dictify(serializable)
        self.assertEqual({'': serializable.get_serialization_data(self.serializer),
                          inner_serializable.identifier: inner_serializable.get_serialization_data(self.serializer)},
                         dicitified)

    def test_dictify_identifier_one_nesting_no_identifier(self) -> None:
        inner_serializable = DummySerializable(data='bar')
        serializable = NestedDummySerializable(data=inner_serializable, identifier='outer_foo')
        dicitified = self.serializer.dictify(serializable)
        self.assertEqual({serializable.identifier: serializable.get_serialization_data(self.serializer)}, dicitified)

    def test_dictify_identifier_one_nesting_identifier(self) -> None:
        inner_serializable = DummySerializable(data='bar', identifier='foo')
        serializable = NestedDummySerializable(data=inner_serializable, identifier='outer_foo')
        dicitified = self.serializer.dictify(serializable)
        self.assertEqual({inner_serializable.identifier: inner_serializable.get_serialization_data(self.serializer),
                          serializable.identifier: serializable.get_serialization_data(self.serializer)},
                         dicitified)

    def __serialization_test_helper(self, serializable: Serializable, expected: Dict[str, str]) -> None:
        self.serializer.serialize(serializable)
        expected = {k: json.dumps(v, indent=4, sort_keys=True) for k,v in expected.items()}
        self.assertEqual(expected, self.backend.stored_items)

    def test_serialize_no_identifier(self) -> None:
        serializable = DummySerializable(data='bar')
        expected = {'main': serializable.get_serialization_data(self.serializer)}
        self.__serialization_test_helper(serializable, expected)

    def test_serialize_identifier(self) -> None:
        serializable = DummySerializable(data='bar', identifier='foo')
        expected = {serializable.identifier: serializable.get_serialization_data(self.serializer)}
        self.__serialization_test_helper(serializable, expected)

    def test_serialize_no_identifier_one_nesting_no_identifier(self) -> None:
        inner_serializable = DummySerializable(data='bar')
        serializable = NestedDummySerializable(data=inner_serializable)
        expected = {'main': serializable.get_serialization_data(self.serializer)}
        self.__serialization_test_helper(serializable, expected)

    def test_serialize_no_identifier_one_nesting_identifier(self) -> None:
        inner_serializable = DummySerializable(data='bar', identifier='foo')
        serializable = NestedDummySerializable(data=inner_serializable)
        expected = {'main': serializable.get_serialization_data(self.serializer),
                    inner_serializable.identifier: inner_serializable.get_serialization_data(self.serializer)}
        self.__serialization_test_helper(serializable, expected)

    def test_serialize_identifier_one_nesting_no_identifier(self) -> None:
        inner_serializable = DummySerializable(data='bar')
        serializable = NestedDummySerializable(data=inner_serializable, identifier='outer_foo')
        expected = {serializable.identifier: serializable.get_serialization_data(self.serializer)}
        self.__serialization_test_helper(serializable, expected)

    def test_serialize_identifier_one_nesting_identifier(self) -> None:
        inner_serializable = DummySerializable(data='bar', identifier='foo')
        serializable = NestedDummySerializable(data=inner_serializable, identifier='outer_foo')
        expected = {serializable.identifier: serializable.get_serialization_data(self.serializer),
                    inner_serializable.identifier: inner_serializable.get_serialization_data(self.serializer)}
        self.__serialization_test_helper(serializable, expected)

    def test_deserialize_dict(self) -> None:
        deserialized = self.serializer.deserialize(self.deserialization_data)
        self.assertIsInstance(deserialized, DummySerializable)
        self.assertEqual(self.deserialization_data['data'], deserialized.data)

    def test_deserialize_identifier(self) -> None:
        jsonized_data = json.dumps(self.deserialization_data, indent=4, sort_keys=True)
        identifier = 'foo'
        self.backend.put(identifier, jsonized_data)

        deserialized = self.serializer.deserialize(identifier)
        self.assertIsInstance(deserialized, DummySerializable)
        self.assertEqual(self.deserialization_data['data'], deserialized.data)

    def test_serialization_and_deserialization_combined(self) -> None:
        table_foo = TablePulseTemplate(identifier='foo')
        table_foo.add_entry('hugo', 2)
        table_foo.add_entry(ParameterDeclaration('albert', max=9.1), 'voltage')
        table = TablePulseTemplate(measurement=True)
        foo_mappings = dict(hugo='ilse', albert='albert', voltage='voltage')
        sequence = SequencePulseTemplate([(table_foo, foo_mappings), (table, {})], ['ilse', 'albert', 'voltage'], identifier=None)

        storage = DummyStorageBackend()
        serializer = Serializer(storage)
        serializer.serialize(sequence)

        serialized_foo = storage.stored_items['foo']
        serialized_sequence = storage.stored_items['main']

        deserialized_sequence = serializer.deserialize('main')
        storage.stored_items = dict()
        serializer.serialize(deserialized_sequence)

        self.assertEqual(serialized_foo, storage.stored_items['foo'])
        self.assertEqual(serialized_sequence, storage.stored_items['main'])