| from typing import Any, Callable, Mapping |
|
|
| DEFAULT_BOOL = ("BOOLEAN", {"default": False}) |
|
|
|
|
| BOOL_UNARY_OPERATIONS: Mapping[str, Callable[[bool], bool]] = { |
| "Not": lambda a: not a, |
| } |
|
|
| BOOL_BINARY_OPERATIONS: Mapping[str, Callable[[bool, bool], bool]] = { |
| "Nor": lambda a, b: not (a or b), |
| "Xor": lambda a, b: a ^ b, |
| "Nand": lambda a, b: not (a and b), |
| "And": lambda a, b: a and b, |
| "Xnor": lambda a, b: not (a ^ b), |
| "Or": lambda a, b: a or b, |
| "Eq": lambda a, b: a == b, |
| "Neq": lambda a, b: a != b, |
| } |
|
|
|
|
| class BoolUnaryOperation: |
| @classmethod |
| def INPUT_TYPES(cls) -> Mapping[str, Any]: |
| return { |
| "required": {"op": (list(BOOL_UNARY_OPERATIONS.keys()),), "a": DEFAULT_BOOL} |
| } |
|
|
| RETURN_TYPES = ("BOOLEAN",) |
| FUNCTION = "op" |
| CATEGORY = "math/bool" |
|
|
| def op(self, op: str, a: bool) -> tuple[bool]: |
| return (BOOL_UNARY_OPERATIONS[op](a),) |
|
|
|
|
| class BoolBinaryOperation: |
| @classmethod |
| def INPUT_TYPES(cls) -> Mapping[str, Any]: |
| return { |
| "required": { |
| "op": (list(BOOL_BINARY_OPERATIONS.keys()),), |
| "a": DEFAULT_BOOL, |
| "b": DEFAULT_BOOL, |
| } |
| } |
|
|
| RETURN_TYPES = ("BOOLEAN",) |
| FUNCTION = "op" |
| CATEGORY = "math/bool" |
|
|
| def op(self, op: str, a: bool, b: bool) -> tuple[bool]: |
| return (BOOL_BINARY_OPERATIONS[op](a, b),) |
|
|
|
|
| NODE_CLASS_MAPPINGS = { |
| "CM_BoolUnaryOperation": BoolUnaryOperation, |
| "CM_BoolBinaryOperation": BoolBinaryOperation, |
| } |
|
|