5.8 KiB
5.8 KiB
Documentation
- Class name: WAS_Number_Input_Condition
- Category: WAS Suite/Logic
- Output node: False
- Repo Ref: https://github.com/WASasquatch/was-node-suite-comfyui
方法 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