From 346fceebb7e91df7d52a422d049444f8407ec6f4 Mon Sep 17 00:00:00 2001
From: Matt Wala <wala1@illinois.edu>
Date: Fri, 17 Feb 2017 17:05:04 -0600
Subject: [PATCH] Apparently, __getstate__() results are coerced to bool in
 Python 2 and __setstate__() doesn't run if the state is False.

Ensure that we always return a non-false state (another version bump
here).
---
 loopy/tools.py    |  7 ++-----
 loopy/version.py  |  2 +-
 test/test_misc.py | 10 +++++++++-
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/loopy/tools.py b/loopy/tools.py
index 524d2cf72..56b673b59 100644
--- a/loopy/tools.py
+++ b/loopy/tools.py
@@ -396,12 +396,9 @@ class LazilyUnpicklingDictionary(collections.MutableMapping):
         return iter(self._map)
 
     def __getstate__(self):
-        return dict(
+        return {"_map": dict(
             (key, _PickledObjectWrapper.from_object(val))
-            for key, val in six.iteritems(self._map))
-
-    def __setstate__(self, state):
-        self._map = state
+            for key, val in six.iteritems(self._map))}
 
 # }}}
 
diff --git a/loopy/version.py b/loopy/version.py
index 35a86a995..2c15cc2da 100644
--- a/loopy/version.py
+++ b/loopy/version.py
@@ -32,4 +32,4 @@ except ImportError:
 else:
     _islpy_version = islpy.version.VERSION_TEXT
 
-DATA_MODEL_VERSION = "v57-islpy%s" % _islpy_version
+DATA_MODEL_VERSION = "v58-islpy%s" % _islpy_version
diff --git a/test/test_misc.py b/test/test_misc.py
index 139c337e1..a22e42463 100644
--- a/test/test_misc.py
+++ b/test/test_misc.py
@@ -97,7 +97,7 @@ class PicklableItem(object):
     flags = {"unpickled": False}
 
     def __getstate__(self):
-        return ()
+        return True
 
     def __setstate__(self, state):
         PicklableItem.flags["unpickled"] = True
@@ -135,6 +135,14 @@ def test_LazilyUnpicklingDictionary():
 
     # }}}
 
+    # {{{ test empty map
+
+    mapping = LazilyUnpicklingDictionary({})
+    mapping = loads(dumps(mapping))
+    assert len(mapping) == 0
+
+    # }}}
+
 
 if __name__ == "__main__":
     if len(sys.argv) > 1:
-- 
GitLab