# Source code for chainer.serializer

import abc

import six

[docs]class AbstractSerializer(object):

"""Abstract base class of all serializers and deserializers."""

@abc.abstractmethod
[docs]    def __getitem__(self, key):
"""Gets a child serializer.

This operator creates a _child_ serializer represented by the given
key.

Args:
key (str): Name of the child serializer.

"""
raise NotImplementedError

@abc.abstractmethod
[docs]    def __call__(self, key, value):
"""Serializes or deserializes a value by given name.

This operator saves or loads a value by given name.

If this is a serializer, then the value is simply saved at the key.
Note that some type information might be missed depending on the
implementation (and the target file format).

If this is a deserializer, then the value is loaded by the key. The
deserialization differently works on scalars and arrays. For scalars,
the value argument is used just for determining the type of
restored value to be converted, and the converted value is returned.
For arrays, the restored elements are directly copied into the
value argument. String values are treated like scalars. If the
value argument is None, the type of the restored value will
typically be a numpy array but can depend on the particular subclass
implementation.

Args:
key (str): Name of the serialization entry.
value (scalar, array, None, or str): Object to be (de)serialized.
None is only supported by deserializers.

Returns:
Serialized or deserialized value.

"""
raise NotImplementedError

[docs]class Serializer(AbstractSerializer):

"""Base class of all serializers."""

[docs]    def save(self, obj):
"""Saves an object by this serializer.

This is equivalent to obj.serialize(self).

Args:
obj: Target object to be serialized.

"""
obj.serialize(self)

[docs]class Deserializer(AbstractSerializer):

"""Base class of all deserializers."""

This is equivalent to obj.serialize(self).