Skip to content

Commit 3bc08d6

Browse files
committed
Beginning of work on pickling.
1 parent 34bc09b commit 3bc08d6

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
@@ -761,9 +761,13 @@ def test_C_and_pandas_categorical():
761761
[1, 0]])
762762

763763
def test_pickle_builder_roundtrips():
764+
import numpy as np
765+
# TODO Add center(x) and categorical interaction, and call to np.log to patsy formula.
764766
design_matrix = dmatrix("x + a", {"x": [1, 2, 3],
765767
"a": ["a1", "a2", "a3"]})
768+
# TODO Remove builder, pass design_info to dmatrix() instead.
766769
builder = design_matrix.design_info.builder
770+
del np
767771

768772
new_data = {"x": [10, 20, 30],
769773
"a": ["a3", "a1", "a2"]}
@@ -773,3 +777,5 @@ def test_pickle_builder_roundtrips():
773777
m2 = dmatrix(builder2, new_data)
774778

775779
assert np.allclose(m1, m2)
780+
781+

0 commit comments

Comments
 (0)