| | import re |
| | import torch |
| |
|
| | class TestIntConditions: |
| | def __init__(self): |
| | pass |
| |
|
| | @classmethod |
| | 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 |
| |
|
| | @classmethod |
| | 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 |
| |
|
| | @classmethod |
| | 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 |
| |
|
| | @classmethod |
| | 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: |
| | |
| | result = True |
| |
|
| | if invert: |
| | result = not result |
| |
|
| | return (result,) |
| |
|
| | class TestBoolOperationNode: |
| | def __init__(self): |
| | pass |
| |
|
| | @classmethod |
| | 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", |
| | } |
| |
|