diff --git a/loopy/kernel/__init__.py b/loopy/kernel/__init__.py index e5305b703a4f03adcc886b03dece75c9273c4ca2..dccaca2ec104a4749289f7cd89c491292f618e3d 100644 --- a/loopy/kernel/__init__.py +++ b/loopy/kernel/__init__.py @@ -1400,17 +1400,35 @@ class LoopKernel(ImmutableRecordWithoutPickling): result.pop("cache_manager", None) - return result + # make sure that kernels are pickled with a cached hash key in place + from loopy.tools import LoopyKeyBuilder + LoopyKeyBuilder()(self) + + return (result, self._pytools_persistent_hash_digest) def __setstate__(self, state): + attribs, p_hash_digest = state + new_fields = set() - for k, v in six.iteritems(state): + for k, v in six.iteritems(attribs): setattr(self, k, v) new_fields.add(k) self.register_fields(new_fields) + if 0: + # {{{ check that 'reconstituted' object has same hash + + from loopy.tools import LoopyKeyBuilder + LoopyKeyBuilder()(self) + + assert p_hash_digest == self._pytools_persistent_hash_digest + + # }}} + else: + self._pytools_persistent_hash_digest = p_hash_digest + from loopy.kernel.tools import SetOperationCacheManager self.cache_manager = SetOperationCacheManager() self._kernel_executor_cache = {} diff --git a/loopy/version.py b/loopy/version.py index 4c6dfbcc22c0ea38668c663eb858161471a3999a..8516ce006bde8b8616172a72a766ec86dfcd44f1 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 = "v62-islpy%s" % _islpy_version +DATA_MODEL_VERSION = "v63-islpy%s" % _islpy_version