Skip to content

Commit b07f179

Browse files
committed
Beginning of work on pickling.
1 parent 4d428a2 commit b07f179

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

patsy/eval.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,20 @@ def eval(self, memorize_state, data):
565565
memorize_state,
566566
data)
567567

568-
__getstate__ = no_pickling
568+
def __getstate__(self):
569+
return (0, self.name, self.origin)
570+
571+
def __setstate__(self, state):
572+
# TODO What do we do about self.code?
573+
(version, code, origin) = state
574+
assert version == 0
575+
# TODO Give better error message when version is too recent, etc.
576+
# Should use a single function from somewhere
577+
#
578+
self.code = code
579+
580+
def test_EvalFactor_pickle_saves_origin():
581+
assert False
569582

570583
def test_EvalFactor_basics():
571584
e = EvalFactor("a+b")
@@ -577,8 +590,6 @@ def test_EvalFactor_basics():
577590
assert e.origin is None
578591
assert e2.origin == "asdf"
579592

580-
assert_no_pickling(e)
581-
582593
def test_EvalFactor_memorize_passes_needed():
583594
from patsy.state import stateful_transform
584595
foo = stateful_transform(lambda: "FOO-OBJ")

patsy/test_highlevel.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,9 +746,13 @@ def test_C_and_pandas_categorical():
746746
[1, 0]])
747747

748748
def test_pickle_builder_roundtrips():
749+
import numpy as np
750+
# TODO Add center(x) and categorical interaction, and call to np.log to patsy formula.
749751
design_matrix = dmatrix("x + a", {"x": [1, 2, 3],
750752
"a": ["a1", "a2", "a3"]})
753+
# TODO Remove builder, pass design_info to dmatrix() instead.
751754
builder = design_matrix.design_info.builder
755+
del np
752756

753757
new_data = {"x": [10, 20, 30],
754758
"a": ["a3", "a1", "a2"]}
@@ -758,3 +762,5 @@ def test_pickle_builder_roundtrips():
758762
m2 = dmatrix(builder2, new_data)
759763

760764
assert np.allclose(m1, m2)
765+
766+

0 commit comments

Comments
 (0)