Source code for ewoksfluo.tests.test_expression
from typing import Tuple, Any
import h5py
from ..math.expression import eval_expression
from ..math.expression import expression_variables
from ..tasks.math import eval_hdf5_expression
[docs]
def test_eval_expression():
expression = "np.mean([1,a,3,b])"
variables = {"a": 2, "b": 4}
eval_expression(expression, variables) == 2.5
[docs]
def test_expression_variables():
data = {"name A": 1, "name B": 2}
def get_data(name: str) -> Tuple[str, Any]:
return name, data[name]
expression, variables, name_map = expression_variables(
"<name A> * <name B>", get_data
)
assert expression == "data0 * data1"
assert variables == {"data0": 1, "data1": 2}
assert name_map == {"data0": "name A", "data1": "name B"}
[docs]
def test_expression_variables_nondefault_brackets():
data = {"name A": 1, "name B": 2}
def get_data(name: str) -> Tuple[str, Any]:
return name, data[name]
expression, variables, name_map = expression_variables(
"{name A} * {name B}", get_data, start_var="{", end_var="}"
)
assert expression == "data0 * data1"
assert variables == {"data0": 1, "data1": 2}
assert name_map == {"data0": "name A", "data1": "name B"}
[docs]
def test_eval_hdf5_expression(tmp_path):
filename = str(tmp_path / "data.h5")
with h5py.File(filename, mode="w") as f:
f["group/a"] = 2
f["b"] = 4
expression = "np.mean([1,<group/a>,3,<b>])"
eval_hdf5_expression(filename, expression) == 2.5
filename = str(tmp_path / "data.h5")
with h5py.File(filename, mode="w") as f:
f["root/group/a"] = 2
f["root/b"] = 4
expression = "np.mean([1,<group/a>,3,<b>])"
eval_hdf5_expression(filename + "::/root", expression) == 2.5