forked from MeeeyoAI/ComfyUI_StringOps
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmeyo_node_Computational.py
More file actions
140 lines (122 loc) · 4.44 KB
/
meyo_node_Computational.py
File metadata and controls
140 lines (122 loc) · 4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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(input_float, range, any=None): 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(float_value, operation, any=None): 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(range_rule, mode, prefix_suffix, any=None): 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(range_str, any=None): 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")