diff --git a/src/more_math/NoiseMathNode.py b/src/more_math/NoiseMathNode.py new file mode 100644 index 0000000..b49d21b --- /dev/null +++ b/src/more_math/NoiseMathNode.py @@ -0,0 +1,146 @@ +from inspect import cleandoc +from math import e + +from antlr4 import CommonTokenStream, InputStream +import torch + +from .Parser.MathExprParser import MathExprParser +from .Parser.MathExprLexer import MathExprLexer +from .Parser.TensorEvalVisitor import TensorEvalVisitor + +class NoiseMathNode: + """ + This node enables the use of math expressions on Latents. + INPUTS: + a, b, c, d: + Noise generators, bound to variables with the same name. Defaults to zero latent if not provided. + w, x, y, z: + Floats, bound to variables of the expression. Defaults to 0.0 if not provided. + Latent expression: + String, describing expression to mix latents. Valid functions are sin, cos, tan, abs, sqrt, min, max, norm. Valid operators are +, -, *, /, ^, %. Usable constants are e and pi. + + OUTPUTS: + LATENT: + Returns a LATENT object that contains the result of the math expression applied to the input conditionings. + """ + def __init__(self): + va= None + vb= None + vc= None + vd= None + vw= 0.0 + vx= 0.0 + vy= 0.0 + vz= 0.0 + expr=""; + @classmethod + def INPUT_TYPES(s): + """ + """ + return { + "required": { + "a": ("NOISE", { + + }), + + "Noise": ("STRING", { + "multiline": False, #True if you want the field to look like the one on the ClipTextEncode node + "default": "a*(1-w)+b*w", + "description": "Describes inital noise. Valid functions are sin, cos, tan, asin, acos, atan, atan2, sinh, cosh, tanh, asinh, acosh, atanh, abs, sqrt, ln, log, exp, pow, min, max, norm, floor, ceil, round, gamma. Valid operators are +, -, *, /, %, ^,!˛&,|. Usable constants are e and pi." + + }), + }, + "optional": { + "b": ("NOISE", { + "default": 0, + }), + "c": ("NOISE", { + "default": 0, + }), + "d": ("NOISE", { + "default": 0, + }), + "w": ("FLOAT", { + "default": 0, + "forceInput":True + }), + "x": ("FLOAT", { + "default": 0, + "forceInput":True + }), + "y": ("FLOAT", { + "default": 0, + "forceInput":True + }), + "z": ("FLOAT", { + "default": 0, + "forceInput":True + }), + + + # "int_field": ("INT", {"default": 0, "min": 0, "max": 100, "step": 1}), + # "float_field": ("FLOAT", {"default": 0.5, "min": -10.0, "max": 10.0, "step": 0.001}), + } + } + + RETURN_TYPES = ("NOISE",) + #RETURN_NAMES = ("image_output_name",) + DESCRIPTION = cleandoc(__doc__) + FUNCTION = "noiMathNode" + seed = 0 + #OUTPUT_NODE = False + #OUTPUT_TOOLTIPS = ("",) # Tooltips for the output node + + CATEGORY = "More math" + + def noiMathNode(self, Noise, a, b=None, c=None, d=None, w=0.0, x=0.0, y=0.0, z=0.0): + self.va = a + self.vb = b + self.vc = c + self.vd = d + self.vw = w + self.vx = x + self.vy = y + self.vz = z + self.expr = Noise + return (self,) + + """ + The node will always be re executed if any of the inputs change but + this method can be used to force the node to execute again even when the inputs don't change. + You can make this node return a number or a string. This value will be compared to the one returned the last time the node was + executed, if it is different the node will be executed again. + This method is used in the core repo for the LoadImage node where they return the image hash as a string, if the image hash + changes between executions the LoadImage node is executed again. + """ + #@classmethod + #def IS_CHANGED(s, image, string_field, int_field, float_field, print_to_screen): + # return "" + + + def generate_noise(self, input_latent:torch.Tensor) -> torch.Tensor: + print(input_latent) + if self.vb is None: + self.vb = torch.zeros_like(input_latent["samples"]) + else: + self.vb = self.vb.generate_noise(input_latent) + if self.vc is None: + self.vc = torch.zeros_like(input_latent["samples"]) + else: + self.vc = self.vc.generate_noise(input_latent) + if self.vd is None: + self.vd = torch.zeros_like(input_latent["samples"]) + else: + self.vd = self.vd.generate_noise(input_latent) + variables = {'a': self.va.generate_noise(input_latent), 'b': self.vb, 'c': self.vc, 'd': self.vd, 'w': self.vw, 'x': self.vx, 'y': self.vy, 'z': self.vz} + input_stream = InputStream(self.expr) + lexer = MathExprLexer(input_stream) + stream = CommonTokenStream(lexer) + parser = MathExprParser(stream) + tree = parser.expr() + print("Tensor\n"+tree.toStringTree(recog=parser)) + visitor = TensorEvalVisitor(variables,variables['a'].shape) + result = visitor.visit(tree) + print("Result1:", result) + print("Result:", result) + return result diff --git a/src/more_math/Parser/FloatEvalVisitor.py b/src/more_math/Parser/FloatEvalVisitor.py index 8c19af4..e3b8429 100644 --- a/src/more_math/Parser/FloatEvalVisitor.py +++ b/src/more_math/Parser/FloatEvalVisitor.py @@ -114,10 +114,10 @@ class FloatEvalVisitor(MathExprVisitor): return math.atan2(self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) # N-argument functions - def visitMinFunc(self, ctx): + def visitSMinFunc(self, ctx): args = [self.visit(e) for e in ctx.expr()] return math.min(args) - def visitMaxFunc(self, ctx): + def visitSMaxFunc(self, ctx): args = [self.visit(e) for e in ctx.expr()] return math.max(args) diff --git a/src/more_math/Parser/MathExpr.g4 b/src/more_math/Parser/MathExpr.g4 index 6ae4cf2..997a0c0 100644 --- a/src/more_math/Parser/MathExpr.g4 +++ b/src/more_math/Parser/MathExpr.g4 @@ -75,14 +75,17 @@ func1 func2 : POWE '(' expr ',' expr ')' # PowFunc | ATAN2 '(' expr ',' expr ')' # Atan2Func + | TMIN '(' expr ',' expr ')' # TMinFunc + | TMAX '(' expr ',' expr ')' # TMaxFunc ; func3 : CLAMP '(' expr ',' expr ',' expr ')' # ClampFunc ; // N-argument functions (at least 2 arguments) funcN - : MIN '(' expr (',' expr)+ ')' # MinFunc - | MAX '(' expr (',' expr)+ ')' # MaxFunc + : SMIN '(' expr (',' expr)+ ')' # SMinFunc + | SMAX '(' expr (',' expr)+ ')' # SMaxFunc + ; // LEXER RULES @@ -105,8 +108,10 @@ SQRT : 'sqrt'; LN : 'ln'; LOG : 'log'; EXP : 'exp'; -MIN : 'min'; -MAX : 'max'; +SMIN : 'smin'; +SMAX : 'smax'; +TMIN : 'tmin'; +TMAX : 'tmax'; TNORM : 'tnorm'; SNORM : 'snorm'; FLOOR : 'floor'; diff --git a/src/more_math/Parser/MathExpr.interp b/src/more_math/Parser/MathExpr.interp index ca84a0d..01b40e0 100644 --- a/src/more_math/Parser/MathExpr.interp +++ b/src/more_math/Parser/MathExpr.interp @@ -21,8 +21,10 @@ null 'ln' 'log' 'exp' -'min' -'max' +'smin' +'smax' +'tmin' +'tmax' 'tnorm' 'snorm' 'floor' @@ -66,8 +68,10 @@ SQRT LN LOG EXP -MIN -MAX +SMIN +SMAX +TMIN +TMAX TNORM SNORM FLOOR @@ -102,4 +106,4 @@ funcN atn: -[4, 1, 42, 254, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 1, 0, 1, 0, 3, 0, 23, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 34, 8, 1, 10, 1, 12, 1, 37, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 51, 8, 2, 10, 2, 12, 2, 54, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 61, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 68, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 81, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 203, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 219, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 4, 9, 235, 8, 9, 11, 9, 12, 9, 236, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 4, 9, 246, 8, 9, 11, 9, 12, 9, 247, 1, 9, 1, 9, 3, 9, 252, 8, 9, 1, 9, 0, 2, 2, 4, 10, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 0, 286, 0, 22, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 38, 1, 0, 0, 0, 6, 60, 1, 0, 0, 0, 8, 67, 1, 0, 0, 0, 10, 80, 1, 0, 0, 0, 12, 202, 1, 0, 0, 0, 14, 218, 1, 0, 0, 0, 16, 220, 1, 0, 0, 0, 18, 251, 1, 0, 0, 0, 20, 23, 3, 10, 5, 0, 21, 23, 3, 2, 1, 0, 22, 20, 1, 0, 0, 0, 22, 21, 1, 0, 0, 0, 23, 1, 1, 0, 0, 0, 24, 25, 6, 1, -1, 0, 25, 26, 3, 4, 2, 0, 26, 35, 1, 0, 0, 0, 27, 28, 10, 3, 0, 0, 28, 29, 5, 33, 0, 0, 29, 34, 3, 4, 2, 0, 30, 31, 10, 2, 0, 0, 31, 32, 5, 34, 0, 0, 32, 34, 3, 4, 2, 0, 33, 27, 1, 0, 0, 0, 33, 30, 1, 0, 0, 0, 34, 37, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 36, 1, 0, 0, 0, 36, 3, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 38, 39, 6, 2, -1, 0, 39, 40, 3, 6, 3, 0, 40, 52, 1, 0, 0, 0, 41, 42, 10, 4, 0, 0, 42, 43, 5, 35, 0, 0, 43, 51, 3, 6, 3, 0, 44, 45, 10, 3, 0, 0, 45, 46, 5, 36, 0, 0, 46, 51, 3, 6, 3, 0, 47, 48, 10, 2, 0, 0, 48, 49, 5, 37, 0, 0, 49, 51, 3, 6, 3, 0, 50, 41, 1, 0, 0, 0, 50, 44, 1, 0, 0, 0, 50, 47, 1, 0, 0, 0, 51, 54, 1, 0, 0, 0, 52, 50, 1, 0, 0, 0, 52, 53, 1, 0, 0, 0, 53, 5, 1, 0, 0, 0, 54, 52, 1, 0, 0, 0, 55, 56, 3, 8, 4, 0, 56, 57, 5, 38, 0, 0, 57, 58, 3, 6, 3, 0, 58, 61, 1, 0, 0, 0, 59, 61, 3, 8, 4, 0, 60, 55, 1, 0, 0, 0, 60, 59, 1, 0, 0, 0, 61, 7, 1, 0, 0, 0, 62, 63, 5, 33, 0, 0, 63, 68, 3, 8, 4, 0, 64, 65, 5, 34, 0, 0, 65, 68, 3, 8, 4, 0, 66, 68, 3, 10, 5, 0, 67, 62, 1, 0, 0, 0, 67, 64, 1, 0, 0, 0, 67, 66, 1, 0, 0, 0, 68, 9, 1, 0, 0, 0, 69, 81, 3, 12, 6, 0, 70, 81, 3, 14, 7, 0, 71, 81, 3, 16, 8, 0, 72, 81, 3, 18, 9, 0, 73, 81, 5, 41, 0, 0, 74, 81, 5, 40, 0, 0, 75, 81, 5, 39, 0, 0, 76, 77, 5, 1, 0, 0, 77, 78, 3, 0, 0, 0, 78, 79, 5, 2, 0, 0, 79, 81, 1, 0, 0, 0, 80, 69, 1, 0, 0, 0, 80, 70, 1, 0, 0, 0, 80, 71, 1, 0, 0, 0, 80, 72, 1, 0, 0, 0, 80, 73, 1, 0, 0, 0, 80, 74, 1, 0, 0, 0, 80, 75, 1, 0, 0, 0, 80, 76, 1, 0, 0, 0, 81, 11, 1, 0, 0, 0, 82, 83, 5, 4, 0, 0, 83, 84, 5, 1, 0, 0, 84, 85, 3, 0, 0, 0, 85, 86, 5, 2, 0, 0, 86, 203, 1, 0, 0, 0, 87, 88, 5, 5, 0, 0, 88, 89, 5, 1, 0, 0, 89, 90, 3, 0, 0, 0, 90, 91, 5, 2, 0, 0, 91, 203, 1, 0, 0, 0, 92, 93, 5, 6, 0, 0, 93, 94, 5, 1, 0, 0, 94, 95, 3, 0, 0, 0, 95, 96, 5, 2, 0, 0, 96, 203, 1, 0, 0, 0, 97, 98, 5, 7, 0, 0, 98, 99, 5, 1, 0, 0, 99, 100, 3, 0, 0, 0, 100, 101, 5, 2, 0, 0, 101, 203, 1, 0, 0, 0, 102, 103, 5, 8, 0, 0, 103, 104, 5, 1, 0, 0, 104, 105, 3, 0, 0, 0, 105, 106, 5, 2, 0, 0, 106, 203, 1, 0, 0, 0, 107, 108, 5, 9, 0, 0, 108, 109, 5, 1, 0, 0, 109, 110, 3, 0, 0, 0, 110, 111, 5, 2, 0, 0, 111, 203, 1, 0, 0, 0, 112, 113, 5, 11, 0, 0, 113, 114, 5, 1, 0, 0, 114, 115, 3, 0, 0, 0, 115, 116, 5, 2, 0, 0, 116, 203, 1, 0, 0, 0, 117, 118, 5, 12, 0, 0, 118, 119, 5, 1, 0, 0, 119, 120, 3, 0, 0, 0, 120, 121, 5, 2, 0, 0, 121, 203, 1, 0, 0, 0, 122, 123, 5, 13, 0, 0, 123, 124, 5, 1, 0, 0, 124, 125, 3, 0, 0, 0, 125, 126, 5, 2, 0, 0, 126, 203, 1, 0, 0, 0, 127, 128, 5, 14, 0, 0, 128, 129, 5, 1, 0, 0, 129, 130, 3, 0, 0, 0, 130, 131, 5, 2, 0, 0, 131, 203, 1, 0, 0, 0, 132, 133, 5, 15, 0, 0, 133, 134, 5, 1, 0, 0, 134, 135, 3, 0, 0, 0, 135, 136, 5, 2, 0, 0, 136, 203, 1, 0, 0, 0, 137, 138, 5, 16, 0, 0, 138, 139, 5, 1, 0, 0, 139, 140, 3, 0, 0, 0, 140, 141, 5, 2, 0, 0, 141, 203, 1, 0, 0, 0, 142, 143, 5, 17, 0, 0, 143, 144, 5, 1, 0, 0, 144, 145, 3, 0, 0, 0, 145, 146, 5, 2, 0, 0, 146, 203, 1, 0, 0, 0, 147, 148, 5, 18, 0, 0, 148, 149, 5, 1, 0, 0, 149, 150, 3, 0, 0, 0, 150, 151, 5, 2, 0, 0, 151, 203, 1, 0, 0, 0, 152, 153, 5, 19, 0, 0, 153, 154, 5, 1, 0, 0, 154, 155, 3, 0, 0, 0, 155, 156, 5, 2, 0, 0, 156, 203, 1, 0, 0, 0, 157, 158, 5, 20, 0, 0, 158, 159, 5, 1, 0, 0, 159, 160, 3, 0, 0, 0, 160, 161, 5, 2, 0, 0, 161, 203, 1, 0, 0, 0, 162, 163, 5, 21, 0, 0, 163, 164, 5, 1, 0, 0, 164, 165, 3, 0, 0, 0, 165, 166, 5, 2, 0, 0, 166, 203, 1, 0, 0, 0, 167, 168, 5, 24, 0, 0, 168, 169, 5, 1, 0, 0, 169, 170, 3, 0, 0, 0, 170, 171, 5, 2, 0, 0, 171, 203, 1, 0, 0, 0, 172, 173, 5, 25, 0, 0, 173, 174, 5, 1, 0, 0, 174, 175, 3, 0, 0, 0, 175, 176, 5, 2, 0, 0, 176, 203, 1, 0, 0, 0, 177, 178, 5, 26, 0, 0, 178, 179, 5, 1, 0, 0, 179, 180, 3, 0, 0, 0, 180, 181, 5, 2, 0, 0, 181, 203, 1, 0, 0, 0, 182, 183, 5, 27, 0, 0, 183, 184, 5, 1, 0, 0, 184, 185, 3, 0, 0, 0, 185, 186, 5, 2, 0, 0, 186, 203, 1, 0, 0, 0, 187, 188, 5, 28, 0, 0, 188, 189, 5, 1, 0, 0, 189, 190, 3, 0, 0, 0, 190, 191, 5, 2, 0, 0, 191, 203, 1, 0, 0, 0, 192, 193, 5, 29, 0, 0, 193, 194, 5, 1, 0, 0, 194, 195, 3, 0, 0, 0, 195, 196, 5, 2, 0, 0, 196, 203, 1, 0, 0, 0, 197, 198, 5, 31, 0, 0, 198, 199, 5, 1, 0, 0, 199, 200, 3, 0, 0, 0, 200, 201, 5, 2, 0, 0, 201, 203, 1, 0, 0, 0, 202, 82, 1, 0, 0, 0, 202, 87, 1, 0, 0, 0, 202, 92, 1, 0, 0, 0, 202, 97, 1, 0, 0, 0, 202, 102, 1, 0, 0, 0, 202, 107, 1, 0, 0, 0, 202, 112, 1, 0, 0, 0, 202, 117, 1, 0, 0, 0, 202, 122, 1, 0, 0, 0, 202, 127, 1, 0, 0, 0, 202, 132, 1, 0, 0, 0, 202, 137, 1, 0, 0, 0, 202, 142, 1, 0, 0, 0, 202, 147, 1, 0, 0, 0, 202, 152, 1, 0, 0, 0, 202, 157, 1, 0, 0, 0, 202, 162, 1, 0, 0, 0, 202, 167, 1, 0, 0, 0, 202, 172, 1, 0, 0, 0, 202, 177, 1, 0, 0, 0, 202, 182, 1, 0, 0, 0, 202, 187, 1, 0, 0, 0, 202, 192, 1, 0, 0, 0, 202, 197, 1, 0, 0, 0, 203, 13, 1, 0, 0, 0, 204, 205, 5, 30, 0, 0, 205, 206, 5, 1, 0, 0, 206, 207, 3, 0, 0, 0, 207, 208, 5, 3, 0, 0, 208, 209, 3, 0, 0, 0, 209, 210, 5, 2, 0, 0, 210, 219, 1, 0, 0, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 1, 0, 0, 213, 214, 3, 0, 0, 0, 214, 215, 5, 3, 0, 0, 215, 216, 3, 0, 0, 0, 216, 217, 5, 2, 0, 0, 217, 219, 1, 0, 0, 0, 218, 204, 1, 0, 0, 0, 218, 211, 1, 0, 0, 0, 219, 15, 1, 0, 0, 0, 220, 221, 5, 32, 0, 0, 221, 222, 5, 1, 0, 0, 222, 223, 3, 0, 0, 0, 223, 224, 5, 3, 0, 0, 224, 225, 3, 0, 0, 0, 225, 226, 5, 3, 0, 0, 226, 227, 3, 0, 0, 0, 227, 228, 5, 2, 0, 0, 228, 17, 1, 0, 0, 0, 229, 230, 5, 22, 0, 0, 230, 231, 5, 1, 0, 0, 231, 234, 3, 0, 0, 0, 232, 233, 5, 3, 0, 0, 233, 235, 3, 0, 0, 0, 234, 232, 1, 0, 0, 0, 235, 236, 1, 0, 0, 0, 236, 234, 1, 0, 0, 0, 236, 237, 1, 0, 0, 0, 237, 238, 1, 0, 0, 0, 238, 239, 5, 2, 0, 0, 239, 252, 1, 0, 0, 0, 240, 241, 5, 23, 0, 0, 241, 242, 5, 1, 0, 0, 242, 245, 3, 0, 0, 0, 243, 244, 5, 3, 0, 0, 244, 246, 3, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 245, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 250, 5, 2, 0, 0, 250, 252, 1, 0, 0, 0, 251, 229, 1, 0, 0, 0, 251, 240, 1, 0, 0, 0, 252, 19, 1, 0, 0, 0, 13, 22, 33, 35, 50, 52, 60, 67, 80, 202, 218, 236, 247, 251] \ No newline at end of file +[4, 1, 44, 268, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 1, 0, 1, 0, 3, 0, 23, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 34, 8, 1, 10, 1, 12, 1, 37, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 5, 2, 51, 8, 2, 10, 2, 12, 2, 54, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 61, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 68, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 81, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 203, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 233, 8, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 4, 9, 249, 8, 9, 11, 9, 12, 9, 250, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 4, 9, 260, 8, 9, 11, 9, 12, 9, 261, 1, 9, 1, 9, 3, 9, 266, 8, 9, 1, 9, 0, 2, 2, 4, 10, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 0, 0, 302, 0, 22, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 38, 1, 0, 0, 0, 6, 60, 1, 0, 0, 0, 8, 67, 1, 0, 0, 0, 10, 80, 1, 0, 0, 0, 12, 202, 1, 0, 0, 0, 14, 232, 1, 0, 0, 0, 16, 234, 1, 0, 0, 0, 18, 265, 1, 0, 0, 0, 20, 23, 3, 10, 5, 0, 21, 23, 3, 2, 1, 0, 22, 20, 1, 0, 0, 0, 22, 21, 1, 0, 0, 0, 23, 1, 1, 0, 0, 0, 24, 25, 6, 1, -1, 0, 25, 26, 3, 4, 2, 0, 26, 35, 1, 0, 0, 0, 27, 28, 10, 3, 0, 0, 28, 29, 5, 35, 0, 0, 29, 34, 3, 4, 2, 0, 30, 31, 10, 2, 0, 0, 31, 32, 5, 36, 0, 0, 32, 34, 3, 4, 2, 0, 33, 27, 1, 0, 0, 0, 33, 30, 1, 0, 0, 0, 34, 37, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 36, 1, 0, 0, 0, 36, 3, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 38, 39, 6, 2, -1, 0, 39, 40, 3, 6, 3, 0, 40, 52, 1, 0, 0, 0, 41, 42, 10, 4, 0, 0, 42, 43, 5, 37, 0, 0, 43, 51, 3, 6, 3, 0, 44, 45, 10, 3, 0, 0, 45, 46, 5, 38, 0, 0, 46, 51, 3, 6, 3, 0, 47, 48, 10, 2, 0, 0, 48, 49, 5, 39, 0, 0, 49, 51, 3, 6, 3, 0, 50, 41, 1, 0, 0, 0, 50, 44, 1, 0, 0, 0, 50, 47, 1, 0, 0, 0, 51, 54, 1, 0, 0, 0, 52, 50, 1, 0, 0, 0, 52, 53, 1, 0, 0, 0, 53, 5, 1, 0, 0, 0, 54, 52, 1, 0, 0, 0, 55, 56, 3, 8, 4, 0, 56, 57, 5, 40, 0, 0, 57, 58, 3, 6, 3, 0, 58, 61, 1, 0, 0, 0, 59, 61, 3, 8, 4, 0, 60, 55, 1, 0, 0, 0, 60, 59, 1, 0, 0, 0, 61, 7, 1, 0, 0, 0, 62, 63, 5, 35, 0, 0, 63, 68, 3, 8, 4, 0, 64, 65, 5, 36, 0, 0, 65, 68, 3, 8, 4, 0, 66, 68, 3, 10, 5, 0, 67, 62, 1, 0, 0, 0, 67, 64, 1, 0, 0, 0, 67, 66, 1, 0, 0, 0, 68, 9, 1, 0, 0, 0, 69, 81, 3, 12, 6, 0, 70, 81, 3, 14, 7, 0, 71, 81, 3, 16, 8, 0, 72, 81, 3, 18, 9, 0, 73, 81, 5, 43, 0, 0, 74, 81, 5, 42, 0, 0, 75, 81, 5, 41, 0, 0, 76, 77, 5, 1, 0, 0, 77, 78, 3, 0, 0, 0, 78, 79, 5, 2, 0, 0, 79, 81, 1, 0, 0, 0, 80, 69, 1, 0, 0, 0, 80, 70, 1, 0, 0, 0, 80, 71, 1, 0, 0, 0, 80, 72, 1, 0, 0, 0, 80, 73, 1, 0, 0, 0, 80, 74, 1, 0, 0, 0, 80, 75, 1, 0, 0, 0, 80, 76, 1, 0, 0, 0, 81, 11, 1, 0, 0, 0, 82, 83, 5, 4, 0, 0, 83, 84, 5, 1, 0, 0, 84, 85, 3, 0, 0, 0, 85, 86, 5, 2, 0, 0, 86, 203, 1, 0, 0, 0, 87, 88, 5, 5, 0, 0, 88, 89, 5, 1, 0, 0, 89, 90, 3, 0, 0, 0, 90, 91, 5, 2, 0, 0, 91, 203, 1, 0, 0, 0, 92, 93, 5, 6, 0, 0, 93, 94, 5, 1, 0, 0, 94, 95, 3, 0, 0, 0, 95, 96, 5, 2, 0, 0, 96, 203, 1, 0, 0, 0, 97, 98, 5, 7, 0, 0, 98, 99, 5, 1, 0, 0, 99, 100, 3, 0, 0, 0, 100, 101, 5, 2, 0, 0, 101, 203, 1, 0, 0, 0, 102, 103, 5, 8, 0, 0, 103, 104, 5, 1, 0, 0, 104, 105, 3, 0, 0, 0, 105, 106, 5, 2, 0, 0, 106, 203, 1, 0, 0, 0, 107, 108, 5, 9, 0, 0, 108, 109, 5, 1, 0, 0, 109, 110, 3, 0, 0, 0, 110, 111, 5, 2, 0, 0, 111, 203, 1, 0, 0, 0, 112, 113, 5, 11, 0, 0, 113, 114, 5, 1, 0, 0, 114, 115, 3, 0, 0, 0, 115, 116, 5, 2, 0, 0, 116, 203, 1, 0, 0, 0, 117, 118, 5, 12, 0, 0, 118, 119, 5, 1, 0, 0, 119, 120, 3, 0, 0, 0, 120, 121, 5, 2, 0, 0, 121, 203, 1, 0, 0, 0, 122, 123, 5, 13, 0, 0, 123, 124, 5, 1, 0, 0, 124, 125, 3, 0, 0, 0, 125, 126, 5, 2, 0, 0, 126, 203, 1, 0, 0, 0, 127, 128, 5, 14, 0, 0, 128, 129, 5, 1, 0, 0, 129, 130, 3, 0, 0, 0, 130, 131, 5, 2, 0, 0, 131, 203, 1, 0, 0, 0, 132, 133, 5, 15, 0, 0, 133, 134, 5, 1, 0, 0, 134, 135, 3, 0, 0, 0, 135, 136, 5, 2, 0, 0, 136, 203, 1, 0, 0, 0, 137, 138, 5, 16, 0, 0, 138, 139, 5, 1, 0, 0, 139, 140, 3, 0, 0, 0, 140, 141, 5, 2, 0, 0, 141, 203, 1, 0, 0, 0, 142, 143, 5, 17, 0, 0, 143, 144, 5, 1, 0, 0, 144, 145, 3, 0, 0, 0, 145, 146, 5, 2, 0, 0, 146, 203, 1, 0, 0, 0, 147, 148, 5, 18, 0, 0, 148, 149, 5, 1, 0, 0, 149, 150, 3, 0, 0, 0, 150, 151, 5, 2, 0, 0, 151, 203, 1, 0, 0, 0, 152, 153, 5, 19, 0, 0, 153, 154, 5, 1, 0, 0, 154, 155, 3, 0, 0, 0, 155, 156, 5, 2, 0, 0, 156, 203, 1, 0, 0, 0, 157, 158, 5, 20, 0, 0, 158, 159, 5, 1, 0, 0, 159, 160, 3, 0, 0, 0, 160, 161, 5, 2, 0, 0, 161, 203, 1, 0, 0, 0, 162, 163, 5, 21, 0, 0, 163, 164, 5, 1, 0, 0, 164, 165, 3, 0, 0, 0, 165, 166, 5, 2, 0, 0, 166, 203, 1, 0, 0, 0, 167, 168, 5, 26, 0, 0, 168, 169, 5, 1, 0, 0, 169, 170, 3, 0, 0, 0, 170, 171, 5, 2, 0, 0, 171, 203, 1, 0, 0, 0, 172, 173, 5, 27, 0, 0, 173, 174, 5, 1, 0, 0, 174, 175, 3, 0, 0, 0, 175, 176, 5, 2, 0, 0, 176, 203, 1, 0, 0, 0, 177, 178, 5, 28, 0, 0, 178, 179, 5, 1, 0, 0, 179, 180, 3, 0, 0, 0, 180, 181, 5, 2, 0, 0, 181, 203, 1, 0, 0, 0, 182, 183, 5, 29, 0, 0, 183, 184, 5, 1, 0, 0, 184, 185, 3, 0, 0, 0, 185, 186, 5, 2, 0, 0, 186, 203, 1, 0, 0, 0, 187, 188, 5, 30, 0, 0, 188, 189, 5, 1, 0, 0, 189, 190, 3, 0, 0, 0, 190, 191, 5, 2, 0, 0, 191, 203, 1, 0, 0, 0, 192, 193, 5, 31, 0, 0, 193, 194, 5, 1, 0, 0, 194, 195, 3, 0, 0, 0, 195, 196, 5, 2, 0, 0, 196, 203, 1, 0, 0, 0, 197, 198, 5, 33, 0, 0, 198, 199, 5, 1, 0, 0, 199, 200, 3, 0, 0, 0, 200, 201, 5, 2, 0, 0, 201, 203, 1, 0, 0, 0, 202, 82, 1, 0, 0, 0, 202, 87, 1, 0, 0, 0, 202, 92, 1, 0, 0, 0, 202, 97, 1, 0, 0, 0, 202, 102, 1, 0, 0, 0, 202, 107, 1, 0, 0, 0, 202, 112, 1, 0, 0, 0, 202, 117, 1, 0, 0, 0, 202, 122, 1, 0, 0, 0, 202, 127, 1, 0, 0, 0, 202, 132, 1, 0, 0, 0, 202, 137, 1, 0, 0, 0, 202, 142, 1, 0, 0, 0, 202, 147, 1, 0, 0, 0, 202, 152, 1, 0, 0, 0, 202, 157, 1, 0, 0, 0, 202, 162, 1, 0, 0, 0, 202, 167, 1, 0, 0, 0, 202, 172, 1, 0, 0, 0, 202, 177, 1, 0, 0, 0, 202, 182, 1, 0, 0, 0, 202, 187, 1, 0, 0, 0, 202, 192, 1, 0, 0, 0, 202, 197, 1, 0, 0, 0, 203, 13, 1, 0, 0, 0, 204, 205, 5, 32, 0, 0, 205, 206, 5, 1, 0, 0, 206, 207, 3, 0, 0, 0, 207, 208, 5, 3, 0, 0, 208, 209, 3, 0, 0, 0, 209, 210, 5, 2, 0, 0, 210, 233, 1, 0, 0, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 1, 0, 0, 213, 214, 3, 0, 0, 0, 214, 215, 5, 3, 0, 0, 215, 216, 3, 0, 0, 0, 216, 217, 5, 2, 0, 0, 217, 233, 1, 0, 0, 0, 218, 219, 5, 24, 0, 0, 219, 220, 5, 1, 0, 0, 220, 221, 3, 0, 0, 0, 221, 222, 5, 3, 0, 0, 222, 223, 3, 0, 0, 0, 223, 224, 5, 2, 0, 0, 224, 233, 1, 0, 0, 0, 225, 226, 5, 25, 0, 0, 226, 227, 5, 1, 0, 0, 227, 228, 3, 0, 0, 0, 228, 229, 5, 3, 0, 0, 229, 230, 3, 0, 0, 0, 230, 231, 5, 2, 0, 0, 231, 233, 1, 0, 0, 0, 232, 204, 1, 0, 0, 0, 232, 211, 1, 0, 0, 0, 232, 218, 1, 0, 0, 0, 232, 225, 1, 0, 0, 0, 233, 15, 1, 0, 0, 0, 234, 235, 5, 34, 0, 0, 235, 236, 5, 1, 0, 0, 236, 237, 3, 0, 0, 0, 237, 238, 5, 3, 0, 0, 238, 239, 3, 0, 0, 0, 239, 240, 5, 3, 0, 0, 240, 241, 3, 0, 0, 0, 241, 242, 5, 2, 0, 0, 242, 17, 1, 0, 0, 0, 243, 244, 5, 22, 0, 0, 244, 245, 5, 1, 0, 0, 245, 248, 3, 0, 0, 0, 246, 247, 5, 3, 0, 0, 247, 249, 3, 0, 0, 0, 248, 246, 1, 0, 0, 0, 249, 250, 1, 0, 0, 0, 250, 248, 1, 0, 0, 0, 250, 251, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 253, 5, 2, 0, 0, 253, 266, 1, 0, 0, 0, 254, 255, 5, 23, 0, 0, 255, 256, 5, 1, 0, 0, 256, 259, 3, 0, 0, 0, 257, 258, 5, 3, 0, 0, 258, 260, 3, 0, 0, 0, 259, 257, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 259, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 264, 5, 2, 0, 0, 264, 266, 1, 0, 0, 0, 265, 243, 1, 0, 0, 0, 265, 254, 1, 0, 0, 0, 266, 19, 1, 0, 0, 0, 13, 22, 33, 35, 50, 52, 60, 67, 80, 202, 232, 250, 261, 265] \ No newline at end of file diff --git a/src/more_math/Parser/MathExpr.tokens b/src/more_math/Parser/MathExpr.tokens index 35d9a74..cc8ad59 100644 --- a/src/more_math/Parser/MathExpr.tokens +++ b/src/more_math/Parser/MathExpr.tokens @@ -19,27 +19,29 @@ SQRT=18 LN=19 LOG=20 EXP=21 -MIN=22 -MAX=23 -TNORM=24 -SNORM=25 -FLOOR=26 -CEIL=27 -ROUND=28 -GAMMA=29 -POWE=30 -SIGM=31 -CLAMP=32 -PLUS=33 -MINUS=34 -MULT=35 -DIV=36 -MOD=37 -POW=38 -CONSTANT=39 -NUMBER=40 -VARIABLE=41 -WS=42 +SMIN=22 +SMAX=23 +TMIN=24 +TMAX=25 +TNORM=26 +SNORM=27 +FLOOR=28 +CEIL=29 +ROUND=30 +GAMMA=31 +POWE=32 +SIGM=33 +CLAMP=34 +PLUS=35 +MINUS=36 +MULT=37 +DIV=38 +MOD=39 +POW=40 +CONSTANT=41 +NUMBER=42 +VARIABLE=43 +WS=44 '('=1 ')'=2 ','=3 @@ -61,20 +63,22 @@ WS=42 'ln'=19 'log'=20 'exp'=21 -'min'=22 -'max'=23 -'tnorm'=24 -'snorm'=25 -'floor'=26 -'ceil'=27 -'round'=28 -'gamma'=29 -'pow'=30 -'sigmoid'=31 -'clamp'=32 -'+'=33 -'-'=34 -'*'=35 -'/'=36 -'%'=37 -'^'=38 +'smin'=22 +'smax'=23 +'tmin'=24 +'tmax'=25 +'tnorm'=26 +'snorm'=27 +'floor'=28 +'ceil'=29 +'round'=30 +'gamma'=31 +'pow'=32 +'sigmoid'=33 +'clamp'=34 +'+'=35 +'-'=36 +'*'=37 +'/'=38 +'%'=39 +'^'=40 diff --git a/src/more_math/Parser/MathExprLexer.interp b/src/more_math/Parser/MathExprLexer.interp index 8f44de0..a528e64 100644 --- a/src/more_math/Parser/MathExprLexer.interp +++ b/src/more_math/Parser/MathExprLexer.interp @@ -21,8 +21,10 @@ null 'ln' 'log' 'exp' -'min' -'max' +'smin' +'smax' +'tmin' +'tmax' 'tnorm' 'snorm' 'floor' @@ -66,8 +68,10 @@ SQRT LN LOG EXP -MIN -MAX +SMIN +SMAX +TMIN +TMAX TNORM SNORM FLOOR @@ -110,8 +114,10 @@ SQRT LN LOG EXP -MIN -MAX +SMIN +SMAX +TMIN +TMAX TNORM SNORM FLOOR @@ -140,4 +146,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 42, 284, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 256, 8, 38, 1, 39, 4, 39, 259, 8, 39, 11, 39, 12, 39, 260, 1, 39, 1, 39, 4, 39, 265, 8, 39, 11, 39, 12, 39, 266, 3, 39, 269, 8, 39, 1, 40, 1, 40, 5, 40, 273, 8, 40, 10, 40, 12, 40, 276, 9, 40, 1, 41, 4, 41, 279, 8, 41, 11, 41, 12, 41, 280, 1, 41, 1, 41, 0, 0, 42, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 1, 0, 5, 2, 0, 69, 69, 101, 101, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 9, 10, 13, 13, 32, 32, 290, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 1, 85, 1, 0, 0, 0, 3, 87, 1, 0, 0, 0, 5, 89, 1, 0, 0, 0, 7, 91, 1, 0, 0, 0, 9, 95, 1, 0, 0, 0, 11, 99, 1, 0, 0, 0, 13, 103, 1, 0, 0, 0, 15, 108, 1, 0, 0, 0, 17, 113, 1, 0, 0, 0, 19, 118, 1, 0, 0, 0, 21, 124, 1, 0, 0, 0, 23, 129, 1, 0, 0, 0, 25, 134, 1, 0, 0, 0, 27, 139, 1, 0, 0, 0, 29, 145, 1, 0, 0, 0, 31, 151, 1, 0, 0, 0, 33, 157, 1, 0, 0, 0, 35, 161, 1, 0, 0, 0, 37, 166, 1, 0, 0, 0, 39, 169, 1, 0, 0, 0, 41, 173, 1, 0, 0, 0, 43, 177, 1, 0, 0, 0, 45, 181, 1, 0, 0, 0, 47, 185, 1, 0, 0, 0, 49, 191, 1, 0, 0, 0, 51, 197, 1, 0, 0, 0, 53, 203, 1, 0, 0, 0, 55, 208, 1, 0, 0, 0, 57, 214, 1, 0, 0, 0, 59, 220, 1, 0, 0, 0, 61, 224, 1, 0, 0, 0, 63, 232, 1, 0, 0, 0, 65, 238, 1, 0, 0, 0, 67, 240, 1, 0, 0, 0, 69, 242, 1, 0, 0, 0, 71, 244, 1, 0, 0, 0, 73, 246, 1, 0, 0, 0, 75, 248, 1, 0, 0, 0, 77, 255, 1, 0, 0, 0, 79, 258, 1, 0, 0, 0, 81, 270, 1, 0, 0, 0, 83, 278, 1, 0, 0, 0, 85, 86, 5, 40, 0, 0, 86, 2, 1, 0, 0, 0, 87, 88, 5, 41, 0, 0, 88, 4, 1, 0, 0, 0, 89, 90, 5, 44, 0, 0, 90, 6, 1, 0, 0, 0, 91, 92, 5, 115, 0, 0, 92, 93, 5, 105, 0, 0, 93, 94, 5, 110, 0, 0, 94, 8, 1, 0, 0, 0, 95, 96, 5, 99, 0, 0, 96, 97, 5, 111, 0, 0, 97, 98, 5, 115, 0, 0, 98, 10, 1, 0, 0, 0, 99, 100, 5, 116, 0, 0, 100, 101, 5, 97, 0, 0, 101, 102, 5, 110, 0, 0, 102, 12, 1, 0, 0, 0, 103, 104, 5, 97, 0, 0, 104, 105, 5, 115, 0, 0, 105, 106, 5, 105, 0, 0, 106, 107, 5, 110, 0, 0, 107, 14, 1, 0, 0, 0, 108, 109, 5, 97, 0, 0, 109, 110, 5, 99, 0, 0, 110, 111, 5, 111, 0, 0, 111, 112, 5, 115, 0, 0, 112, 16, 1, 0, 0, 0, 113, 114, 5, 97, 0, 0, 114, 115, 5, 116, 0, 0, 115, 116, 5, 97, 0, 0, 116, 117, 5, 110, 0, 0, 117, 18, 1, 0, 0, 0, 118, 119, 5, 97, 0, 0, 119, 120, 5, 116, 0, 0, 120, 121, 5, 97, 0, 0, 121, 122, 5, 110, 0, 0, 122, 123, 5, 50, 0, 0, 123, 20, 1, 0, 0, 0, 124, 125, 5, 115, 0, 0, 125, 126, 5, 105, 0, 0, 126, 127, 5, 110, 0, 0, 127, 128, 5, 104, 0, 0, 128, 22, 1, 0, 0, 0, 129, 130, 5, 99, 0, 0, 130, 131, 5, 111, 0, 0, 131, 132, 5, 115, 0, 0, 132, 133, 5, 104, 0, 0, 133, 24, 1, 0, 0, 0, 134, 135, 5, 116, 0, 0, 135, 136, 5, 97, 0, 0, 136, 137, 5, 110, 0, 0, 137, 138, 5, 104, 0, 0, 138, 26, 1, 0, 0, 0, 139, 140, 5, 97, 0, 0, 140, 141, 5, 115, 0, 0, 141, 142, 5, 105, 0, 0, 142, 143, 5, 110, 0, 0, 143, 144, 5, 104, 0, 0, 144, 28, 1, 0, 0, 0, 145, 146, 5, 97, 0, 0, 146, 147, 5, 99, 0, 0, 147, 148, 5, 111, 0, 0, 148, 149, 5, 115, 0, 0, 149, 150, 5, 104, 0, 0, 150, 30, 1, 0, 0, 0, 151, 152, 5, 97, 0, 0, 152, 153, 5, 116, 0, 0, 153, 154, 5, 97, 0, 0, 154, 155, 5, 110, 0, 0, 155, 156, 5, 104, 0, 0, 156, 32, 1, 0, 0, 0, 157, 158, 5, 97, 0, 0, 158, 159, 5, 98, 0, 0, 159, 160, 5, 115, 0, 0, 160, 34, 1, 0, 0, 0, 161, 162, 5, 115, 0, 0, 162, 163, 5, 113, 0, 0, 163, 164, 5, 114, 0, 0, 164, 165, 5, 116, 0, 0, 165, 36, 1, 0, 0, 0, 166, 167, 5, 108, 0, 0, 167, 168, 5, 110, 0, 0, 168, 38, 1, 0, 0, 0, 169, 170, 5, 108, 0, 0, 170, 171, 5, 111, 0, 0, 171, 172, 5, 103, 0, 0, 172, 40, 1, 0, 0, 0, 173, 174, 5, 101, 0, 0, 174, 175, 5, 120, 0, 0, 175, 176, 5, 112, 0, 0, 176, 42, 1, 0, 0, 0, 177, 178, 5, 109, 0, 0, 178, 179, 5, 105, 0, 0, 179, 180, 5, 110, 0, 0, 180, 44, 1, 0, 0, 0, 181, 182, 5, 109, 0, 0, 182, 183, 5, 97, 0, 0, 183, 184, 5, 120, 0, 0, 184, 46, 1, 0, 0, 0, 185, 186, 5, 116, 0, 0, 186, 187, 5, 110, 0, 0, 187, 188, 5, 111, 0, 0, 188, 189, 5, 114, 0, 0, 189, 190, 5, 109, 0, 0, 190, 48, 1, 0, 0, 0, 191, 192, 5, 115, 0, 0, 192, 193, 5, 110, 0, 0, 193, 194, 5, 111, 0, 0, 194, 195, 5, 114, 0, 0, 195, 196, 5, 109, 0, 0, 196, 50, 1, 0, 0, 0, 197, 198, 5, 102, 0, 0, 198, 199, 5, 108, 0, 0, 199, 200, 5, 111, 0, 0, 200, 201, 5, 111, 0, 0, 201, 202, 5, 114, 0, 0, 202, 52, 1, 0, 0, 0, 203, 204, 5, 99, 0, 0, 204, 205, 5, 101, 0, 0, 205, 206, 5, 105, 0, 0, 206, 207, 5, 108, 0, 0, 207, 54, 1, 0, 0, 0, 208, 209, 5, 114, 0, 0, 209, 210, 5, 111, 0, 0, 210, 211, 5, 117, 0, 0, 211, 212, 5, 110, 0, 0, 212, 213, 5, 100, 0, 0, 213, 56, 1, 0, 0, 0, 214, 215, 5, 103, 0, 0, 215, 216, 5, 97, 0, 0, 216, 217, 5, 109, 0, 0, 217, 218, 5, 109, 0, 0, 218, 219, 5, 97, 0, 0, 219, 58, 1, 0, 0, 0, 220, 221, 5, 112, 0, 0, 221, 222, 5, 111, 0, 0, 222, 223, 5, 119, 0, 0, 223, 60, 1, 0, 0, 0, 224, 225, 5, 115, 0, 0, 225, 226, 5, 105, 0, 0, 226, 227, 5, 103, 0, 0, 227, 228, 5, 109, 0, 0, 228, 229, 5, 111, 0, 0, 229, 230, 5, 105, 0, 0, 230, 231, 5, 100, 0, 0, 231, 62, 1, 0, 0, 0, 232, 233, 5, 99, 0, 0, 233, 234, 5, 108, 0, 0, 234, 235, 5, 97, 0, 0, 235, 236, 5, 109, 0, 0, 236, 237, 5, 112, 0, 0, 237, 64, 1, 0, 0, 0, 238, 239, 5, 43, 0, 0, 239, 66, 1, 0, 0, 0, 240, 241, 5, 45, 0, 0, 241, 68, 1, 0, 0, 0, 242, 243, 5, 42, 0, 0, 243, 70, 1, 0, 0, 0, 244, 245, 5, 47, 0, 0, 245, 72, 1, 0, 0, 0, 246, 247, 5, 37, 0, 0, 247, 74, 1, 0, 0, 0, 248, 249, 5, 94, 0, 0, 249, 76, 1, 0, 0, 0, 250, 251, 5, 112, 0, 0, 251, 256, 5, 105, 0, 0, 252, 253, 5, 80, 0, 0, 253, 256, 5, 73, 0, 0, 254, 256, 7, 0, 0, 0, 255, 250, 1, 0, 0, 0, 255, 252, 1, 0, 0, 0, 255, 254, 1, 0, 0, 0, 256, 78, 1, 0, 0, 0, 257, 259, 7, 1, 0, 0, 258, 257, 1, 0, 0, 0, 259, 260, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 268, 1, 0, 0, 0, 262, 264, 5, 46, 0, 0, 263, 265, 7, 1, 0, 0, 264, 263, 1, 0, 0, 0, 265, 266, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 269, 1, 0, 0, 0, 268, 262, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 80, 1, 0, 0, 0, 270, 274, 7, 2, 0, 0, 271, 273, 7, 3, 0, 0, 272, 271, 1, 0, 0, 0, 273, 276, 1, 0, 0, 0, 274, 272, 1, 0, 0, 0, 274, 275, 1, 0, 0, 0, 275, 82, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 277, 279, 7, 4, 0, 0, 278, 277, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 278, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 283, 6, 41, 0, 0, 283, 84, 1, 0, 0, 0, 7, 0, 255, 260, 266, 268, 274, 280, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 44, 300, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 3, 40, 272, 8, 40, 1, 41, 4, 41, 275, 8, 41, 11, 41, 12, 41, 276, 1, 41, 1, 41, 4, 41, 281, 8, 41, 11, 41, 12, 41, 282, 3, 41, 285, 8, 41, 1, 42, 1, 42, 5, 42, 289, 8, 42, 10, 42, 12, 42, 292, 9, 42, 1, 43, 4, 43, 295, 8, 43, 11, 43, 12, 43, 296, 1, 43, 1, 43, 0, 0, 44, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 1, 0, 5, 2, 0, 69, 69, 101, 101, 1, 0, 48, 57, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 9, 10, 13, 13, 32, 32, 306, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 1, 89, 1, 0, 0, 0, 3, 91, 1, 0, 0, 0, 5, 93, 1, 0, 0, 0, 7, 95, 1, 0, 0, 0, 9, 99, 1, 0, 0, 0, 11, 103, 1, 0, 0, 0, 13, 107, 1, 0, 0, 0, 15, 112, 1, 0, 0, 0, 17, 117, 1, 0, 0, 0, 19, 122, 1, 0, 0, 0, 21, 128, 1, 0, 0, 0, 23, 133, 1, 0, 0, 0, 25, 138, 1, 0, 0, 0, 27, 143, 1, 0, 0, 0, 29, 149, 1, 0, 0, 0, 31, 155, 1, 0, 0, 0, 33, 161, 1, 0, 0, 0, 35, 165, 1, 0, 0, 0, 37, 170, 1, 0, 0, 0, 39, 173, 1, 0, 0, 0, 41, 177, 1, 0, 0, 0, 43, 181, 1, 0, 0, 0, 45, 186, 1, 0, 0, 0, 47, 191, 1, 0, 0, 0, 49, 196, 1, 0, 0, 0, 51, 201, 1, 0, 0, 0, 53, 207, 1, 0, 0, 0, 55, 213, 1, 0, 0, 0, 57, 219, 1, 0, 0, 0, 59, 224, 1, 0, 0, 0, 61, 230, 1, 0, 0, 0, 63, 236, 1, 0, 0, 0, 65, 240, 1, 0, 0, 0, 67, 248, 1, 0, 0, 0, 69, 254, 1, 0, 0, 0, 71, 256, 1, 0, 0, 0, 73, 258, 1, 0, 0, 0, 75, 260, 1, 0, 0, 0, 77, 262, 1, 0, 0, 0, 79, 264, 1, 0, 0, 0, 81, 271, 1, 0, 0, 0, 83, 274, 1, 0, 0, 0, 85, 286, 1, 0, 0, 0, 87, 294, 1, 0, 0, 0, 89, 90, 5, 40, 0, 0, 90, 2, 1, 0, 0, 0, 91, 92, 5, 41, 0, 0, 92, 4, 1, 0, 0, 0, 93, 94, 5, 44, 0, 0, 94, 6, 1, 0, 0, 0, 95, 96, 5, 115, 0, 0, 96, 97, 5, 105, 0, 0, 97, 98, 5, 110, 0, 0, 98, 8, 1, 0, 0, 0, 99, 100, 5, 99, 0, 0, 100, 101, 5, 111, 0, 0, 101, 102, 5, 115, 0, 0, 102, 10, 1, 0, 0, 0, 103, 104, 5, 116, 0, 0, 104, 105, 5, 97, 0, 0, 105, 106, 5, 110, 0, 0, 106, 12, 1, 0, 0, 0, 107, 108, 5, 97, 0, 0, 108, 109, 5, 115, 0, 0, 109, 110, 5, 105, 0, 0, 110, 111, 5, 110, 0, 0, 111, 14, 1, 0, 0, 0, 112, 113, 5, 97, 0, 0, 113, 114, 5, 99, 0, 0, 114, 115, 5, 111, 0, 0, 115, 116, 5, 115, 0, 0, 116, 16, 1, 0, 0, 0, 117, 118, 5, 97, 0, 0, 118, 119, 5, 116, 0, 0, 119, 120, 5, 97, 0, 0, 120, 121, 5, 110, 0, 0, 121, 18, 1, 0, 0, 0, 122, 123, 5, 97, 0, 0, 123, 124, 5, 116, 0, 0, 124, 125, 5, 97, 0, 0, 125, 126, 5, 110, 0, 0, 126, 127, 5, 50, 0, 0, 127, 20, 1, 0, 0, 0, 128, 129, 5, 115, 0, 0, 129, 130, 5, 105, 0, 0, 130, 131, 5, 110, 0, 0, 131, 132, 5, 104, 0, 0, 132, 22, 1, 0, 0, 0, 133, 134, 5, 99, 0, 0, 134, 135, 5, 111, 0, 0, 135, 136, 5, 115, 0, 0, 136, 137, 5, 104, 0, 0, 137, 24, 1, 0, 0, 0, 138, 139, 5, 116, 0, 0, 139, 140, 5, 97, 0, 0, 140, 141, 5, 110, 0, 0, 141, 142, 5, 104, 0, 0, 142, 26, 1, 0, 0, 0, 143, 144, 5, 97, 0, 0, 144, 145, 5, 115, 0, 0, 145, 146, 5, 105, 0, 0, 146, 147, 5, 110, 0, 0, 147, 148, 5, 104, 0, 0, 148, 28, 1, 0, 0, 0, 149, 150, 5, 97, 0, 0, 150, 151, 5, 99, 0, 0, 151, 152, 5, 111, 0, 0, 152, 153, 5, 115, 0, 0, 153, 154, 5, 104, 0, 0, 154, 30, 1, 0, 0, 0, 155, 156, 5, 97, 0, 0, 156, 157, 5, 116, 0, 0, 157, 158, 5, 97, 0, 0, 158, 159, 5, 110, 0, 0, 159, 160, 5, 104, 0, 0, 160, 32, 1, 0, 0, 0, 161, 162, 5, 97, 0, 0, 162, 163, 5, 98, 0, 0, 163, 164, 5, 115, 0, 0, 164, 34, 1, 0, 0, 0, 165, 166, 5, 115, 0, 0, 166, 167, 5, 113, 0, 0, 167, 168, 5, 114, 0, 0, 168, 169, 5, 116, 0, 0, 169, 36, 1, 0, 0, 0, 170, 171, 5, 108, 0, 0, 171, 172, 5, 110, 0, 0, 172, 38, 1, 0, 0, 0, 173, 174, 5, 108, 0, 0, 174, 175, 5, 111, 0, 0, 175, 176, 5, 103, 0, 0, 176, 40, 1, 0, 0, 0, 177, 178, 5, 101, 0, 0, 178, 179, 5, 120, 0, 0, 179, 180, 5, 112, 0, 0, 180, 42, 1, 0, 0, 0, 181, 182, 5, 115, 0, 0, 182, 183, 5, 109, 0, 0, 183, 184, 5, 105, 0, 0, 184, 185, 5, 110, 0, 0, 185, 44, 1, 0, 0, 0, 186, 187, 5, 115, 0, 0, 187, 188, 5, 109, 0, 0, 188, 189, 5, 97, 0, 0, 189, 190, 5, 120, 0, 0, 190, 46, 1, 0, 0, 0, 191, 192, 5, 116, 0, 0, 192, 193, 5, 109, 0, 0, 193, 194, 5, 105, 0, 0, 194, 195, 5, 110, 0, 0, 195, 48, 1, 0, 0, 0, 196, 197, 5, 116, 0, 0, 197, 198, 5, 109, 0, 0, 198, 199, 5, 97, 0, 0, 199, 200, 5, 120, 0, 0, 200, 50, 1, 0, 0, 0, 201, 202, 5, 116, 0, 0, 202, 203, 5, 110, 0, 0, 203, 204, 5, 111, 0, 0, 204, 205, 5, 114, 0, 0, 205, 206, 5, 109, 0, 0, 206, 52, 1, 0, 0, 0, 207, 208, 5, 115, 0, 0, 208, 209, 5, 110, 0, 0, 209, 210, 5, 111, 0, 0, 210, 211, 5, 114, 0, 0, 211, 212, 5, 109, 0, 0, 212, 54, 1, 0, 0, 0, 213, 214, 5, 102, 0, 0, 214, 215, 5, 108, 0, 0, 215, 216, 5, 111, 0, 0, 216, 217, 5, 111, 0, 0, 217, 218, 5, 114, 0, 0, 218, 56, 1, 0, 0, 0, 219, 220, 5, 99, 0, 0, 220, 221, 5, 101, 0, 0, 221, 222, 5, 105, 0, 0, 222, 223, 5, 108, 0, 0, 223, 58, 1, 0, 0, 0, 224, 225, 5, 114, 0, 0, 225, 226, 5, 111, 0, 0, 226, 227, 5, 117, 0, 0, 227, 228, 5, 110, 0, 0, 228, 229, 5, 100, 0, 0, 229, 60, 1, 0, 0, 0, 230, 231, 5, 103, 0, 0, 231, 232, 5, 97, 0, 0, 232, 233, 5, 109, 0, 0, 233, 234, 5, 109, 0, 0, 234, 235, 5, 97, 0, 0, 235, 62, 1, 0, 0, 0, 236, 237, 5, 112, 0, 0, 237, 238, 5, 111, 0, 0, 238, 239, 5, 119, 0, 0, 239, 64, 1, 0, 0, 0, 240, 241, 5, 115, 0, 0, 241, 242, 5, 105, 0, 0, 242, 243, 5, 103, 0, 0, 243, 244, 5, 109, 0, 0, 244, 245, 5, 111, 0, 0, 245, 246, 5, 105, 0, 0, 246, 247, 5, 100, 0, 0, 247, 66, 1, 0, 0, 0, 248, 249, 5, 99, 0, 0, 249, 250, 5, 108, 0, 0, 250, 251, 5, 97, 0, 0, 251, 252, 5, 109, 0, 0, 252, 253, 5, 112, 0, 0, 253, 68, 1, 0, 0, 0, 254, 255, 5, 43, 0, 0, 255, 70, 1, 0, 0, 0, 256, 257, 5, 45, 0, 0, 257, 72, 1, 0, 0, 0, 258, 259, 5, 42, 0, 0, 259, 74, 1, 0, 0, 0, 260, 261, 5, 47, 0, 0, 261, 76, 1, 0, 0, 0, 262, 263, 5, 37, 0, 0, 263, 78, 1, 0, 0, 0, 264, 265, 5, 94, 0, 0, 265, 80, 1, 0, 0, 0, 266, 267, 5, 112, 0, 0, 267, 272, 5, 105, 0, 0, 268, 269, 5, 80, 0, 0, 269, 272, 5, 73, 0, 0, 270, 272, 7, 0, 0, 0, 271, 266, 1, 0, 0, 0, 271, 268, 1, 0, 0, 0, 271, 270, 1, 0, 0, 0, 272, 82, 1, 0, 0, 0, 273, 275, 7, 1, 0, 0, 274, 273, 1, 0, 0, 0, 275, 276, 1, 0, 0, 0, 276, 274, 1, 0, 0, 0, 276, 277, 1, 0, 0, 0, 277, 284, 1, 0, 0, 0, 278, 280, 5, 46, 0, 0, 279, 281, 7, 1, 0, 0, 280, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 280, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 285, 1, 0, 0, 0, 284, 278, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 84, 1, 0, 0, 0, 286, 290, 7, 2, 0, 0, 287, 289, 7, 3, 0, 0, 288, 287, 1, 0, 0, 0, 289, 292, 1, 0, 0, 0, 290, 288, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 86, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 293, 295, 7, 4, 0, 0, 294, 293, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 294, 1, 0, 0, 0, 296, 297, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 299, 6, 43, 0, 0, 299, 88, 1, 0, 0, 0, 7, 0, 271, 276, 282, 284, 290, 296, 1, 6, 0, 0] \ No newline at end of file diff --git a/src/more_math/Parser/MathExprLexer.py b/src/more_math/Parser/MathExprLexer.py index 5c9a843..0b671f8 100644 --- a/src/more_math/Parser/MathExprLexer.py +++ b/src/more_math/Parser/MathExprLexer.py @@ -10,106 +10,111 @@ else: def serializedATN(): return [ - 4,0,42,284,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, + 4,0,44,300,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, 2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2, 13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7, 19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2, 26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7, 32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2, - 39,7,39,2,40,7,40,2,41,7,41,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,3, - 1,3,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7, - 1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10, - 1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12, - 1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,15, - 1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17, - 1,17,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,21, - 1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23, - 1,24,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,26, - 1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28, - 1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30, - 1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,33,1,33,1,34, - 1,34,1,35,1,35,1,36,1,36,1,37,1,37,1,38,1,38,1,38,1,38,1,38,3,38, - 256,8,38,1,39,4,39,259,8,39,11,39,12,39,260,1,39,1,39,4,39,265,8, - 39,11,39,12,39,266,3,39,269,8,39,1,40,1,40,5,40,273,8,40,10,40,12, - 40,276,9,40,1,41,4,41,279,8,41,11,41,12,41,280,1,41,1,41,0,0,42, - 1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13, - 27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24, - 49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35, - 71,36,73,37,75,38,77,39,79,40,81,41,83,42,1,0,5,2,0,69,69,101,101, - 1,0,48,57,3,0,65,90,95,95,97,122,4,0,48,57,65,90,95,95,97,122,3, - 0,9,10,13,13,32,32,290,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1, - 0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1, - 0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1, - 0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1, - 0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1, - 0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1, - 0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1, - 0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1, - 0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,1,85,1,0,0,0,3,87,1, - 0,0,0,5,89,1,0,0,0,7,91,1,0,0,0,9,95,1,0,0,0,11,99,1,0,0,0,13,103, - 1,0,0,0,15,108,1,0,0,0,17,113,1,0,0,0,19,118,1,0,0,0,21,124,1,0, - 0,0,23,129,1,0,0,0,25,134,1,0,0,0,27,139,1,0,0,0,29,145,1,0,0,0, - 31,151,1,0,0,0,33,157,1,0,0,0,35,161,1,0,0,0,37,166,1,0,0,0,39,169, - 1,0,0,0,41,173,1,0,0,0,43,177,1,0,0,0,45,181,1,0,0,0,47,185,1,0, - 0,0,49,191,1,0,0,0,51,197,1,0,0,0,53,203,1,0,0,0,55,208,1,0,0,0, - 57,214,1,0,0,0,59,220,1,0,0,0,61,224,1,0,0,0,63,232,1,0,0,0,65,238, - 1,0,0,0,67,240,1,0,0,0,69,242,1,0,0,0,71,244,1,0,0,0,73,246,1,0, - 0,0,75,248,1,0,0,0,77,255,1,0,0,0,79,258,1,0,0,0,81,270,1,0,0,0, - 83,278,1,0,0,0,85,86,5,40,0,0,86,2,1,0,0,0,87,88,5,41,0,0,88,4,1, - 0,0,0,89,90,5,44,0,0,90,6,1,0,0,0,91,92,5,115,0,0,92,93,5,105,0, - 0,93,94,5,110,0,0,94,8,1,0,0,0,95,96,5,99,0,0,96,97,5,111,0,0,97, - 98,5,115,0,0,98,10,1,0,0,0,99,100,5,116,0,0,100,101,5,97,0,0,101, - 102,5,110,0,0,102,12,1,0,0,0,103,104,5,97,0,0,104,105,5,115,0,0, - 105,106,5,105,0,0,106,107,5,110,0,0,107,14,1,0,0,0,108,109,5,97, - 0,0,109,110,5,99,0,0,110,111,5,111,0,0,111,112,5,115,0,0,112,16, - 1,0,0,0,113,114,5,97,0,0,114,115,5,116,0,0,115,116,5,97,0,0,116, - 117,5,110,0,0,117,18,1,0,0,0,118,119,5,97,0,0,119,120,5,116,0,0, - 120,121,5,97,0,0,121,122,5,110,0,0,122,123,5,50,0,0,123,20,1,0,0, - 0,124,125,5,115,0,0,125,126,5,105,0,0,126,127,5,110,0,0,127,128, - 5,104,0,0,128,22,1,0,0,0,129,130,5,99,0,0,130,131,5,111,0,0,131, - 132,5,115,0,0,132,133,5,104,0,0,133,24,1,0,0,0,134,135,5,116,0,0, - 135,136,5,97,0,0,136,137,5,110,0,0,137,138,5,104,0,0,138,26,1,0, - 0,0,139,140,5,97,0,0,140,141,5,115,0,0,141,142,5,105,0,0,142,143, - 5,110,0,0,143,144,5,104,0,0,144,28,1,0,0,0,145,146,5,97,0,0,146, - 147,5,99,0,0,147,148,5,111,0,0,148,149,5,115,0,0,149,150,5,104,0, - 0,150,30,1,0,0,0,151,152,5,97,0,0,152,153,5,116,0,0,153,154,5,97, - 0,0,154,155,5,110,0,0,155,156,5,104,0,0,156,32,1,0,0,0,157,158,5, - 97,0,0,158,159,5,98,0,0,159,160,5,115,0,0,160,34,1,0,0,0,161,162, - 5,115,0,0,162,163,5,113,0,0,163,164,5,114,0,0,164,165,5,116,0,0, - 165,36,1,0,0,0,166,167,5,108,0,0,167,168,5,110,0,0,168,38,1,0,0, - 0,169,170,5,108,0,0,170,171,5,111,0,0,171,172,5,103,0,0,172,40,1, - 0,0,0,173,174,5,101,0,0,174,175,5,120,0,0,175,176,5,112,0,0,176, - 42,1,0,0,0,177,178,5,109,0,0,178,179,5,105,0,0,179,180,5,110,0,0, - 180,44,1,0,0,0,181,182,5,109,0,0,182,183,5,97,0,0,183,184,5,120, - 0,0,184,46,1,0,0,0,185,186,5,116,0,0,186,187,5,110,0,0,187,188,5, - 111,0,0,188,189,5,114,0,0,189,190,5,109,0,0,190,48,1,0,0,0,191,192, - 5,115,0,0,192,193,5,110,0,0,193,194,5,111,0,0,194,195,5,114,0,0, - 195,196,5,109,0,0,196,50,1,0,0,0,197,198,5,102,0,0,198,199,5,108, - 0,0,199,200,5,111,0,0,200,201,5,111,0,0,201,202,5,114,0,0,202,52, - 1,0,0,0,203,204,5,99,0,0,204,205,5,101,0,0,205,206,5,105,0,0,206, - 207,5,108,0,0,207,54,1,0,0,0,208,209,5,114,0,0,209,210,5,111,0,0, - 210,211,5,117,0,0,211,212,5,110,0,0,212,213,5,100,0,0,213,56,1,0, - 0,0,214,215,5,103,0,0,215,216,5,97,0,0,216,217,5,109,0,0,217,218, - 5,109,0,0,218,219,5,97,0,0,219,58,1,0,0,0,220,221,5,112,0,0,221, - 222,5,111,0,0,222,223,5,119,0,0,223,60,1,0,0,0,224,225,5,115,0,0, - 225,226,5,105,0,0,226,227,5,103,0,0,227,228,5,109,0,0,228,229,5, - 111,0,0,229,230,5,105,0,0,230,231,5,100,0,0,231,62,1,0,0,0,232,233, - 5,99,0,0,233,234,5,108,0,0,234,235,5,97,0,0,235,236,5,109,0,0,236, - 237,5,112,0,0,237,64,1,0,0,0,238,239,5,43,0,0,239,66,1,0,0,0,240, - 241,5,45,0,0,241,68,1,0,0,0,242,243,5,42,0,0,243,70,1,0,0,0,244, - 245,5,47,0,0,245,72,1,0,0,0,246,247,5,37,0,0,247,74,1,0,0,0,248, - 249,5,94,0,0,249,76,1,0,0,0,250,251,5,112,0,0,251,256,5,105,0,0, - 252,253,5,80,0,0,253,256,5,73,0,0,254,256,7,0,0,0,255,250,1,0,0, - 0,255,252,1,0,0,0,255,254,1,0,0,0,256,78,1,0,0,0,257,259,7,1,0,0, - 258,257,1,0,0,0,259,260,1,0,0,0,260,258,1,0,0,0,260,261,1,0,0,0, - 261,268,1,0,0,0,262,264,5,46,0,0,263,265,7,1,0,0,264,263,1,0,0,0, - 265,266,1,0,0,0,266,264,1,0,0,0,266,267,1,0,0,0,267,269,1,0,0,0, - 268,262,1,0,0,0,268,269,1,0,0,0,269,80,1,0,0,0,270,274,7,2,0,0,271, - 273,7,3,0,0,272,271,1,0,0,0,273,276,1,0,0,0,274,272,1,0,0,0,274, - 275,1,0,0,0,275,82,1,0,0,0,276,274,1,0,0,0,277,279,7,4,0,0,278,277, - 1,0,0,0,279,280,1,0,0,0,280,278,1,0,0,0,280,281,1,0,0,0,281,282, - 1,0,0,0,282,283,6,41,0,0,283,84,1,0,0,0,7,0,255,260,266,268,274, - 280,1,6,0,0 + 39,7,39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,1,0,1,0,1,1,1,1, + 1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,6,1,6, + 1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9, + 1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1, + 12,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1, + 14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1, + 16,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,19,1,19,1,19,1,19,1, + 20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1, + 22,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1, + 25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1, + 27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1, + 29,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1, + 32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1, + 34,1,35,1,35,1,36,1,36,1,37,1,37,1,38,1,38,1,39,1,39,1,40,1,40,1, + 40,1,40,1,40,3,40,272,8,40,1,41,4,41,275,8,41,11,41,12,41,276,1, + 41,1,41,4,41,281,8,41,11,41,12,41,282,3,41,285,8,41,1,42,1,42,5, + 42,289,8,42,10,42,12,42,292,9,42,1,43,4,43,295,8,43,11,43,12,43, + 296,1,43,1,43,0,0,44,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19, + 10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41, + 21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63, + 32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85, + 43,87,44,1,0,5,2,0,69,69,101,101,1,0,48,57,3,0,65,90,95,95,97,122, + 4,0,48,57,65,90,95,95,97,122,3,0,9,10,13,13,32,32,306,0,1,1,0,0, + 0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0, + 13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0, + 23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0, + 33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0, + 43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0, + 53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0, + 63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0, + 73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0, + 83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,1,89,1,0,0,0,3,91,1,0,0,0,5, + 93,1,0,0,0,7,95,1,0,0,0,9,99,1,0,0,0,11,103,1,0,0,0,13,107,1,0,0, + 0,15,112,1,0,0,0,17,117,1,0,0,0,19,122,1,0,0,0,21,128,1,0,0,0,23, + 133,1,0,0,0,25,138,1,0,0,0,27,143,1,0,0,0,29,149,1,0,0,0,31,155, + 1,0,0,0,33,161,1,0,0,0,35,165,1,0,0,0,37,170,1,0,0,0,39,173,1,0, + 0,0,41,177,1,0,0,0,43,181,1,0,0,0,45,186,1,0,0,0,47,191,1,0,0,0, + 49,196,1,0,0,0,51,201,1,0,0,0,53,207,1,0,0,0,55,213,1,0,0,0,57,219, + 1,0,0,0,59,224,1,0,0,0,61,230,1,0,0,0,63,236,1,0,0,0,65,240,1,0, + 0,0,67,248,1,0,0,0,69,254,1,0,0,0,71,256,1,0,0,0,73,258,1,0,0,0, + 75,260,1,0,0,0,77,262,1,0,0,0,79,264,1,0,0,0,81,271,1,0,0,0,83,274, + 1,0,0,0,85,286,1,0,0,0,87,294,1,0,0,0,89,90,5,40,0,0,90,2,1,0,0, + 0,91,92,5,41,0,0,92,4,1,0,0,0,93,94,5,44,0,0,94,6,1,0,0,0,95,96, + 5,115,0,0,96,97,5,105,0,0,97,98,5,110,0,0,98,8,1,0,0,0,99,100,5, + 99,0,0,100,101,5,111,0,0,101,102,5,115,0,0,102,10,1,0,0,0,103,104, + 5,116,0,0,104,105,5,97,0,0,105,106,5,110,0,0,106,12,1,0,0,0,107, + 108,5,97,0,0,108,109,5,115,0,0,109,110,5,105,0,0,110,111,5,110,0, + 0,111,14,1,0,0,0,112,113,5,97,0,0,113,114,5,99,0,0,114,115,5,111, + 0,0,115,116,5,115,0,0,116,16,1,0,0,0,117,118,5,97,0,0,118,119,5, + 116,0,0,119,120,5,97,0,0,120,121,5,110,0,0,121,18,1,0,0,0,122,123, + 5,97,0,0,123,124,5,116,0,0,124,125,5,97,0,0,125,126,5,110,0,0,126, + 127,5,50,0,0,127,20,1,0,0,0,128,129,5,115,0,0,129,130,5,105,0,0, + 130,131,5,110,0,0,131,132,5,104,0,0,132,22,1,0,0,0,133,134,5,99, + 0,0,134,135,5,111,0,0,135,136,5,115,0,0,136,137,5,104,0,0,137,24, + 1,0,0,0,138,139,5,116,0,0,139,140,5,97,0,0,140,141,5,110,0,0,141, + 142,5,104,0,0,142,26,1,0,0,0,143,144,5,97,0,0,144,145,5,115,0,0, + 145,146,5,105,0,0,146,147,5,110,0,0,147,148,5,104,0,0,148,28,1,0, + 0,0,149,150,5,97,0,0,150,151,5,99,0,0,151,152,5,111,0,0,152,153, + 5,115,0,0,153,154,5,104,0,0,154,30,1,0,0,0,155,156,5,97,0,0,156, + 157,5,116,0,0,157,158,5,97,0,0,158,159,5,110,0,0,159,160,5,104,0, + 0,160,32,1,0,0,0,161,162,5,97,0,0,162,163,5,98,0,0,163,164,5,115, + 0,0,164,34,1,0,0,0,165,166,5,115,0,0,166,167,5,113,0,0,167,168,5, + 114,0,0,168,169,5,116,0,0,169,36,1,0,0,0,170,171,5,108,0,0,171,172, + 5,110,0,0,172,38,1,0,0,0,173,174,5,108,0,0,174,175,5,111,0,0,175, + 176,5,103,0,0,176,40,1,0,0,0,177,178,5,101,0,0,178,179,5,120,0,0, + 179,180,5,112,0,0,180,42,1,0,0,0,181,182,5,115,0,0,182,183,5,109, + 0,0,183,184,5,105,0,0,184,185,5,110,0,0,185,44,1,0,0,0,186,187,5, + 115,0,0,187,188,5,109,0,0,188,189,5,97,0,0,189,190,5,120,0,0,190, + 46,1,0,0,0,191,192,5,116,0,0,192,193,5,109,0,0,193,194,5,105,0,0, + 194,195,5,110,0,0,195,48,1,0,0,0,196,197,5,116,0,0,197,198,5,109, + 0,0,198,199,5,97,0,0,199,200,5,120,0,0,200,50,1,0,0,0,201,202,5, + 116,0,0,202,203,5,110,0,0,203,204,5,111,0,0,204,205,5,114,0,0,205, + 206,5,109,0,0,206,52,1,0,0,0,207,208,5,115,0,0,208,209,5,110,0,0, + 209,210,5,111,0,0,210,211,5,114,0,0,211,212,5,109,0,0,212,54,1,0, + 0,0,213,214,5,102,0,0,214,215,5,108,0,0,215,216,5,111,0,0,216,217, + 5,111,0,0,217,218,5,114,0,0,218,56,1,0,0,0,219,220,5,99,0,0,220, + 221,5,101,0,0,221,222,5,105,0,0,222,223,5,108,0,0,223,58,1,0,0,0, + 224,225,5,114,0,0,225,226,5,111,0,0,226,227,5,117,0,0,227,228,5, + 110,0,0,228,229,5,100,0,0,229,60,1,0,0,0,230,231,5,103,0,0,231,232, + 5,97,0,0,232,233,5,109,0,0,233,234,5,109,0,0,234,235,5,97,0,0,235, + 62,1,0,0,0,236,237,5,112,0,0,237,238,5,111,0,0,238,239,5,119,0,0, + 239,64,1,0,0,0,240,241,5,115,0,0,241,242,5,105,0,0,242,243,5,103, + 0,0,243,244,5,109,0,0,244,245,5,111,0,0,245,246,5,105,0,0,246,247, + 5,100,0,0,247,66,1,0,0,0,248,249,5,99,0,0,249,250,5,108,0,0,250, + 251,5,97,0,0,251,252,5,109,0,0,252,253,5,112,0,0,253,68,1,0,0,0, + 254,255,5,43,0,0,255,70,1,0,0,0,256,257,5,45,0,0,257,72,1,0,0,0, + 258,259,5,42,0,0,259,74,1,0,0,0,260,261,5,47,0,0,261,76,1,0,0,0, + 262,263,5,37,0,0,263,78,1,0,0,0,264,265,5,94,0,0,265,80,1,0,0,0, + 266,267,5,112,0,0,267,272,5,105,0,0,268,269,5,80,0,0,269,272,5,73, + 0,0,270,272,7,0,0,0,271,266,1,0,0,0,271,268,1,0,0,0,271,270,1,0, + 0,0,272,82,1,0,0,0,273,275,7,1,0,0,274,273,1,0,0,0,275,276,1,0,0, + 0,276,274,1,0,0,0,276,277,1,0,0,0,277,284,1,0,0,0,278,280,5,46,0, + 0,279,281,7,1,0,0,280,279,1,0,0,0,281,282,1,0,0,0,282,280,1,0,0, + 0,282,283,1,0,0,0,283,285,1,0,0,0,284,278,1,0,0,0,284,285,1,0,0, + 0,285,84,1,0,0,0,286,290,7,2,0,0,287,289,7,3,0,0,288,287,1,0,0,0, + 289,292,1,0,0,0,290,288,1,0,0,0,290,291,1,0,0,0,291,86,1,0,0,0,292, + 290,1,0,0,0,293,295,7,4,0,0,294,293,1,0,0,0,295,296,1,0,0,0,296, + 294,1,0,0,0,296,297,1,0,0,0,297,298,1,0,0,0,298,299,6,43,0,0,299, + 88,1,0,0,0,7,0,271,276,282,284,290,296,1,6,0,0 ] class MathExprLexer(Lexer): @@ -139,27 +144,29 @@ class MathExprLexer(Lexer): LN = 19 LOG = 20 EXP = 21 - MIN = 22 - MAX = 23 - TNORM = 24 - SNORM = 25 - FLOOR = 26 - CEIL = 27 - ROUND = 28 - GAMMA = 29 - POWE = 30 - SIGM = 31 - CLAMP = 32 - PLUS = 33 - MINUS = 34 - MULT = 35 - DIV = 36 - MOD = 37 - POW = 38 - CONSTANT = 39 - NUMBER = 40 - VARIABLE = 41 - WS = 42 + SMIN = 22 + SMAX = 23 + TMIN = 24 + TMAX = 25 + TNORM = 26 + SNORM = 27 + FLOOR = 28 + CEIL = 29 + ROUND = 30 + GAMMA = 31 + POWE = 32 + SIGM = 33 + CLAMP = 34 + PLUS = 35 + MINUS = 36 + MULT = 37 + DIV = 38 + MOD = 39 + POW = 40 + CONSTANT = 41 + NUMBER = 42 + VARIABLE = 43 + WS = 44 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -169,24 +176,25 @@ class MathExprLexer(Lexer): "'('", "')'", "','", "'sin'", "'cos'", "'tan'", "'asin'", "'acos'", "'atan'", "'atan2'", "'sinh'", "'cosh'", "'tanh'", "'asinh'", "'acosh'", "'atanh'", "'abs'", "'sqrt'", "'ln'", "'log'", "'exp'", - "'min'", "'max'", "'tnorm'", "'snorm'", "'floor'", "'ceil'", - "'round'", "'gamma'", "'pow'", "'sigmoid'", "'clamp'", "'+'", - "'-'", "'*'", "'/'", "'%'", "'^'" ] + "'smin'", "'smax'", "'tmin'", "'tmax'", "'tnorm'", "'snorm'", + "'floor'", "'ceil'", "'round'", "'gamma'", "'pow'", "'sigmoid'", + "'clamp'", "'+'", "'-'", "'*'", "'/'", "'%'", "'^'" ] symbolicNames = [ "", "SIN", "COS", "TAN", "ASIN", "ACOS", "ATAN", "ATAN2", "SINH", "COSH", "TANH", "ASINH", "ACOSH", "ATANH", "ABS", "SQRT", "LN", - "LOG", "EXP", "MIN", "MAX", "TNORM", "SNORM", "FLOOR", "CEIL", - "ROUND", "GAMMA", "POWE", "SIGM", "CLAMP", "PLUS", "MINUS", - "MULT", "DIV", "MOD", "POW", "CONSTANT", "NUMBER", "VARIABLE", - "WS" ] + "LOG", "EXP", "SMIN", "SMAX", "TMIN", "TMAX", "TNORM", "SNORM", + "FLOOR", "CEIL", "ROUND", "GAMMA", "POWE", "SIGM", "CLAMP", + "PLUS", "MINUS", "MULT", "DIV", "MOD", "POW", "CONSTANT", "NUMBER", + "VARIABLE", "WS" ] ruleNames = [ "T__0", "T__1", "T__2", "SIN", "COS", "TAN", "ASIN", "ACOS", "ATAN", "ATAN2", "SINH", "COSH", "TANH", "ASINH", "ACOSH", - "ATANH", "ABS", "SQRT", "LN", "LOG", "EXP", "MIN", "MAX", - "TNORM", "SNORM", "FLOOR", "CEIL", "ROUND", "GAMMA", "POWE", - "SIGM", "CLAMP", "PLUS", "MINUS", "MULT", "DIV", "MOD", - "POW", "CONSTANT", "NUMBER", "VARIABLE", "WS" ] + "ATANH", "ABS", "SQRT", "LN", "LOG", "EXP", "SMIN", "SMAX", + "TMIN", "TMAX", "TNORM", "SNORM", "FLOOR", "CEIL", "ROUND", + "GAMMA", "POWE", "SIGM", "CLAMP", "PLUS", "MINUS", "MULT", + "DIV", "MOD", "POW", "CONSTANT", "NUMBER", "VARIABLE", + "WS" ] grammarFileName = "MathExpr.g4" diff --git a/src/more_math/Parser/MathExprLexer.tokens b/src/more_math/Parser/MathExprLexer.tokens index 35d9a74..cc8ad59 100644 --- a/src/more_math/Parser/MathExprLexer.tokens +++ b/src/more_math/Parser/MathExprLexer.tokens @@ -19,27 +19,29 @@ SQRT=18 LN=19 LOG=20 EXP=21 -MIN=22 -MAX=23 -TNORM=24 -SNORM=25 -FLOOR=26 -CEIL=27 -ROUND=28 -GAMMA=29 -POWE=30 -SIGM=31 -CLAMP=32 -PLUS=33 -MINUS=34 -MULT=35 -DIV=36 -MOD=37 -POW=38 -CONSTANT=39 -NUMBER=40 -VARIABLE=41 -WS=42 +SMIN=22 +SMAX=23 +TMIN=24 +TMAX=25 +TNORM=26 +SNORM=27 +FLOOR=28 +CEIL=29 +ROUND=30 +GAMMA=31 +POWE=32 +SIGM=33 +CLAMP=34 +PLUS=35 +MINUS=36 +MULT=37 +DIV=38 +MOD=39 +POW=40 +CONSTANT=41 +NUMBER=42 +VARIABLE=43 +WS=44 '('=1 ')'=2 ','=3 @@ -61,20 +63,22 @@ WS=42 'ln'=19 'log'=20 'exp'=21 -'min'=22 -'max'=23 -'tnorm'=24 -'snorm'=25 -'floor'=26 -'ceil'=27 -'round'=28 -'gamma'=29 -'pow'=30 -'sigmoid'=31 -'clamp'=32 -'+'=33 -'-'=34 -'*'=35 -'/'=36 -'%'=37 -'^'=38 +'smin'=22 +'smax'=23 +'tmin'=24 +'tmax'=25 +'tnorm'=26 +'snorm'=27 +'floor'=28 +'ceil'=29 +'round'=30 +'gamma'=31 +'pow'=32 +'sigmoid'=33 +'clamp'=34 +'+'=35 +'-'=36 +'*'=37 +'/'=38 +'%'=39 +'^'=40 diff --git a/src/more_math/Parser/MathExprListener.py b/src/more_math/Parser/MathExprListener.py index 87b23c9..12fc966 100644 --- a/src/more_math/Parser/MathExprListener.py +++ b/src/more_math/Parser/MathExprListener.py @@ -431,6 +431,24 @@ class MathExprListener(ParseTreeListener): pass + # Enter a parse tree produced by MathExprParser#TMinFunc. + def enterTMinFunc(self, ctx:MathExprParser.TMinFuncContext): + pass + + # Exit a parse tree produced by MathExprParser#TMinFunc. + def exitTMinFunc(self, ctx:MathExprParser.TMinFuncContext): + pass + + + # Enter a parse tree produced by MathExprParser#TMaxFunc. + def enterTMaxFunc(self, ctx:MathExprParser.TMaxFuncContext): + pass + + # Exit a parse tree produced by MathExprParser#TMaxFunc. + def exitTMaxFunc(self, ctx:MathExprParser.TMaxFuncContext): + pass + + # Enter a parse tree produced by MathExprParser#ClampFunc. def enterClampFunc(self, ctx:MathExprParser.ClampFuncContext): pass @@ -440,21 +458,21 @@ class MathExprListener(ParseTreeListener): pass - # Enter a parse tree produced by MathExprParser#MinFunc. - def enterMinFunc(self, ctx:MathExprParser.MinFuncContext): + # Enter a parse tree produced by MathExprParser#SMinFunc. + def enterSMinFunc(self, ctx:MathExprParser.SMinFuncContext): pass - # Exit a parse tree produced by MathExprParser#MinFunc. - def exitMinFunc(self, ctx:MathExprParser.MinFuncContext): + # Exit a parse tree produced by MathExprParser#SMinFunc. + def exitSMinFunc(self, ctx:MathExprParser.SMinFuncContext): pass - # Enter a parse tree produced by MathExprParser#MaxFunc. - def enterMaxFunc(self, ctx:MathExprParser.MaxFuncContext): + # Enter a parse tree produced by MathExprParser#SMaxFunc. + def enterSMaxFunc(self, ctx:MathExprParser.SMaxFuncContext): pass - # Exit a parse tree produced by MathExprParser#MaxFunc. - def exitMaxFunc(self, ctx:MathExprParser.MaxFuncContext): + # Exit a parse tree produced by MathExprParser#SMaxFunc. + def exitSMaxFunc(self, ctx:MathExprParser.SMaxFuncContext): pass diff --git a/src/more_math/Parser/MathExprParser.py b/src/more_math/Parser/MathExprParser.py index 4f742d5..ea462f3 100644 --- a/src/more_math/Parser/MathExprParser.py +++ b/src/more_math/Parser/MathExprParser.py @@ -10,7 +10,7 @@ else: def serializedATN(): return [ - 4,1,42,254,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, + 4,1,44,268,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, 6,2,7,7,7,2,8,7,8,2,9,7,9,1,0,1,0,3,0,23,8,0,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,5,1,34,8,1,10,1,12,1,37,9,1,1,2,1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,2,51,8,2,10,2,12,2,54,9,2,1,3,1,3, @@ -24,79 +24,84 @@ def serializedATN(): 1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6, 1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6, 1,6,1,6,1,6,3,6,203,8,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, - 1,7,1,7,1,7,1,7,3,7,219,8,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, - 1,9,1,9,1,9,1,9,1,9,4,9,235,8,9,11,9,12,9,236,1,9,1,9,1,9,1,9,1, - 9,1,9,1,9,4,9,246,8,9,11,9,12,9,247,1,9,1,9,3,9,252,8,9,1,9,0,2, - 2,4,10,0,2,4,6,8,10,12,14,16,18,0,0,286,0,22,1,0,0,0,2,24,1,0,0, - 0,4,38,1,0,0,0,6,60,1,0,0,0,8,67,1,0,0,0,10,80,1,0,0,0,12,202,1, - 0,0,0,14,218,1,0,0,0,16,220,1,0,0,0,18,251,1,0,0,0,20,23,3,10,5, - 0,21,23,3,2,1,0,22,20,1,0,0,0,22,21,1,0,0,0,23,1,1,0,0,0,24,25,6, - 1,-1,0,25,26,3,4,2,0,26,35,1,0,0,0,27,28,10,3,0,0,28,29,5,33,0,0, - 29,34,3,4,2,0,30,31,10,2,0,0,31,32,5,34,0,0,32,34,3,4,2,0,33,27, - 1,0,0,0,33,30,1,0,0,0,34,37,1,0,0,0,35,33,1,0,0,0,35,36,1,0,0,0, - 36,3,1,0,0,0,37,35,1,0,0,0,38,39,6,2,-1,0,39,40,3,6,3,0,40,52,1, - 0,0,0,41,42,10,4,0,0,42,43,5,35,0,0,43,51,3,6,3,0,44,45,10,3,0,0, - 45,46,5,36,0,0,46,51,3,6,3,0,47,48,10,2,0,0,48,49,5,37,0,0,49,51, - 3,6,3,0,50,41,1,0,0,0,50,44,1,0,0,0,50,47,1,0,0,0,51,54,1,0,0,0, - 52,50,1,0,0,0,52,53,1,0,0,0,53,5,1,0,0,0,54,52,1,0,0,0,55,56,3,8, - 4,0,56,57,5,38,0,0,57,58,3,6,3,0,58,61,1,0,0,0,59,61,3,8,4,0,60, - 55,1,0,0,0,60,59,1,0,0,0,61,7,1,0,0,0,62,63,5,33,0,0,63,68,3,8,4, - 0,64,65,5,34,0,0,65,68,3,8,4,0,66,68,3,10,5,0,67,62,1,0,0,0,67,64, - 1,0,0,0,67,66,1,0,0,0,68,9,1,0,0,0,69,81,3,12,6,0,70,81,3,14,7,0, - 71,81,3,16,8,0,72,81,3,18,9,0,73,81,5,41,0,0,74,81,5,40,0,0,75,81, - 5,39,0,0,76,77,5,1,0,0,77,78,3,0,0,0,78,79,5,2,0,0,79,81,1,0,0,0, - 80,69,1,0,0,0,80,70,1,0,0,0,80,71,1,0,0,0,80,72,1,0,0,0,80,73,1, - 0,0,0,80,74,1,0,0,0,80,75,1,0,0,0,80,76,1,0,0,0,81,11,1,0,0,0,82, - 83,5,4,0,0,83,84,5,1,0,0,84,85,3,0,0,0,85,86,5,2,0,0,86,203,1,0, - 0,0,87,88,5,5,0,0,88,89,5,1,0,0,89,90,3,0,0,0,90,91,5,2,0,0,91,203, - 1,0,0,0,92,93,5,6,0,0,93,94,5,1,0,0,94,95,3,0,0,0,95,96,5,2,0,0, - 96,203,1,0,0,0,97,98,5,7,0,0,98,99,5,1,0,0,99,100,3,0,0,0,100,101, - 5,2,0,0,101,203,1,0,0,0,102,103,5,8,0,0,103,104,5,1,0,0,104,105, - 3,0,0,0,105,106,5,2,0,0,106,203,1,0,0,0,107,108,5,9,0,0,108,109, - 5,1,0,0,109,110,3,0,0,0,110,111,5,2,0,0,111,203,1,0,0,0,112,113, - 5,11,0,0,113,114,5,1,0,0,114,115,3,0,0,0,115,116,5,2,0,0,116,203, - 1,0,0,0,117,118,5,12,0,0,118,119,5,1,0,0,119,120,3,0,0,0,120,121, - 5,2,0,0,121,203,1,0,0,0,122,123,5,13,0,0,123,124,5,1,0,0,124,125, - 3,0,0,0,125,126,5,2,0,0,126,203,1,0,0,0,127,128,5,14,0,0,128,129, - 5,1,0,0,129,130,3,0,0,0,130,131,5,2,0,0,131,203,1,0,0,0,132,133, - 5,15,0,0,133,134,5,1,0,0,134,135,3,0,0,0,135,136,5,2,0,0,136,203, - 1,0,0,0,137,138,5,16,0,0,138,139,5,1,0,0,139,140,3,0,0,0,140,141, - 5,2,0,0,141,203,1,0,0,0,142,143,5,17,0,0,143,144,5,1,0,0,144,145, - 3,0,0,0,145,146,5,2,0,0,146,203,1,0,0,0,147,148,5,18,0,0,148,149, - 5,1,0,0,149,150,3,0,0,0,150,151,5,2,0,0,151,203,1,0,0,0,152,153, - 5,19,0,0,153,154,5,1,0,0,154,155,3,0,0,0,155,156,5,2,0,0,156,203, - 1,0,0,0,157,158,5,20,0,0,158,159,5,1,0,0,159,160,3,0,0,0,160,161, - 5,2,0,0,161,203,1,0,0,0,162,163,5,21,0,0,163,164,5,1,0,0,164,165, - 3,0,0,0,165,166,5,2,0,0,166,203,1,0,0,0,167,168,5,24,0,0,168,169, - 5,1,0,0,169,170,3,0,0,0,170,171,5,2,0,0,171,203,1,0,0,0,172,173, - 5,25,0,0,173,174,5,1,0,0,174,175,3,0,0,0,175,176,5,2,0,0,176,203, - 1,0,0,0,177,178,5,26,0,0,178,179,5,1,0,0,179,180,3,0,0,0,180,181, - 5,2,0,0,181,203,1,0,0,0,182,183,5,27,0,0,183,184,5,1,0,0,184,185, - 3,0,0,0,185,186,5,2,0,0,186,203,1,0,0,0,187,188,5,28,0,0,188,189, - 5,1,0,0,189,190,3,0,0,0,190,191,5,2,0,0,191,203,1,0,0,0,192,193, - 5,29,0,0,193,194,5,1,0,0,194,195,3,0,0,0,195,196,5,2,0,0,196,203, - 1,0,0,0,197,198,5,31,0,0,198,199,5,1,0,0,199,200,3,0,0,0,200,201, - 5,2,0,0,201,203,1,0,0,0,202,82,1,0,0,0,202,87,1,0,0,0,202,92,1,0, - 0,0,202,97,1,0,0,0,202,102,1,0,0,0,202,107,1,0,0,0,202,112,1,0,0, - 0,202,117,1,0,0,0,202,122,1,0,0,0,202,127,1,0,0,0,202,132,1,0,0, - 0,202,137,1,0,0,0,202,142,1,0,0,0,202,147,1,0,0,0,202,152,1,0,0, - 0,202,157,1,0,0,0,202,162,1,0,0,0,202,167,1,0,0,0,202,172,1,0,0, - 0,202,177,1,0,0,0,202,182,1,0,0,0,202,187,1,0,0,0,202,192,1,0,0, - 0,202,197,1,0,0,0,203,13,1,0,0,0,204,205,5,30,0,0,205,206,5,1,0, - 0,206,207,3,0,0,0,207,208,5,3,0,0,208,209,3,0,0,0,209,210,5,2,0, - 0,210,219,1,0,0,0,211,212,5,10,0,0,212,213,5,1,0,0,213,214,3,0,0, - 0,214,215,5,3,0,0,215,216,3,0,0,0,216,217,5,2,0,0,217,219,1,0,0, - 0,218,204,1,0,0,0,218,211,1,0,0,0,219,15,1,0,0,0,220,221,5,32,0, - 0,221,222,5,1,0,0,222,223,3,0,0,0,223,224,5,3,0,0,224,225,3,0,0, - 0,225,226,5,3,0,0,226,227,3,0,0,0,227,228,5,2,0,0,228,17,1,0,0,0, - 229,230,5,22,0,0,230,231,5,1,0,0,231,234,3,0,0,0,232,233,5,3,0,0, - 233,235,3,0,0,0,234,232,1,0,0,0,235,236,1,0,0,0,236,234,1,0,0,0, - 236,237,1,0,0,0,237,238,1,0,0,0,238,239,5,2,0,0,239,252,1,0,0,0, - 240,241,5,23,0,0,241,242,5,1,0,0,242,245,3,0,0,0,243,244,5,3,0,0, - 244,246,3,0,0,0,245,243,1,0,0,0,246,247,1,0,0,0,247,245,1,0,0,0, - 247,248,1,0,0,0,248,249,1,0,0,0,249,250,5,2,0,0,250,252,1,0,0,0, - 251,229,1,0,0,0,251,240,1,0,0,0,252,19,1,0,0,0,13,22,33,35,50,52, - 60,67,80,202,218,236,247,251 + 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,7, + 1,7,1,7,3,7,233,8,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9, + 1,9,1,9,1,9,4,9,249,8,9,11,9,12,9,250,1,9,1,9,1,9,1,9,1,9,1,9,1, + 9,4,9,260,8,9,11,9,12,9,261,1,9,1,9,3,9,266,8,9,1,9,0,2,2,4,10,0, + 2,4,6,8,10,12,14,16,18,0,0,302,0,22,1,0,0,0,2,24,1,0,0,0,4,38,1, + 0,0,0,6,60,1,0,0,0,8,67,1,0,0,0,10,80,1,0,0,0,12,202,1,0,0,0,14, + 232,1,0,0,0,16,234,1,0,0,0,18,265,1,0,0,0,20,23,3,10,5,0,21,23,3, + 2,1,0,22,20,1,0,0,0,22,21,1,0,0,0,23,1,1,0,0,0,24,25,6,1,-1,0,25, + 26,3,4,2,0,26,35,1,0,0,0,27,28,10,3,0,0,28,29,5,35,0,0,29,34,3,4, + 2,0,30,31,10,2,0,0,31,32,5,36,0,0,32,34,3,4,2,0,33,27,1,0,0,0,33, + 30,1,0,0,0,34,37,1,0,0,0,35,33,1,0,0,0,35,36,1,0,0,0,36,3,1,0,0, + 0,37,35,1,0,0,0,38,39,6,2,-1,0,39,40,3,6,3,0,40,52,1,0,0,0,41,42, + 10,4,0,0,42,43,5,37,0,0,43,51,3,6,3,0,44,45,10,3,0,0,45,46,5,38, + 0,0,46,51,3,6,3,0,47,48,10,2,0,0,48,49,5,39,0,0,49,51,3,6,3,0,50, + 41,1,0,0,0,50,44,1,0,0,0,50,47,1,0,0,0,51,54,1,0,0,0,52,50,1,0,0, + 0,52,53,1,0,0,0,53,5,1,0,0,0,54,52,1,0,0,0,55,56,3,8,4,0,56,57,5, + 40,0,0,57,58,3,6,3,0,58,61,1,0,0,0,59,61,3,8,4,0,60,55,1,0,0,0,60, + 59,1,0,0,0,61,7,1,0,0,0,62,63,5,35,0,0,63,68,3,8,4,0,64,65,5,36, + 0,0,65,68,3,8,4,0,66,68,3,10,5,0,67,62,1,0,0,0,67,64,1,0,0,0,67, + 66,1,0,0,0,68,9,1,0,0,0,69,81,3,12,6,0,70,81,3,14,7,0,71,81,3,16, + 8,0,72,81,3,18,9,0,73,81,5,43,0,0,74,81,5,42,0,0,75,81,5,41,0,0, + 76,77,5,1,0,0,77,78,3,0,0,0,78,79,5,2,0,0,79,81,1,0,0,0,80,69,1, + 0,0,0,80,70,1,0,0,0,80,71,1,0,0,0,80,72,1,0,0,0,80,73,1,0,0,0,80, + 74,1,0,0,0,80,75,1,0,0,0,80,76,1,0,0,0,81,11,1,0,0,0,82,83,5,4,0, + 0,83,84,5,1,0,0,84,85,3,0,0,0,85,86,5,2,0,0,86,203,1,0,0,0,87,88, + 5,5,0,0,88,89,5,1,0,0,89,90,3,0,0,0,90,91,5,2,0,0,91,203,1,0,0,0, + 92,93,5,6,0,0,93,94,5,1,0,0,94,95,3,0,0,0,95,96,5,2,0,0,96,203,1, + 0,0,0,97,98,5,7,0,0,98,99,5,1,0,0,99,100,3,0,0,0,100,101,5,2,0,0, + 101,203,1,0,0,0,102,103,5,8,0,0,103,104,5,1,0,0,104,105,3,0,0,0, + 105,106,5,2,0,0,106,203,1,0,0,0,107,108,5,9,0,0,108,109,5,1,0,0, + 109,110,3,0,0,0,110,111,5,2,0,0,111,203,1,0,0,0,112,113,5,11,0,0, + 113,114,5,1,0,0,114,115,3,0,0,0,115,116,5,2,0,0,116,203,1,0,0,0, + 117,118,5,12,0,0,118,119,5,1,0,0,119,120,3,0,0,0,120,121,5,2,0,0, + 121,203,1,0,0,0,122,123,5,13,0,0,123,124,5,1,0,0,124,125,3,0,0,0, + 125,126,5,2,0,0,126,203,1,0,0,0,127,128,5,14,0,0,128,129,5,1,0,0, + 129,130,3,0,0,0,130,131,5,2,0,0,131,203,1,0,0,0,132,133,5,15,0,0, + 133,134,5,1,0,0,134,135,3,0,0,0,135,136,5,2,0,0,136,203,1,0,0,0, + 137,138,5,16,0,0,138,139,5,1,0,0,139,140,3,0,0,0,140,141,5,2,0,0, + 141,203,1,0,0,0,142,143,5,17,0,0,143,144,5,1,0,0,144,145,3,0,0,0, + 145,146,5,2,0,0,146,203,1,0,0,0,147,148,5,18,0,0,148,149,5,1,0,0, + 149,150,3,0,0,0,150,151,5,2,0,0,151,203,1,0,0,0,152,153,5,19,0,0, + 153,154,5,1,0,0,154,155,3,0,0,0,155,156,5,2,0,0,156,203,1,0,0,0, + 157,158,5,20,0,0,158,159,5,1,0,0,159,160,3,0,0,0,160,161,5,2,0,0, + 161,203,1,0,0,0,162,163,5,21,0,0,163,164,5,1,0,0,164,165,3,0,0,0, + 165,166,5,2,0,0,166,203,1,0,0,0,167,168,5,26,0,0,168,169,5,1,0,0, + 169,170,3,0,0,0,170,171,5,2,0,0,171,203,1,0,0,0,172,173,5,27,0,0, + 173,174,5,1,0,0,174,175,3,0,0,0,175,176,5,2,0,0,176,203,1,0,0,0, + 177,178,5,28,0,0,178,179,5,1,0,0,179,180,3,0,0,0,180,181,5,2,0,0, + 181,203,1,0,0,0,182,183,5,29,0,0,183,184,5,1,0,0,184,185,3,0,0,0, + 185,186,5,2,0,0,186,203,1,0,0,0,187,188,5,30,0,0,188,189,5,1,0,0, + 189,190,3,0,0,0,190,191,5,2,0,0,191,203,1,0,0,0,192,193,5,31,0,0, + 193,194,5,1,0,0,194,195,3,0,0,0,195,196,5,2,0,0,196,203,1,0,0,0, + 197,198,5,33,0,0,198,199,5,1,0,0,199,200,3,0,0,0,200,201,5,2,0,0, + 201,203,1,0,0,0,202,82,1,0,0,0,202,87,1,0,0,0,202,92,1,0,0,0,202, + 97,1,0,0,0,202,102,1,0,0,0,202,107,1,0,0,0,202,112,1,0,0,0,202,117, + 1,0,0,0,202,122,1,0,0,0,202,127,1,0,0,0,202,132,1,0,0,0,202,137, + 1,0,0,0,202,142,1,0,0,0,202,147,1,0,0,0,202,152,1,0,0,0,202,157, + 1,0,0,0,202,162,1,0,0,0,202,167,1,0,0,0,202,172,1,0,0,0,202,177, + 1,0,0,0,202,182,1,0,0,0,202,187,1,0,0,0,202,192,1,0,0,0,202,197, + 1,0,0,0,203,13,1,0,0,0,204,205,5,32,0,0,205,206,5,1,0,0,206,207, + 3,0,0,0,207,208,5,3,0,0,208,209,3,0,0,0,209,210,5,2,0,0,210,233, + 1,0,0,0,211,212,5,10,0,0,212,213,5,1,0,0,213,214,3,0,0,0,214,215, + 5,3,0,0,215,216,3,0,0,0,216,217,5,2,0,0,217,233,1,0,0,0,218,219, + 5,24,0,0,219,220,5,1,0,0,220,221,3,0,0,0,221,222,5,3,0,0,222,223, + 3,0,0,0,223,224,5,2,0,0,224,233,1,0,0,0,225,226,5,25,0,0,226,227, + 5,1,0,0,227,228,3,0,0,0,228,229,5,3,0,0,229,230,3,0,0,0,230,231, + 5,2,0,0,231,233,1,0,0,0,232,204,1,0,0,0,232,211,1,0,0,0,232,218, + 1,0,0,0,232,225,1,0,0,0,233,15,1,0,0,0,234,235,5,34,0,0,235,236, + 5,1,0,0,236,237,3,0,0,0,237,238,5,3,0,0,238,239,3,0,0,0,239,240, + 5,3,0,0,240,241,3,0,0,0,241,242,5,2,0,0,242,17,1,0,0,0,243,244,5, + 22,0,0,244,245,5,1,0,0,245,248,3,0,0,0,246,247,5,3,0,0,247,249,3, + 0,0,0,248,246,1,0,0,0,249,250,1,0,0,0,250,248,1,0,0,0,250,251,1, + 0,0,0,251,252,1,0,0,0,252,253,5,2,0,0,253,266,1,0,0,0,254,255,5, + 23,0,0,255,256,5,1,0,0,256,259,3,0,0,0,257,258,5,3,0,0,258,260,3, + 0,0,0,259,257,1,0,0,0,260,261,1,0,0,0,261,259,1,0,0,0,261,262,1, + 0,0,0,262,263,1,0,0,0,263,264,5,2,0,0,264,266,1,0,0,0,265,243,1, + 0,0,0,265,254,1,0,0,0,266,19,1,0,0,0,13,22,33,35,50,52,60,67,80, + 202,232,250,261,265 ] class MathExprParser ( Parser ): @@ -112,18 +117,20 @@ class MathExprParser ( Parser ): literalNames = [ "", "'('", "')'", "','", "'sin'", "'cos'", "'tan'", "'asin'", "'acos'", "'atan'", "'atan2'", "'sinh'", "'cosh'", "'tanh'", "'asinh'", "'acosh'", "'atanh'", - "'abs'", "'sqrt'", "'ln'", "'log'", "'exp'", "'min'", - "'max'", "'tnorm'", "'snorm'", "'floor'", "'ceil'", - "'round'", "'gamma'", "'pow'", "'sigmoid'", "'clamp'", - "'+'", "'-'", "'*'", "'/'", "'%'", "'^'" ] + "'abs'", "'sqrt'", "'ln'", "'log'", "'exp'", "'smin'", + "'smax'", "'tmin'", "'tmax'", "'tnorm'", "'snorm'", + "'floor'", "'ceil'", "'round'", "'gamma'", "'pow'", + "'sigmoid'", "'clamp'", "'+'", "'-'", "'*'", "'/'", + "'%'", "'^'" ] symbolicNames = [ "", "", "", "", "SIN", "COS", "TAN", "ASIN", "ACOS", "ATAN", "ATAN2", "SINH", "COSH", "TANH", "ASINH", "ACOSH", "ATANH", - "ABS", "SQRT", "LN", "LOG", "EXP", "MIN", "MAX", "TNORM", - "SNORM", "FLOOR", "CEIL", "ROUND", "GAMMA", "POWE", - "SIGM", "CLAMP", "PLUS", "MINUS", "MULT", "DIV", "MOD", - "POW", "CONSTANT", "NUMBER", "VARIABLE", "WS" ] + "ABS", "SQRT", "LN", "LOG", "EXP", "SMIN", "SMAX", + "TMIN", "TMAX", "TNORM", "SNORM", "FLOOR", "CEIL", + "ROUND", "GAMMA", "POWE", "SIGM", "CLAMP", "PLUS", + "MINUS", "MULT", "DIV", "MOD", "POW", "CONSTANT", + "NUMBER", "VARIABLE", "WS" ] RULE_expr = 0 RULE_addExpr = 1 @@ -161,27 +168,29 @@ class MathExprParser ( Parser ): LN=19 LOG=20 EXP=21 - MIN=22 - MAX=23 - TNORM=24 - SNORM=25 - FLOOR=26 - CEIL=27 - ROUND=28 - GAMMA=29 - POWE=30 - SIGM=31 - CLAMP=32 - PLUS=33 - MINUS=34 - MULT=35 - DIV=36 - MOD=37 - POW=38 - CONSTANT=39 - NUMBER=40 - VARIABLE=41 - WS=42 + SMIN=22 + SMAX=23 + TMIN=24 + TMAX=25 + TNORM=26 + SNORM=27 + FLOOR=28 + CEIL=29 + ROUND=30 + GAMMA=31 + POWE=32 + SIGM=33 + CLAMP=34 + PLUS=35 + MINUS=36 + MULT=37 + DIV=38 + MOD=39 + POW=40 + CONSTANT=41 + NUMBER=42 + VARIABLE=43 + WS=44 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -852,7 +861,7 @@ class MathExprParser ( Parser ): self.state = 67 self._errHandler.sync(self) token = self._input.LA(1) - if token in [33]: + if token in [35]: localctx = MathExprParser.UnaryPlusContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 62 @@ -860,7 +869,7 @@ class MathExprParser ( Parser ): self.state = 63 self.unaryExpr() pass - elif token in [34]: + elif token in [36]: localctx = MathExprParser.UnaryMinusContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 64 @@ -868,7 +877,7 @@ class MathExprParser ( Parser ): self.state = 65 self.unaryExpr() pass - elif token in [1, 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, 39, 40, 41]: + elif token in [1, 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, 41, 42, 43]: localctx = MathExprParser.ToAtomContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 66 @@ -1109,19 +1118,19 @@ class MathExprParser ( Parser ): self.state = 80 self._errHandler.sync(self) token = self._input.LA(1) - if token in [4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 31]: + if token in [4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30, 31, 33]: localctx = MathExprParser.Func1ExpContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 69 self.func1() pass - elif token in [10, 30]: + elif token in [10, 24, 25, 32]: localctx = MathExprParser.Func2ExpContext(self, localctx) self.enterOuterAlt(localctx, 2) self.state = 70 self.func2() pass - elif token in [32]: + elif token in [34]: localctx = MathExprParser.Func3ExpContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 71 @@ -1133,19 +1142,19 @@ class MathExprParser ( Parser ): self.state = 72 self.funcN() pass - elif token in [41]: + elif token in [43]: localctx = MathExprParser.VariableExpContext(self, localctx) self.enterOuterAlt(localctx, 5) self.state = 73 self.match(MathExprParser.VARIABLE) pass - elif token in [40]: + elif token in [42]: localctx = MathExprParser.NumberExpContext(self, localctx) self.enterOuterAlt(localctx, 6) self.state = 74 self.match(MathExprParser.NUMBER) pass - elif token in [39]: + elif token in [41]: localctx = MathExprParser.ConstantExpContext(self, localctx) self.enterOuterAlt(localctx, 7) self.state = 75 @@ -2051,7 +2060,7 @@ class MathExprParser ( Parser ): self.state = 165 self.match(MathExprParser.T__1) pass - elif token in [24]: + elif token in [26]: localctx = MathExprParser.TNormFuncContext(self, localctx) self.enterOuterAlt(localctx, 18) self.state = 167 @@ -2063,7 +2072,7 @@ class MathExprParser ( Parser ): self.state = 170 self.match(MathExprParser.T__1) pass - elif token in [25]: + elif token in [27]: localctx = MathExprParser.SNormFuncContext(self, localctx) self.enterOuterAlt(localctx, 19) self.state = 172 @@ -2075,7 +2084,7 @@ class MathExprParser ( Parser ): self.state = 175 self.match(MathExprParser.T__1) pass - elif token in [26]: + elif token in [28]: localctx = MathExprParser.FloorFuncContext(self, localctx) self.enterOuterAlt(localctx, 20) self.state = 177 @@ -2087,7 +2096,7 @@ class MathExprParser ( Parser ): self.state = 180 self.match(MathExprParser.T__1) pass - elif token in [27]: + elif token in [29]: localctx = MathExprParser.CeilFuncContext(self, localctx) self.enterOuterAlt(localctx, 21) self.state = 182 @@ -2099,7 +2108,7 @@ class MathExprParser ( Parser ): self.state = 185 self.match(MathExprParser.T__1) pass - elif token in [28]: + elif token in [30]: localctx = MathExprParser.RoundFuncContext(self, localctx) self.enterOuterAlt(localctx, 22) self.state = 187 @@ -2111,7 +2120,7 @@ class MathExprParser ( Parser ): self.state = 190 self.match(MathExprParser.T__1) pass - elif token in [29]: + elif token in [31]: localctx = MathExprParser.GammaFuncContext(self, localctx) self.enterOuterAlt(localctx, 23) self.state = 192 @@ -2123,7 +2132,7 @@ class MathExprParser ( Parser ): self.state = 195 self.match(MathExprParser.T__1) pass - elif token in [31]: + elif token in [33]: localctx = MathExprParser.SigmoidFuncContext(self, localctx) self.enterOuterAlt(localctx, 24) self.state = 197 @@ -2164,6 +2173,36 @@ class MathExprParser ( Parser ): + class TMaxFuncContext(Func2Context): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context + super().__init__(parser) + self.copyFrom(ctx) + + def TMAX(self): + return self.getToken(MathExprParser.TMAX, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MathExprParser.ExprContext) + else: + return self.getTypedRuleContext(MathExprParser.ExprContext,i) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTMaxFunc" ): + listener.enterTMaxFunc(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTMaxFunc" ): + listener.exitTMaxFunc(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTMaxFunc" ): + return visitor.visitTMaxFunc(self) + else: + return visitor.visitChildren(self) + + class PowFuncContext(Func2Context): def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context @@ -2224,16 +2263,46 @@ class MathExprParser ( Parser ): return visitor.visitChildren(self) + class TMinFuncContext(Func2Context): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.Func2Context + super().__init__(parser) + self.copyFrom(ctx) + + def TMIN(self): + return self.getToken(MathExprParser.TMIN, 0) + def expr(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(MathExprParser.ExprContext) + else: + return self.getTypedRuleContext(MathExprParser.ExprContext,i) + + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterTMinFunc" ): + listener.enterTMinFunc(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitTMinFunc" ): + listener.exitTMinFunc(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTMinFunc" ): + return visitor.visitTMinFunc(self) + else: + return visitor.visitChildren(self) + + def func2(self): localctx = MathExprParser.Func2Context(self, self._ctx, self.state) self.enterRule(localctx, 14, self.RULE_func2) try: - self.state = 218 + self.state = 232 self._errHandler.sync(self) token = self._input.LA(1) - if token in [30]: + if token in [32]: localctx = MathExprParser.PowFuncContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 204 @@ -2265,6 +2334,38 @@ class MathExprParser ( Parser ): self.state = 216 self.match(MathExprParser.T__1) pass + elif token in [24]: + localctx = MathExprParser.TMinFuncContext(self, localctx) + self.enterOuterAlt(localctx, 3) + self.state = 218 + self.match(MathExprParser.TMIN) + self.state = 219 + self.match(MathExprParser.T__0) + self.state = 220 + self.expr() + self.state = 221 + self.match(MathExprParser.T__2) + self.state = 222 + self.expr() + self.state = 223 + self.match(MathExprParser.T__1) + pass + elif token in [25]: + localctx = MathExprParser.TMaxFuncContext(self, localctx) + self.enterOuterAlt(localctx, 4) + self.state = 225 + self.match(MathExprParser.TMAX) + self.state = 226 + self.match(MathExprParser.T__0) + self.state = 227 + self.expr() + self.state = 228 + self.match(MathExprParser.T__2) + self.state = 229 + self.expr() + self.state = 230 + self.match(MathExprParser.T__1) + pass else: raise NoViableAltException(self) @@ -2332,21 +2433,21 @@ class MathExprParser ( Parser ): try: localctx = MathExprParser.ClampFuncContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 220 + self.state = 234 self.match(MathExprParser.CLAMP) - self.state = 221 + self.state = 235 self.match(MathExprParser.T__0) - self.state = 222 + self.state = 236 self.expr() - self.state = 223 + self.state = 237 self.match(MathExprParser.T__2) - self.state = 224 + self.state = 238 self.expr() - self.state = 225 + self.state = 239 self.match(MathExprParser.T__2) - self.state = 226 + self.state = 240 self.expr() - self.state = 227 + self.state = 241 self.match(MathExprParser.T__1) except RecognitionException as re: localctx.exception = re @@ -2374,14 +2475,14 @@ class MathExprParser ( Parser ): - class MinFuncContext(FuncNContext): + class SMaxFuncContext(FuncNContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext super().__init__(parser) self.copyFrom(ctx) - def MIN(self): - return self.getToken(MathExprParser.MIN, 0) + def SMAX(self): + return self.getToken(MathExprParser.SMAX, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(MathExprParser.ExprContext) @@ -2390,28 +2491,28 @@ class MathExprParser ( Parser ): def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMinFunc" ): - listener.enterMinFunc(self) + if hasattr( listener, "enterSMaxFunc" ): + listener.enterSMaxFunc(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMinFunc" ): - listener.exitMinFunc(self) + if hasattr( listener, "exitSMaxFunc" ): + listener.exitSMaxFunc(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMinFunc" ): - return visitor.visitMinFunc(self) + if hasattr( visitor, "visitSMaxFunc" ): + return visitor.visitSMaxFunc(self) else: return visitor.visitChildren(self) - class MaxFuncContext(FuncNContext): + class SMinFuncContext(FuncNContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a MathExprParser.FuncNContext super().__init__(parser) self.copyFrom(ctx) - def MAX(self): - return self.getToken(MathExprParser.MAX, 0) + def SMIN(self): + return self.getToken(MathExprParser.SMIN, 0) def expr(self, i:int=None): if i is None: return self.getTypedRuleContexts(MathExprParser.ExprContext) @@ -2420,16 +2521,16 @@ class MathExprParser ( Parser ): def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterMaxFunc" ): - listener.enterMaxFunc(self) + if hasattr( listener, "enterSMinFunc" ): + listener.enterSMinFunc(self) def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitMaxFunc" ): - listener.exitMaxFunc(self) + if hasattr( listener, "exitSMinFunc" ): + listener.exitSMinFunc(self) def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitMaxFunc" ): - return visitor.visitMaxFunc(self) + if hasattr( visitor, "visitSMinFunc" ): + return visitor.visitSMinFunc(self) else: return visitor.visitChildren(self) @@ -2441,59 +2542,59 @@ class MathExprParser ( Parser ): self.enterRule(localctx, 18, self.RULE_funcN) self._la = 0 # Token type try: - self.state = 251 + self.state = 265 self._errHandler.sync(self) token = self._input.LA(1) if token in [22]: - localctx = MathExprParser.MinFuncContext(self, localctx) + localctx = MathExprParser.SMinFuncContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 229 - self.match(MathExprParser.MIN) - self.state = 230 + self.state = 243 + self.match(MathExprParser.SMIN) + self.state = 244 self.match(MathExprParser.T__0) - self.state = 231 + self.state = 245 self.expr() - self.state = 234 + self.state = 248 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 232 + self.state = 246 self.match(MathExprParser.T__2) - self.state = 233 + self.state = 247 self.expr() - self.state = 236 + self.state = 250 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==3): break - self.state = 238 + self.state = 252 self.match(MathExprParser.T__1) pass elif token in [23]: - localctx = MathExprParser.MaxFuncContext(self, localctx) + localctx = MathExprParser.SMaxFuncContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 240 - self.match(MathExprParser.MAX) - self.state = 241 + self.state = 254 + self.match(MathExprParser.SMAX) + self.state = 255 self.match(MathExprParser.T__0) - self.state = 242 + self.state = 256 self.expr() - self.state = 245 + self.state = 259 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 243 + self.state = 257 self.match(MathExprParser.T__2) - self.state = 244 + self.state = 258 self.expr() - self.state = 247 + self.state = 261 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==3): break - self.state = 249 + self.state = 263 self.match(MathExprParser.T__1) pass else: diff --git a/src/more_math/Parser/MathExprVisitor.py b/src/more_math/Parser/MathExprVisitor.py index b3c3e2b..04ce264 100644 --- a/src/more_math/Parser/MathExprVisitor.py +++ b/src/more_math/Parser/MathExprVisitor.py @@ -244,18 +244,28 @@ class MathExprVisitor(ParseTreeVisitor): return self.visitChildren(ctx) + # Visit a parse tree produced by MathExprParser#TMinFunc. + def visitTMinFunc(self, ctx:MathExprParser.TMinFuncContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by MathExprParser#TMaxFunc. + def visitTMaxFunc(self, ctx:MathExprParser.TMaxFuncContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by MathExprParser#ClampFunc. def visitClampFunc(self, ctx:MathExprParser.ClampFuncContext): return self.visitChildren(ctx) - # Visit a parse tree produced by MathExprParser#MinFunc. - def visitMinFunc(self, ctx:MathExprParser.MinFuncContext): + # Visit a parse tree produced by MathExprParser#SMinFunc. + def visitSMinFunc(self, ctx:MathExprParser.SMinFuncContext): return self.visitChildren(ctx) - # Visit a parse tree produced by MathExprParser#MaxFunc. - def visitMaxFunc(self, ctx:MathExprParser.MaxFuncContext): + # Visit a parse tree produced by MathExprParser#SMaxFunc. + def visitSMaxFunc(self, ctx:MathExprParser.SMaxFuncContext): return self.visitChildren(ctx) diff --git a/src/more_math/Parser/TensorEvalVisitor.py b/src/more_math/Parser/TensorEvalVisitor.py index 1ff86dc..fa68f8f 100644 --- a/src/more_math/Parser/TensorEvalVisitor.py +++ b/src/more_math/Parser/TensorEvalVisitor.py @@ -122,12 +122,18 @@ class TensorEvalVisitor(MathExprVisitor): return torch.atan2(self.visit(ctx.expr(0)), self.visit(ctx.expr(1))) # N-argument functions - def visitMinFunc(self, ctx): + def visitSMinFunc(self, ctx): args = [self.visit(e) for e in ctx.expr()] - return torch.min(torch.stack(args)) - def visitMaxFunc(self, ctx): - args = [self.visit(e) for e in ctx.expr()] - return torch.max(torch.stack(args)) + return torch.full(self.shape,torch.min(torch.stack(args))) + def visitSMaxFunc(self, ctx): + args = [torch.reshape(self.visit(e),self.shape) for e in ctx.expr()] + return torch.full(self.shape,torch.max(torch.stack(args))) + + def visitTMinFunc(self, ctx): + print("Visiting TMin function with args:", [a.getText() for a in ctx.expr()]) + return torch.minimum(self.visit(ctx.expr(0)),self.visit(ctx.expr(1))) + def visitTMaxFunc(self, ctx): + return torch.maximum(self.visit(ctx.expr(0)),self.visit(ctx.expr(1))) def visitFunc1Exp(self, ctx): return self.visitChildren(ctx) diff --git a/src/more_math/nodes.py b/src/more_math/nodes.py index aac0a56..8c3a151 100644 --- a/src/more_math/nodes.py +++ b/src/more_math/nodes.py @@ -1,3 +1,4 @@ +from .NoiseMathNode import NoiseMathNode from .FloatMathNode import FloatMathNode from .ConditioningMathNode import ConditioningMathNode from .LatentMathNode import LatentMathNode @@ -45,16 +46,18 @@ NODE_CLASS_MAPPINGS = { "mrmth_ConditioningMathNode": ConditioningMathNode, "mrmth_LatentMathNode": LatentMathNode, "mrmth_ImageMathNode": ImageMathNode, + "mrmth_FloatMathNode": FloatMathNode, + "mrmth_NoiseMathNode": NoiseMathNode, "mrmth_IntToFloat": IntToFloatNode, "mrmth_FloatToInt": FloatToIntNode, - "mrmth_FloatMathNode": FloatMathNode, } NODE_DISPLAY_NAME_MAPPINGS = { - "mrmth_ConditioningMathNode": "Conditioning math node", - "mrmth_LatentMathNode": "Latent math node", - "mrmth_ImageMathNode": "Image math node", - "mrmth_FloatMathNode": "Float math node", + "mrmth_ConditioningMathNode": "Conditioning math", + "mrmth_LatentMathNode": "Latent math", + "mrmth_ImageMathNode": "Image math", + "mrmth_FloatMathNode": "Float math", + "mrmth_NoiseMathNode": "Noise math", "mrmth_IntToFloat": "Int → Float", "mrmth_FloatToInt": "Float → Int", "Tensor": "Tensor expression",