mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-05-10 09:12:31 +08:00
Merge 1ff7347993 into 7bbf1e8169
This commit is contained in:
commit
648e3c3918
@ -63,7 +63,7 @@ class MathExpressionNode(io.ComfyNode):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def define_schema(cls) -> io.Schema:
|
def define_schema(cls) -> io.Schema:
|
||||||
autogrow = io.Autogrow.TemplateNames(
|
autogrow = io.Autogrow.TemplateNames(
|
||||||
input=io.MultiType.Input("value", [io.Float, io.Int]),
|
input=io.MultiType.Input("value", [io.Float, io.Int, io.Boolean]),
|
||||||
names=list(string.ascii_lowercase),
|
names=list(string.ascii_lowercase),
|
||||||
min=1,
|
min=1,
|
||||||
)
|
)
|
||||||
@ -82,6 +82,7 @@ class MathExpressionNode(io.ComfyNode):
|
|||||||
outputs=[
|
outputs=[
|
||||||
io.Float.Output(display_name="FLOAT"),
|
io.Float.Output(display_name="FLOAT"),
|
||||||
io.Int.Output(display_name="INT"),
|
io.Int.Output(display_name="INT"),
|
||||||
|
io.Boolean.Output(display_name="BOOL"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -97,7 +98,7 @@ class MathExpressionNode(io.ComfyNode):
|
|||||||
|
|
||||||
result = simple_eval(expression, names=context, functions=MATH_FUNCTIONS)
|
result = simple_eval(expression, names=context, functions=MATH_FUNCTIONS)
|
||||||
# bool check must come first because bool is a subclass of int in Python
|
# bool check must come first because bool is a subclass of int in Python
|
||||||
if isinstance(result, bool) or not isinstance(result, (int, float)):
|
if not isinstance(result, (int, float)):
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"Math Expression '{expression}' must evaluate to a numeric result, "
|
f"Math Expression '{expression}' must evaluate to a numeric result, "
|
||||||
f"got {type(result).__name__}: {result!r}"
|
f"got {type(result).__name__}: {result!r}"
|
||||||
@ -106,7 +107,7 @@ class MathExpressionNode(io.ComfyNode):
|
|||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"Math Expression '{expression}' produced a non-finite result: {result}"
|
f"Math Expression '{expression}' produced a non-finite result: {result}"
|
||||||
)
|
)
|
||||||
return io.NodeOutput(float(result), int(result))
|
return io.NodeOutput(float(result), int(result), bool(result))
|
||||||
|
|
||||||
|
|
||||||
class MathExtension(ComfyExtension):
|
class MathExtension(ComfyExtension):
|
||||||
|
|||||||
@ -124,9 +124,11 @@ class TestMathExpressionExecute:
|
|||||||
with pytest.raises(Exception, match="not defined"):
|
with pytest.raises(Exception, match="not defined"):
|
||||||
self._exec("str(a)", a=42)
|
self._exec("str(a)", a=42)
|
||||||
|
|
||||||
def test_boolean_result_raises(self):
|
def test_boolean_result(self):
|
||||||
with pytest.raises(ValueError, match="got bool"):
|
result = self._exec("a > b", a=5, b=3)
|
||||||
self._exec("a > b", a=5, b=3)
|
assert result[2] is True
|
||||||
|
result = self._exec("a > b", a=3, b=5)
|
||||||
|
assert result[2] is False
|
||||||
|
|
||||||
def test_empty_expression_raises(self):
|
def test_empty_expression_raises(self):
|
||||||
with pytest.raises(ValueError, match="Expression cannot be empty"):
|
with pytest.raises(ValueError, match="Expression cannot be empty"):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user