diff --git a/formulae/environment.py b/formulae/environment.py index f229465..4111d19 100644 --- a/formulae/environment.py +++ b/formulae/environment.py @@ -2,6 +2,7 @@ # For more info see: https://github.com/pydata/patsy/blob/master/patsy/eval.py import inspect import numbers +import dill class VarLookupDict: @@ -75,6 +76,9 @@ def capture(cls, env=0, reference=0): finally: del frame + def __deepcopy__(self, memo): + return dill.copy(self) + def _namespace_ids(self): return [id(n) for n in self._namespaces] diff --git a/formulae/tests/test_environment.py b/formulae/tests/test_environment.py index 61b53ba..5480728 100644 --- a/formulae/tests/test_environment.py +++ b/formulae/tests/test_environment.py @@ -1,5 +1,6 @@ import pytest from formulae.environment import VarLookupDict, Environment +from copy import deepcopy def test_varlookup_get(): @@ -85,3 +86,10 @@ def test_evalenv_equality(): env_outer = Environment.capture(1) assert env != env_outer + + +def test_evalenv_deepcopy(): + a = 1 + env = Environment.capture() + clone_env = deepcopy(env) + assert clone_env.namespace["a"] == a diff --git a/requirements.txt b/requirements.txt index 93c263f..a9172bd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ numpy>=1.16 pandas>=1.0.0 scipy>=1.5.4 +dill>=0.3.4 \ No newline at end of file diff --git a/setup.py b/setup.py index 1150d43..970409b 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ def get_requirements(): def get_version(): with open(VERSION_FILE, encoding="utf-8") as buff: - exec(buff.read()) # pylint: disable=exec-used + exec(buff.read()) # pylint: disable=exec-used return vars()["__version__"]