Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
True,
[[1, 1], [1, 2], [1, 3]], ["Intercept", "x_in_env"])
t("~ x_in_env", {"x_in_env": [10, 20, 30]}, 0,
True,
[[1, 10], [1, 20], [1, 30]], ["Intercept", "x_in_env"])
# Trying to pull x_in_env out of our *caller* shouldn't work.
t_invalid("~ x_in_env", {}, 1, exc=(NameError, PatsyError))
# But then again it should, if called from one down on the stack:
def check_nested_call():
x_in_env = "asdf"
t("~ x_in_env", {}, 1,
True,
[[1, 1], [1, 2], [1, 3]], ["Intercept", "x_in_env"])
check_nested_call()
# passing in an explicit EvalEnvironment also works:
e = EvalEnvironment.capture(1)
t_invalid("~ x_in_env", {}, e, exc=(NameError, PatsyError))
e = EvalEnvironment.capture(0)
def check_nested_call_2():
x_in_env = "asdf"
t("~ x_in_env", {}, e,
True,
[[1, 1], [1, 2], [1, 3]], ["Intercept", "x_in_env"])
check_nested_call_2()
def _c(): # pragma: no cover
_c = 1
return [EvalEnvironment.capture(),
EvalEnvironment.capture(0),
EvalEnvironment.capture(1),
EvalEnvironment.capture(0, reference=1),
EvalEnvironment.capture(2),
EvalEnvironment.capture(0, 2),
]
def _c(): # pragma: no cover
_c = 1
return [EvalEnvironment.capture(),
EvalEnvironment.capture(0),
EvalEnvironment.capture(1),
EvalEnvironment.capture(0, reference=1),
EvalEnvironment.capture(2),
EvalEnvironment.capture(0, 2),
]
Regardless of the input, the return type is always either:
* A :class:`DesignMatrix`, if ``return_type="matrix"`` (the default)
* A :class:`pandas.DataFrame`, if ``return_type="dataframe"``.
The actual contents of the design matrix is identical in both cases, and
in both cases a :class:`DesignInfo` object will be available in a
``.design_info`` attribute on the return value. However, for
``return_type="dataframe"``, any pandas indexes on the input (either in
`data` or directly passed through `formula_like`) will be preserved, which
may be useful for e.g. time-series models.
.. versionadded:: 0.2.0
The ``NA_action`` argument.
"""
eval_env = EvalEnvironment.capture(eval_env, reference=1)
(lhs, rhs) = _do_highlevel_design(formula_like, data, eval_env,
NA_action, return_type)
if lhs.shape[1] != 0:
raise PatsyError("encountered outcome variables for a model "
"that does not expect them")
return rhs
"call_capture_0": lambda: EvalEnvironment.capture(0),
"call_capture_1": lambda: EvalEnvironment.capture(1),
def test_EvalEnvironment_eval_namespace():
env = EvalEnvironment([{"a": 1}])
assert env.eval("2 * a") == 2
assert env.eval("2 * a", inner_namespace={"a": 2}) == 4
from nose.tools import assert_raises
assert_raises(NameError, env.eval, "2 * b")
a = 3
env2 = EvalEnvironment.capture(0)
assert env2.eval("2 * a") == 6
env3 = env.with_outer_namespace({"a": 10, "b": 3})
assert env3.eval("2 * a") == 2
assert env3.eval("2 * b") == 6
def test_EvalEnvironment_eq():
# Two environments are eq only if they refer to exactly the same
# global/local dicts
env1 = EvalEnvironment.capture(0)
env2 = EvalEnvironment.capture(0)
assert env1 == env2
assert hash(env1) == hash(env2)
capture_local_env = lambda: EvalEnvironment.capture(0)
env3 = capture_local_env()
env4 = capture_local_env()
assert env3 != env4
def _c(): # pragma: no cover
_c = 1
return [EvalEnvironment.capture(),
EvalEnvironment.capture(0),
EvalEnvironment.capture(1),
EvalEnvironment.capture(0, reference=1),
EvalEnvironment.capture(2),
EvalEnvironment.capture(0, 2),
]
assert c0.namespace["_c"] == 1
assert c.namespace["_c"] == 1
assert b1.namespace["_b"] == 1
assert b2.namespace["_b"] == 1
assert a1.namespace["_a"] == 1
assert a2.namespace["_a"] == 1
assert b1.namespace["_c"] is _c
assert b2.namespace["_c"] is _c
from nose.tools import assert_raises
assert_raises(ValueError, EvalEnvironment.capture, 10 ** 6)
assert EvalEnvironment.capture(b1) is b1
assert_raises(TypeError, EvalEnvironment.capture, 1.2)
assert_no_pickling(EvalEnvironment.capture())