Added float math

This commit is contained in:
dunkeroni 2023-09-05 21:27:08 -04:00 committed by psychedelicious
parent e9f5814c6d
commit 005087a652

View File

@ -1,21 +1,32 @@
# Copyright (c) 2023 Kyle Schouviller (https://github.com/kyle0654) # Copyright (c) 2023 Kyle Schouviller (https://github.com/kyle0654)
import numpy as np import numpy as np
from typing import Literal
from invokeai.app.invocations.primitives import IntegerOutput from invokeai.app.invocations.primitives import IntegerOutput, FloatOutput
from .baseinvocation import BaseInvocation, FieldDescriptions, InputField, InvocationContext, invocation from .baseinvocation import BaseInvocation, FieldDescriptions, InputField, InvocationContext, invocation
@invocation("add", title="Add Integers", tags=["math", "add"], category="math", version="1.0.0") @invocation("add", title="Add Integers", tags=["math", "add"], category="math", version="1.0.0")
class AddInvocation(BaseInvocation): class AddInvocation(BaseInvocation):
"""Adds two numbers""" """Adds two integer numbers"""
a: int = InputField(default=0, description=FieldDescriptions.num_1) a: int = InputField(default=0, description=FieldDescriptions.num_1)
b: int = InputField(default=0, description=FieldDescriptions.num_2) b: int = InputField(default=0, description=FieldDescriptions.num_2)
def invoke(self, context: InvocationContext) -> IntegerOutput: def invoke(self, context: InvocationContext) -> IntegerOutput:
return IntegerOutput(value=self.a + self.b) return IntegerOutput(value=self.a + self.b)
@invocation("add_float", title="Add Floats", tags=["math", "add", "float"], category="math", version="1.0.0")
class AddFloatInvocation(BaseInvocation):
"""Adds two float numbers"""
a: float = InputField(default=0, description=FieldDescriptions.num_1)
b: float = InputField(default=0, description=FieldDescriptions.num_2)
def invoke(self, context: InvocationContext) -> FloatOutput:
return FloatOutput(value=self.a + self.b)
@invocation("sub", title="Subtract Integers", tags=["math", "subtract"], category="math", version="1.0.0") @invocation("sub", title="Subtract Integers", tags=["math", "subtract"], category="math", version="1.0.0")
@ -27,6 +38,16 @@ class SubtractInvocation(BaseInvocation):
def invoke(self, context: InvocationContext) -> IntegerOutput: def invoke(self, context: InvocationContext) -> IntegerOutput:
return IntegerOutput(value=self.a - self.b) return IntegerOutput(value=self.a - self.b)
@invocation("sub_float", title="Subtract Floats", tags=["math", "subtract", "float"], category="math", version="1.0.0")
class SubtractFloatInvocation(BaseInvocation):
"""Subtracts two float numbers"""
a: float = InputField(default=0, description=FieldDescriptions.num_1)
b: float = InputField(default=0, description=FieldDescriptions.num_2)
def invoke(self, context: InvocationContext) -> FloatOutput:
return FloatOutput(value=self.a - self.b)
@invocation("mul", title="Multiply Integers", tags=["math", "multiply"], category="math", version="1.0.0") @invocation("mul", title="Multiply Integers", tags=["math", "multiply"], category="math", version="1.0.0")
@ -39,6 +60,16 @@ class MultiplyInvocation(BaseInvocation):
def invoke(self, context: InvocationContext) -> IntegerOutput: def invoke(self, context: InvocationContext) -> IntegerOutput:
return IntegerOutput(value=self.a * self.b) return IntegerOutput(value=self.a * self.b)
@invocation("mul_float", title="Multiply Floats", tags=["math", "multiply", "float"], category="math", version="1.0.0")
class MultiplyFloatInvocation(BaseInvocation):
"""Multiplies two float numbers"""
a: float = InputField(default=0, description=FieldDescriptions.num_1)
b: float = InputField(default=0, description=FieldDescriptions.num_2)
def invoke(self, context: InvocationContext) -> FloatOutput:
return FloatOutput(value=self.a * self.b)
@invocation("div", title="Divide Integers", tags=["math", "divide"], category="math", version="1.0.0") @invocation("div", title="Divide Integers", tags=["math", "divide"], category="math", version="1.0.0")
class DivideInvocation(BaseInvocation): class DivideInvocation(BaseInvocation):
@ -50,6 +81,16 @@ class DivideInvocation(BaseInvocation):
def invoke(self, context: InvocationContext) -> IntegerOutput: def invoke(self, context: InvocationContext) -> IntegerOutput:
return IntegerOutput(value=int(self.a / self.b)) return IntegerOutput(value=int(self.a / self.b))
@invocation("div_float", title="Divide Floats", tags=["math", "divide", "float"], category="math", version="1.0.0")
class DivideFloatInvocation(BaseInvocation):
"""Divides two float numbers"""
a: float = InputField(default=0, description=FieldDescriptions.num_1)
b: float = InputField(default=0, description=FieldDescriptions.num_2)
def invoke(self, context: InvocationContext) -> FloatOutput:
return FloatOutput(value=self.a / self.b)
@invocation("rand_int", title="Random Integer", tags=["math", "random"], category="math", version="1.0.0") @invocation("rand_int", title="Random Integer", tags=["math", "random"], category="math", version="1.0.0")
class RandomIntInvocation(BaseInvocation): class RandomIntInvocation(BaseInvocation):
@ -60,3 +101,49 @@ class RandomIntInvocation(BaseInvocation):
def invoke(self, context: InvocationContext) -> IntegerOutput: def invoke(self, context: InvocationContext) -> IntegerOutput:
return IntegerOutput(value=np.random.randint(self.low, self.high)) return IntegerOutput(value=np.random.randint(self.low, self.high))
@invocation("float_to_int", title="Float to Integer", tags=["math", "convert"], category="math", version="1.0.0")
class FloatToIntInvocation(BaseInvocation):
"""Converts a float to an integer."""
value: float = InputField(default=0, description="The float value")
method: Literal["Floor", "Ceiling"] = InputField(default="round", description="The method to use for conversion")
def invoke(self, context: InvocationContext) -> IntegerOutput:
if self.method == "Floor":
return IntegerOutput(value=np.floor(self.value))
else:
return IntegerOutput(value=np.ceil(self.value))
@invocation("round", title="Round Float", tags=["math", "round"], category="math", version="1.0.0")
class RoundInvocation(BaseInvocation):
"""Rounds a float to a specified number of decimal places."""
value: float = InputField(default=0, description="The float value")
decimals: int = InputField(default=0, description="The number of decimal places")
def invoke(self, context: InvocationContext) -> FloatOutput:
return FloatOutput(value=round(self.value, self.decimals))
@invocation("abs", title="Absolute Value", tags=["math", "abs"], category="math", version="1.0.0")
class AbsoluteValueInvocation(BaseInvocation):
"""Returns the absolute value of a number."""
value: float = InputField(default=0, description="The float value")
def invoke(self, context: InvocationContext) -> FloatOutput:
return FloatOutput(value=abs(self.value))
@invocation("mod", title="Modulus", tags=["math", "modulus"], category="math", version="1.0.0")
class ModulusInvocation(BaseInvocation):
"""Returns the modulus of two numbers."""
a: int = InputField(default=0, description=FieldDescriptions.num_1)
b: int = InputField(default=0, description=FieldDescriptions.num_2)
def invoke(self, context: InvocationContext) -> IntegerOutput:
return IntegerOutput(value=self.a % self.b)