diff --git a/frappy/lib/mathparser.py b/frappy/lib/mathparser.py index 52cc03bd..a45b78c2 100644 --- a/frappy/lib/mathparser.py +++ b/frappy/lib/mathparser.py @@ -37,6 +37,13 @@ class MathParser: ast.Div: op.truediv, ast.Pow: op.pow, ast.FloorDiv: op.floordiv, + ast.Lt: op.lt, + ast.Gt: op.gt, + ast.LtE: op.le, + ast.GtE: op.ge, + ast.Eq: op.eq, + ast.NotEq: op.ne, + ast.Not: op.not_, ast.USub: op.neg, ast.UAdd: lambda a:a} @@ -74,6 +81,15 @@ class MathParser: if isinstance(node, ast.BinOp): # evaluate binary operations method = self._operators2method[type(node.op)] return method( self.eval_(node.left), self.eval_(node.right)) + if isinstance(node, ast.Compare): # evaluate binary operations + left = self.eval_(node.left) + for oper, value in zip(node.ops, node.comparators): + method = self._operators2method[type(oper)] + right = self.eval_(value) + if not method(left, right): + return False + left = right + return True if isinstance(node, ast.UnaryOp): # handle operators method = self._operators2method[type(node.op)] return method( self.eval_(node.operand) )