Files
MeeeyoAI-ComfyUI_StringOps/meyo_node_Computational.py
2025-04-30 21:15:44 +08:00

141 lines
4.5 KiB
Python

import math, random, torch
import numpy as np
from . import any_typ, note
#======比较数值
class CompareInt:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"input_float": ("FLOAT", {"default": 4.0}),
"range": ("STRING", {"default": "3.5-5.5"}),
},
"optional": {"any": (any_typ,)}
}
RETURN_TYPES = ("STRING",)
FUNCTION = "compare_float_to_range"
CATEGORY = "Meeeyo/Number"
DESCRIPTION = note
def IS_CHANGED(): return float("NaN")
def compare_float_to_range(self, input_float, range, any=None):
try:
if '-' in range:
lower_bound, upper_bound = map(float, range.split('-'))
else:
lower_bound = upper_bound = float(range)
if input_float < lower_bound:
return ("小",)
elif input_float > upper_bound:
return ("大",)
else:
return ("中",)
except ValueError:
return ("Error: Invalid input format.",)
#======规范数值
class FloatToInteger:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"float_value": ("FLOAT", {"default": 3.14}),
"operation": (["四舍五入", "取大值", "取小值", "最近32倍"], {"default": "四舍五入"}),
},
"optional": {"any": (any_typ,)}
}
RETURN_TYPES = ("INT",)
FUNCTION = "convert_float_to_integer"
CATEGORY = "Meeeyo/Number"
DESCRIPTION = note
def IS_CHANGED(): return float("NaN")
def convert_float_to_integer(self, float_value, operation, any=None):
if operation == "四舍五入":
result = round(float_value)
elif operation == "取大值":
result = math.ceil(float_value)
elif operation == "取小值":
result = math.floor(float_value)
elif operation == "最近32倍":
result = round(float_value / 32) * 32
return (result,)
#======生成范围数组
class GenerateNumbers:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"range_rule": ("STRING", {"default": "3|1-10"}),
"mode": (["顺序", "随机"], {"default": "顺序"}),
"prefix_suffix": ("STRING", {"default": "|"}),
},
"optional": {"any": (any_typ,)}
}
RETURN_TYPES = ("STRING",)
FUNCTION = "generate_numbers"
CATEGORY = "Meeeyo/Number"
DESCRIPTION = note
def IS_CHANGED(): return float("NaN")
def generate_numbers(self, range_rule, mode, prefix_suffix, any=None):
try:
start_str, range_str = range_rule.split('|')
start = int(start_str)
end_range = list(map(int, range_str.split('-')))
if len(end_range) == 1:
end = end_range[0]
numbers = [str(i).zfill(start) for i in range(1, end + 1)]
else:
start_range, end = end_range
numbers = [str(i).zfill(start) for i in range(start_range, end + 1)]
if prefix_suffix.strip():
prefix, suffix = prefix_suffix.split('|')
else:
prefix, suffix = "", ""
if mode == "随机":
random.shuffle(numbers)
numbers = [f"{prefix}{num}{suffix}" for num in numbers]
result = '\n'.join(numbers)
return (result,)
except ValueError:
return ("",)
#======范围内随机数
class GetRandomIntegerInRange:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"range_str": ("STRING", {"default": "0-10"}),
},
"optional": {"any": (any_typ,)}
}
RETURN_TYPES = ("INT", "STRING")
FUNCTION = "get_random_integer_in_range"
CATEGORY = "Meeeyo/Number"
DESCRIPTION = note
def IS_CHANGED(): return float("NaN")
def get_random_integer_in_range(self, range_str, any=None):
try:
start, end = map(int, range_str.split('-'))
if start > end:
start, end = end, start
random_int = random.randint(start, end)
return (random_int, str(random_int))
except ValueError:
return (0, "0")