Spaces:
Running
on
L40S
Running
on
L40S
import re | |
import torch | |
class TestIntConditions: | |
def __init__(self): | |
pass | |
def INPUT_TYPES(cls): | |
return { | |
"required": { | |
"a": ("INT", {"default": 0, "min": -0xffffffffffffffff, "max": 0xffffffffffffffff, "step": 1}), | |
"b": ("INT", {"default": 0, "min": -0xffffffffffffffff, "max": 0xffffffffffffffff, "step": 1}), | |
"operation": (["==", "!=", "<", ">", "<=", ">="],), | |
}, | |
} | |
RETURN_TYPES = ("BOOLEAN",) | |
FUNCTION = "int_condition" | |
CATEGORY = "Testing/Logic" | |
def int_condition(self, a, b, operation): | |
if operation == "==": | |
return (a == b,) | |
elif operation == "!=": | |
return (a != b,) | |
elif operation == "<": | |
return (a < b,) | |
elif operation == ">": | |
return (a > b,) | |
elif operation == "<=": | |
return (a <= b,) | |
elif operation == ">=": | |
return (a >= b,) | |
class TestFloatConditions: | |
def __init__(self): | |
pass | |
def INPUT_TYPES(cls): | |
return { | |
"required": { | |
"a": ("FLOAT", {"default": 0, "min": -999999999999.0, "max": 999999999999.0, "step": 1}), | |
"b": ("FLOAT", {"default": 0, "min": -999999999999.0, "max": 999999999999.0, "step": 1}), | |
"operation": (["==", "!=", "<", ">", "<=", ">="],), | |
}, | |
} | |
RETURN_TYPES = ("BOOLEAN",) | |
FUNCTION = "float_condition" | |
CATEGORY = "Testing/Logic" | |
def float_condition(self, a, b, operation): | |
if operation == "==": | |
return (a == b,) | |
elif operation == "!=": | |
return (a != b,) | |
elif operation == "<": | |
return (a < b,) | |
elif operation == ">": | |
return (a > b,) | |
elif operation == "<=": | |
return (a <= b,) | |
elif operation == ">=": | |
return (a >= b,) | |
class TestStringConditions: | |
def __init__(self): | |
pass | |
def INPUT_TYPES(cls): | |
return { | |
"required": { | |
"a": ("STRING", {"multiline": False}), | |
"b": ("STRING", {"multiline": False}), | |
"operation": (["a == b", "a != b", "a IN b", "a MATCH REGEX(b)", "a BEGINSWITH b", "a ENDSWITH b"],), | |
"case_sensitive": ("BOOLEAN", {"default": True}), | |
}, | |
} | |
RETURN_TYPES = ("BOOLEAN",) | |
FUNCTION = "string_condition" | |
CATEGORY = "Testing/Logic" | |
def string_condition(self, a, b, operation, case_sensitive): | |
if not case_sensitive: | |
a = a.lower() | |
b = b.lower() | |
if operation == "a == b": | |
return (a == b,) | |
elif operation == "a != b": | |
return (a != b,) | |
elif operation == "a IN b": | |
return (a in b,) | |
elif operation == "a MATCH REGEX(b)": | |
try: | |
return (re.match(b, a) is not None,) | |
except: | |
return (False,) | |
elif operation == "a BEGINSWITH b": | |
return (a.startswith(b),) | |
elif operation == "a ENDSWITH b": | |
return (a.endswith(b),) | |
class TestToBoolNode: | |
def __init__(self): | |
pass | |
def INPUT_TYPES(cls): | |
return { | |
"required": { | |
"value": ("*",), | |
}, | |
"optional": { | |
"invert": ("BOOLEAN", {"default": False}), | |
}, | |
} | |
RETURN_TYPES = ("BOOLEAN",) | |
FUNCTION = "to_bool" | |
CATEGORY = "Testing/Logic" | |
def to_bool(self, value, invert = False): | |
if isinstance(value, torch.Tensor): | |
if value.max().item() == 0 and value.min().item() == 0: | |
result = False | |
else: | |
result = True | |
else: | |
try: | |
result = bool(value) | |
except: | |
# Can't convert it? Well then it's something or other. I dunno, I'm not a Python programmer. | |
result = True | |
if invert: | |
result = not result | |
return (result,) | |
class TestBoolOperationNode: | |
def __init__(self): | |
pass | |
def INPUT_TYPES(cls): | |
return { | |
"required": { | |
"a": ("BOOLEAN",), | |
"b": ("BOOLEAN",), | |
"op": (["a AND b", "a OR b", "a XOR b", "NOT a"],), | |
}, | |
} | |
RETURN_TYPES = ("BOOLEAN",) | |
FUNCTION = "bool_operation" | |
CATEGORY = "Testing/Logic" | |
def bool_operation(self, a, b, op): | |
if op == "a AND b": | |
return (a and b,) | |
elif op == "a OR b": | |
return (a or b,) | |
elif op == "a XOR b": | |
return (a ^ b,) | |
elif op == "NOT a": | |
return (not a,) | |
CONDITION_NODE_CLASS_MAPPINGS = { | |
"TestIntConditions": TestIntConditions, | |
"TestFloatConditions": TestFloatConditions, | |
"TestStringConditions": TestStringConditions, | |
"TestToBoolNode": TestToBoolNode, | |
"TestBoolOperationNode": TestBoolOperationNode, | |
} | |
CONDITION_NODE_DISPLAY_NAME_MAPPINGS = { | |
"TestIntConditions": "Int Condition", | |
"TestFloatConditions": "Float Condition", | |
"TestStringConditions": "String Condition", | |
"TestToBoolNode": "To Bool", | |
"TestBoolOperationNode": "Bool Operation", | |
} | |