diff --git a/pyproject.toml b/pyproject.toml index 816611e..b14fac6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ requires-python = ">=3.9" dependencies = [ "numpy", "cffi", + "setuptools", "scipy" ] [project.urls] diff --git a/setup.py b/setup.py index 24ab5f0..709bff4 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ url="https://xsuite.readthedocs.io/", python_requires=">=3.7", setup_requires=[], - install_requires=["numpy", "cffi", "scipy"], + install_requires=["numpy", "cffi", "setuptools", "scipy"], packages=["xobjects"], license="Apache 2.0", download_url="https://pypi.python.org/pypi/xobjects", diff --git a/tests/test_kernel.py b/tests/test_kernel.py index 5f6cebd..5f76dd9 100644 --- a/tests/test_kernel.py +++ b/tests/test_kernel.py @@ -4,6 +4,7 @@ # ########################################### # import cffi +import pickle import pytest import sysconfig from pathlib import Path @@ -14,7 +15,8 @@ from xobjects.test_helpers import for_all_test_contexts, requires_context -def test_kernel_cpu(): +@pytest.mark.parametrize('pickle_context', [False, True]) +def test_kernel_cpu(pickle_context): ctx = xo.ContextCpu() src_code = r""" double my_mul(const int n, const double* x1, @@ -45,6 +47,13 @@ def test_kernel_cpu(): assert y == 285.0 + if pickle_context: + restored = pickle.loads(pickle.dumps(ctx)) + assert not restored.kernels + assert ctx.kernels.my_mul(n=len(a1), x1=a1, x2=a2) == 285.0 + restored.add_kernels(sources=[src_code], kernels=kernel_descriptions) + assert restored.kernels.my_mul(n=len(a1), x1=a1, x2=a2) == 285.0 + @for_all_test_contexts def test_kernel_pointer_none_maps_to_null(test_context): diff --git a/xobjects/_version.py b/xobjects/_version.py index a5f830a..bc8c296 100644 --- a/xobjects/_version.py +++ b/xobjects/_version.py @@ -1 +1 @@ -__version__ = "0.7.1" +__version__ = "0.7.2" diff --git a/xobjects/context_cpu.py b/xobjects/context_cpu.py index fd67bc4..26184dd 100644 --- a/xobjects/context_cpu.py +++ b/xobjects/context_cpu.py @@ -96,6 +96,7 @@ def kernel_compilation_help_message(): from .context import ( Kernel, + KernelDict, ModuleNotAvailable, SourceType, XBuffer, @@ -821,6 +822,7 @@ def __getstate__(self): def __setstate__(self, state): self.__dict__.update(state) + self._kernels = KernelDict(self._kernels) self._buffers = weakref.WeakSet()