From 85fcff131ae4c9b07bc7ad8ca63e9a63d8a766a0 Mon Sep 17 00:00:00 2001
From: Theo Steininger <theos@mpa-garching.mpg.de>
Date: Mon, 6 Mar 2017 03:07:27 +0100
Subject: [PATCH] Fixed bugs serialization. Increased version number to 3.0.4

---
 nifty/field.py                   | 12 ++++++++++--
 nifty/field_types/field_array.py |  8 +++-----
 nifty/version.py                 |  2 +-
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/nifty/field.py b/nifty/field.py
index a6b02f394..3e33e44fd 100644
--- a/nifty/field.py
+++ b/nifty/field.py
@@ -836,7 +836,10 @@ class Field(Loggable, Versionable, object):
         hdf5_group.attrs['domain_axes'] = str(self.domain_axes)
         hdf5_group['num_domain'] = len(self.domain)
 
-        ret_dict = {'val': self.val}
+        if self._val is None:
+            ret_dict = {}
+        else:
+            ret_dict = {'val': self.val}
 
         for i in range(len(self.domain)):
             ret_dict['s_' + str(i)] = self.domain[i]
@@ -856,7 +859,12 @@ class Field(Loggable, Versionable, object):
         new_field.domain = tuple(temp_domain)
 
         exec('new_field.domain_axes = ' + hdf5_group.attrs['domain_axes'])
-        new_field._val = repository.get('val', hdf5_group)
+
+        try:
+            new_field._val = repository.get('val', hdf5_group)
+        except(KeyError):
+            new_field._val = None
+
         new_field.dtype = np.dtype(hdf5_group.attrs['dtype'])
         new_field.distribution_strategy =\
             hdf5_group.attrs['distribution_strategy']
diff --git a/nifty/field_types/field_array.py b/nifty/field_types/field_array.py
index 3f937ac17..3afb04ec3 100644
--- a/nifty/field_types/field_array.py
+++ b/nifty/field_types/field_array.py
@@ -1,7 +1,5 @@
 # -*- coding: utf-8 -*-
 
-import pickle
-
 import numpy as np
 
 from field_type import FieldType
@@ -29,14 +27,14 @@ class FieldArray(FieldType):
 
     def _to_hdf5(self, hdf5_group):
         hdf5_group['shape'] = self.shape
-        hdf5_group['dtype'] = pickle.dumps(self.dtype)
+        hdf5_group.attrs['dtype'] = self.dtype.name
 
         return None
 
     @classmethod
     def _from_hdf5(cls, hdf5_group, loopback_get):
         result = cls(
-            hdf5_group['shape'][:],
-            pickle.loads(hdf5_group['dtype'][()])
+            shape=hdf5_group['shape'][:],
+            dtype=np.dtype(hdf5_group.attrs['dtype'])
             )
         return result
diff --git a/nifty/version.py b/nifty/version.py
index 04b23a243..7cba59a61 100644
--- a/nifty/version.py
+++ b/nifty/version.py
@@ -4,4 +4,4 @@
 # 1) we don't load dependencies by storing it in __init__.py
 # 2) we can import it in setup.py for the same reason
 # 3) we can import it into your module module
-__version__ = '3.0.3'
+__version__ = '3.0.4'
-- 
GitLab