Skip to content

Commit 793d7a9

Browse files
committed
Make eval_env argument in design_matrix_builders() mandatory.
1 parent bf628ce commit 793d7a9

File tree

3 files changed

+28
-20
lines changed

3 files changed

+28
-20
lines changed

patsy/build.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ def _make_term_column_builders(terms,
614614
term_to_column_builders[term] = column_builders
615615
return new_term_order, term_to_column_builders
616616

617-
def design_matrix_builders(termlists, data_iter_maker, eval_env=0, NA_action="drop"):
617+
def design_matrix_builders(termlists, data_iter_maker, eval_env, NA_action="drop"):
618618
"""Construct several :class:`DesignMatrixBuilders` from termlists.
619619
620620
This is one of Patsy's fundamental functions. This function and

patsy/test_build.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def make_matrix(data, expected_rank, entries, column_names=None):
6363
termlist = make_termlist(*entries)
6464
def iter_maker():
6565
yield data
66-
builders = design_matrix_builders([termlist], iter_maker)
66+
builders = design_matrix_builders([termlist], iter_maker, eval_env=0)
6767
matrices = build_design_matrices(builders, data)
6868
matrix = matrices[0]
6969
assert (builders[0].design_info.term_slices
@@ -232,7 +232,7 @@ def test_build_design_matrices_dtype():
232232
data = {"x": [1, 2, 3]}
233233
def iter_maker():
234234
yield data
235-
builder = design_matrix_builders([make_termlist("x")], iter_maker)[0]
235+
builder = design_matrix_builders([make_termlist("x")], iter_maker, 0)[0]
236236

237237
mat = build_design_matrices([builder], data)[0]
238238
assert mat.dtype == np.dtype(np.float64)
@@ -248,7 +248,7 @@ def test_return_type():
248248
data = {"x": [1, 2, 3]}
249249
def iter_maker():
250250
yield data
251-
builder = design_matrix_builders([make_termlist("x")], iter_maker)[0]
251+
builder = design_matrix_builders([make_termlist("x")], iter_maker, 0)[0]
252252

253253
# Check explicitly passing return_type="matrix" works
254254
mat = build_design_matrices([builder], data, return_type="matrix")[0]
@@ -263,7 +263,7 @@ def test_NA_action():
263263
initial_data = {"x": [1, 2, 3], "c": ["c1", "c2", "c1"]}
264264
def iter_maker():
265265
yield initial_data
266-
builder = design_matrix_builders([make_termlist("x", "c")], iter_maker)[0]
266+
builder = design_matrix_builders([make_termlist("x", "c")], iter_maker, 0)[0]
267267

268268
# By default drops rows containing either NaN or None
269269
mat = build_design_matrices([builder],
@@ -310,7 +310,7 @@ def test_NA_drop_preserves_levels():
310310
data = {"x": [1.0, np.nan, 3.0], "c": ["c1", "c2", "c3"]}
311311
def iter_maker():
312312
yield data
313-
builder = design_matrix_builders([make_termlist("x", "c")], iter_maker)[0]
313+
builder = design_matrix_builders([make_termlist("x", "c")], iter_maker, 0)[0]
314314

315315
assert builder.design_info.column_names == ["c[c1]", "c[c2]", "c[c3]", "x"]
316316

@@ -330,14 +330,17 @@ def test_return_type_pandas():
330330
index=[10, 20, 30])
331331
def iter_maker():
332332
yield data
333-
int_builder, = design_matrix_builders([make_termlist([])], iter_maker)
333+
int_builder, = design_matrix_builders([make_termlist([])], iter_maker, 0)
334334
(y_builder, x_builder) = design_matrix_builders([make_termlist("y"),
335335
make_termlist("x")],
336-
iter_maker)
336+
iter_maker,
337+
eval_env=0)
337338
(x_a_builder,) = design_matrix_builders([make_termlist("x", "a")],
338-
iter_maker)
339+
iter_maker,
340+
eval_env=0)
339341
(x_y_builder,) = design_matrix_builders([make_termlist("x", "y")],
340-
iter_maker)
342+
iter_maker,
343+
eval_env=0)
341344
# Index compatibility is always checked for pandas input, regardless of
342345
# whether we're producing pandas output
343346
assert_raises(PatsyError,
@@ -471,7 +474,7 @@ def iter_maker():
471474
yield {"x": data1}
472475
yield {"x": data2}
473476
try:
474-
builders = design_matrix_builders([termlist], iter_maker)
477+
builders = design_matrix_builders([termlist], iter_maker, 0)
475478
build_design_matrices(builders, {"x": data1})
476479
build_design_matrices(builders, {"x": data2})
477480
except PatsyError:
@@ -481,7 +484,7 @@ def iter_maker():
481484
def t_setup_predict(data1, data2):
482485
def iter_maker():
483486
yield {"x": data1}
484-
builders = design_matrix_builders([termlist], iter_maker)
487+
builders = design_matrix_builders([termlist], iter_maker, 0)
485488
assert_raises(PatsyError,
486489
build_design_matrices, builders, {"x": data2})
487490
for (a, b) in test_cases_twoway:
@@ -510,11 +513,12 @@ def iter_maker():
510513
# - the index argument is not given
511514
# - the data is not a DataFrame
512515
# - there are no other matrices
513-
null_builder = design_matrix_builders([make_termlist()], iter_maker)[0]
516+
null_builder = design_matrix_builders([make_termlist()], iter_maker, 0)[0]
514517
assert_raises(PatsyError, build_design_matrices, [null_builder], data)
515518

516519
intercept_builder = design_matrix_builders([make_termlist([])],
517-
iter_maker)[0]
520+
iter_maker,
521+
eval_env=0)[0]
518522
assert_raises(PatsyError, build_design_matrices, [intercept_builder], data)
519523

520524
assert_raises(PatsyError,
@@ -534,13 +538,15 @@ def iter_maker():
534538
x_termlist = make_termlist(["x"])
535539

536540
builders = design_matrix_builders([x_termlist, make_termlist()],
537-
iter_maker)
541+
iter_maker,
542+
eval_env=0)
538543
x_m, null_m = build_design_matrices(builders, data)
539544
assert np.allclose(x_m, [[1], [2], [3]])
540545
assert null_m.shape == (3, 0)
541546

542547
builders = design_matrix_builders([x_termlist, make_termlist([])],
543-
iter_maker)
548+
iter_maker,
549+
eval_env=0)
544550
x_m, null_m = build_design_matrices(builders, data)
545551
x_m, intercept_m = build_design_matrices(builders, data)
546552
assert np.allclose(x_m, [[1], [2], [3]])
@@ -552,7 +558,7 @@ def iter_maker():
552558
yield data
553559
t1 = make_termlist(["x"])
554560
t2 = make_termlist(["x", "a"])
555-
builders = design_matrix_builders([t1, t2], iter_maker)
561+
builders = design_matrix_builders([t1, t2], iter_maker, eval_env=0)
556562
m1, m2 = build_design_matrices(builders, data)
557563
check_design_matrix(m1, 1, t1, column_names=["x"])
558564
assert np.allclose(m1, [[1], [2], [3]])
@@ -576,7 +582,8 @@ def t(data1, data2):
576582
def iter_maker():
577583
yield data1
578584
builders = design_matrix_builders([make_termlist(["a"])],
579-
iter_maker)
585+
iter_maker,
586+
eval_env=0)
580587
build_design_matrices(builders, data2)
581588
for data1 in datas:
582589
for data2 in datas:
@@ -672,7 +679,7 @@ def test_DesignMatrixBuilder_subset():
672679
all_terms = make_termlist("x", "y", "z")
673680
def iter_maker():
674681
yield all_data
675-
all_builder = design_matrix_builders([all_terms], iter_maker)[0]
682+
all_builder = design_matrix_builders([all_terms], iter_maker, 0)[0]
676683
full_matrix = build_design_matrices([all_builder], all_data)[0]
677684

678685
def t(which_terms, variables, columns):

patsy/test_highlevel.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,8 @@ def __patsy_get_model_desc__(self, data):
279279
[Term([]), Term([LookupFactor("x")])],
280280
)
281281
builders = design_matrix_builders(termlists,
282-
lambda: iter([{"x": [1, 2, 3]}]))
282+
lambda: iter([{"x": [1, 2, 3]}]),
283+
eval_env=0)
283284
# twople but with no LHS
284285
t((builders[0], builders[2]), {"x": [10, 20, 30]}, 0,
285286
True,

0 commit comments

Comments
 (0)