Files
CavinHuang-comfyui-nodes-docs/docs/Number Input Condition.md
2024-05-26 20:35:16 +08:00

5.8 KiB

Documentation

方法 number_input_condition 旨在基于一组输入参数评估数值条件。它执行逻辑运算和比较以确定结果,该结果可以是布尔值或数值类型,具体取决于指定的返回类型。此节点功能多样,可以处理各种数学和逻辑运算,适用于广泛的数值分析任务。

Input types

Required

  • number_a
    • 用于比较操作的第一个数字。它在确定所评估的逻辑条件的结果中起着关键作用。
    • Comfy dtype: NUMBER
    • Python dtype: Union[int, float]
  • number_b
    • 参与比较的第二个数字。它对于节点执行的逻辑运算至关重要。
    • Comfy dtype: NUMBER
    • Python dtype: Union[int, float]

Optional

  • return_boolean
    • 确定方法是否应根据比较结果返回布尔值(真或假)或数值类型。
    • Comfy dtype: COMBO['false', 'true']
    • Python dtype: str
  • comparison
    • 指定要对两个数字执行的逻辑比较或操作的类型。
    • Comfy dtype: COMBO['and', 'or', 'greater-than', 'greater-than or equals', 'less-than', 'less-than or equals', 'equals', 'does not equal', 'divisible by', 'if A odd', 'if A even', 'if A prime', 'factor of']
    • Python dtype: str

Output types

  • result
    • 逻辑条件评估的结果,根据 'return_boolean' 参数,可以是数值或布尔值。
    • Comfy dtype: COMBO['NUMBER', 'FLOAT', 'INT']
    • Python dtype: Union[int, float, bool]

Usage tips

  • Infra type: CPU

Source code

class WAS_Number_Input_Condition:

    def __init__(self):
        pass

    @classmethod
    def INPUT_TYPES(cls):
        return {'required': {'number_a': ('NUMBER',), 'number_b': ('NUMBER',), 'return_boolean': (['false', 'true'],), 'comparison': (['and', 'or', 'greater-than', 'greater-than or equals', 'less-than', 'less-than or equals', 'equals', 'does not equal', 'divisible by', 'if A odd', 'if A even', 'if A prime', 'factor of'],)}}
    RETURN_TYPES = ('NUMBER', 'FLOAT', 'INT')
    FUNCTION = 'number_input_condition'
    CATEGORY = 'WAS Suite/Logic'

    def number_input_condition(self, number_a, number_b, return_boolean='false', comparison='greater-than'):
        if comparison:
            if return_boolean == 'true':
                if comparison == 'and':
                    result = 1 if number_a != 0 and number_b != 0 else 0
                elif comparison == 'or':
                    result = 1 if number_a != 0 or number_b != 0 else 0
                elif comparison == 'greater-than':
                    result = 1 if number_a > number_b else 0
                elif comparison == 'greater-than or equals':
                    result = 1 if number_a >= number_b else 0
                elif comparison == 'less-than':
                    result = 1 if number_a < number_b else 0
                elif comparison == 'less-than or equals':
                    result = 1 if number_a <= number_b else 0
                elif comparison == 'equals':
                    result = 1 if number_a == number_b else 0
                elif comparison == 'does not equal':
                    result = 1 if number_a != number_b else 0
                elif comparison == 'divisible by':
                    result = 1 if number_b % number_a == 0 else 0
                elif comparison == 'if A odd':
                    result = 1 if number_a % 2 != 0 else 0
                elif comparison == 'if A even':
                    result = 1 if number_a % 2 == 0 else 0
                elif comparison == 'if A prime':
                    result = 1 if self.is_prime(number_a) else 0
                elif comparison == 'factor of':
                    result = 1 if number_b % number_a == 0 else 0
                else:
                    result = 0
            elif comparison == 'and':
                result = number_a if number_a != 0 and number_b != 0 else number_b
            elif comparison == 'or':
                result = number_a if number_a != 0 or number_b != 0 else number_b
            elif comparison == 'greater-than':
                result = number_a if number_a > number_b else number_b
            elif comparison == 'greater-than or equals':
                result = number_a if number_a >= number_b else number_b
            elif comparison == 'less-than':
                result = number_a if number_a < number_b else number_b
            elif comparison == 'less-than or equals':
                result = number_a if number_a <= number_b else number_b
            elif comparison == 'equals':
                result = number_a if number_a == number_b else number_b
            elif comparison == 'does not equal':
                result = number_a if number_a != number_b else number_b
            elif comparison == 'divisible by':
                result = number_a if number_b % number_a == 0 else number_b
            elif comparison == 'if A odd':
                result = number_a if number_a % 2 != 0 else number_b
            elif comparison == 'if A even':
                result = number_a if number_a % 2 == 0 else number_b
            elif comparison == 'if A prime':
                result = number_a if self.is_prime(number_a) else number_b
            elif comparison == 'factor of':
                result = number_a if number_b % number_a == 0 else number_b
            else:
                result = number_a
        return (result, float(result), int(result))

    def is_prime(self, n):
        if n <= 1:
            return False
        elif n <= 3:
            return True
        elif n % 2 == 0 or n % 3 == 0:
            return False
        i = 5
        while i * i <= n:
            if n % i == 0 or n % (i + 2) == 0:
                return False
            i += 6
        return True