示例#1
0
    def is_valid_math_expression(obj: str, algebraic: bool) -> bool:
        """Checks if the given obj (a string) represents a valid algebraic or
        numeric expression. Note that purely-numeric expressions are NOT
        considered valid algebraic expressions.

        Args:
            obj: str. The given math expression string.
            algebraic: bool. True if the given expression is algebraic
                else numeric.

        Returns:
            bool. Whether the given object is a valid expression.
        """
        if len(obj) == 0:
            return True

        if not expression_parser.is_valid_expression(
                obj):  # type: ignore[no-untyped-call]
            return False

        expression_is_algebraic = expression_parser.is_algebraic(
            obj)  # type: ignore[no-untyped-call]
        # If the algebraic flag is true, expression_is_algebraic should
        # also be true, otherwise both should be false which would imply
        # that the expression is numeric.
        return not algebraic ^ expression_is_algebraic
示例#2
0
    def is_valid_math_expression(obj: str, algebraic: bool) -> bool:
        """Checks if the given obj (a string) represents a valid algebraic or
        numeric expression. Note that purely-numeric expressions are NOT
        considered valid algebraic expressions.

        Args:
            obj: str. The given math expression string.
            algebraic: bool. True if the given expression is algebraic
                else numeric.

        Returns:
            bool. Whether the given object is a valid expression.
        """
        if len(obj) == 0:
            return True

        if not expression_parser.is_valid_expression(
                obj):  # type: ignore[no-untyped-call]
            return False

        expression_contains_at_least_one_variable = (
            expression_parser.contains_at_least_one_variable(obj)
        )  # type: ignore[no-untyped-call]
        # This ensures that numeric expressions don't contain variables.
        return algebraic or not expression_contains_at_least_one_variable
    def test_validates_math_expression(self):
        """Tests whether the parser can validate math expressions."""
        self.assertTrue(expression_parser.is_valid_expression('a+b'))
        self.assertTrue(expression_parser.is_valid_expression('a+(-b)'))
        self.assertTrue(expression_parser.is_valid_expression('-a+b'))
        self.assertTrue(expression_parser.is_valid_expression('a+b^(-2)'))
        self.assertTrue(expression_parser.is_valid_expression('a+b/2.3'))
        self.assertTrue(expression_parser.is_valid_expression('ab/2'))
        self.assertTrue(expression_parser.is_valid_expression('a(b+c)'))
        self.assertTrue(expression_parser.is_valid_expression('2x + 3/2'))
        self.assertTrue(expression_parser.is_valid_expression('alpha + bet/2'))
        self.assertTrue(expression_parser.is_valid_expression('Alpha/2'))
        self.assertTrue(expression_parser.is_valid_expression(
            '42 - [5/a] (4)'))
        self.assertTrue(expression_parser.is_valid_expression(
            'a + sqrt(beta/gamma)'))
        self.assertTrue(expression_parser.is_valid_expression(
            'cos(theta/2^epsilon)'))
        self.assertTrue(expression_parser.is_valid_expression('a+{-b/22}'))
        self.assertTrue(expression_parser.is_valid_expression('abs(a^2 + b^2)'))
        self.assertTrue(expression_parser.is_valid_expression(
            'sin(theta)^2 + cos(theta)^2'))
        self.assertTrue(expression_parser.is_valid_expression('(2*pi*r^2)/2'))
        self.assertTrue(expression_parser.is_valid_expression('1 + (2*a)'))
        self.assertTrue(expression_parser.is_valid_expression('(a+ b) '))
        self.assertTrue(expression_parser.is_valid_expression(
            '{a+(beta - gamma)}'))
        self.assertTrue(expression_parser.is_valid_expression(
            '(a) / ((b)/(c))'))
        self.assertTrue(expression_parser.is_valid_expression(
            '{a+(b-[c])-(beta^4)}'))
        self.assertTrue(expression_parser.is_valid_expression('alpha + (-3)'))
        self.assertTrue(expression_parser.is_valid_expression(
            'alpha^(3.9/beta*gamma)'))
        self.assertTrue(expression_parser.is_valid_expression(
            '{a-(-3)/(2-(-b)^4)}^2'))
        self.assertTrue(expression_parser.is_valid_expression(
            'a+(-3)/alpha + gamma^2'))
        self.assertTrue(expression_parser.is_valid_expression('(x+y) * (x-y)'))
        self.assertTrue(expression_parser.is_valid_expression(
            '(a+ b)^2 - (c+d) ^ 3'))

        self.assertTrue(expression_parser.is_valid_expression('3+2'))
        self.assertTrue(expression_parser.is_valid_expression('---+34'))
        self.assertTrue(expression_parser.is_valid_expression('---(3/+4)'))
        self.assertTrue(expression_parser.is_valid_expression('3+2^3'))
        self.assertTrue(expression_parser.is_valid_expression('(5-2^[6+3])'))
        self.assertTrue(expression_parser.is_valid_expression('(-5)^(-1)/2'))
        self.assertTrue(expression_parser.is_valid_expression(
            '2*10^3 + 3*10^2'))
        self.assertTrue(expression_parser.is_valid_expression(
            '{55 - 2/(-3)^100 + [5-4]}'))
        self.assertTrue(expression_parser.is_valid_expression('(3^2) - (4^2)'))
        self.assertTrue(expression_parser.is_valid_expression(
            '(1+2+3)/(1-2-3)'))
        self.assertTrue(expression_parser.is_valid_expression(
            '24.6 + 3^(-1/2)'))
        self.assertTrue(expression_parser.is_valid_expression('1^1^1^1^1^1^1'))
        self.assertTrue(expression_parser.is_valid_expression(
            '1000 + 200 + 30 + 4'))
        self.assertTrue(expression_parser.is_valid_expression('(1.01)^39'))
        self.assertTrue(expression_parser.is_valid_expression('506/(2-3)^(-3)'))
        self.assertTrue(expression_parser.is_valid_expression('sqrt(-1)'))
        self.assertTrue(expression_parser.is_valid_expression(
            'sqrt(-abs(-1))^2/abs(5)'))
        self.assertFalse(expression_parser.is_valid_expression('a+b/'))
        self.assertFalse(expression_parser.is_valid_expression('|x|'))
        self.assertFalse(expression_parser.is_valid_expression('||'))
        self.assertFalse(expression_parser.is_valid_expression('|x+y|-z'))
        self.assertFalse(expression_parser.is_valid_expression('a^2.'))
        self.assertFalse(expression_parser.is_valid_expression('(352+)-3*x'))
        self.assertFalse(expression_parser.is_valid_expression('(a-2^34-)'))
        self.assertFalse(expression_parser.is_valid_expression(
            '(25 + 3.4.3*a)'))
        self.assertFalse(expression_parser.is_valid_expression('sqrt(abs)'))
        self.assertFalse(expression_parser.is_valid_expression(
            'alpha + bet/2.3.4'))
        self.assertFalse(expression_parser.is_valid_expression('a_b'))
        self.assertFalse(expression_parser.is_valid_expression('!/'))
        self.assertFalse(expression_parser.is_valid_expression('a~b'))
        self.assertFalse(expression_parser.is_valid_expression('a*b)'))
        self.assertFalse(expression_parser.is_valid_expression('(a}+{b)'))
        self.assertFalse(expression_parser.is_valid_expression('{a+b)(c}'))
        self.assertFalse(expression_parser.is_valid_expression('a**b'))
        self.assertFalse(expression_parser.is_valid_expression('(a)^/(b)'))
        self.assertFalse(expression_parser.is_valid_expression('a+/3'))
        self.assertFalse(expression_parser.is_valid_expression('a=b'))
        self.assertFalse(expression_parser.is_valid_expression('a<b'))
        self.assertFalse(expression_parser.is_valid_expression('a>b'))
        self.assertFalse(expression_parser.is_valid_expression('a<=b'))
        self.assertFalse(expression_parser.is_valid_expression('a>=b'))

        self.assertFalse(expression_parser.is_valid_expression('3+2/*a'))
        self.assertFalse(expression_parser.is_valid_expression('192.168.1 + 3'))
        self.assertFalse(expression_parser.is_valid_expression('{1 - 2 (/3}'))
        self.assertFalse(expression_parser.is_valid_expression('[5^(3-2])'))
        self.assertFalse(expression_parser.is_valid_expression(
            '55.02//3.5-(-a)'))
        self.assertFalse(expression_parser.is_valid_expression(
            'alpha + beta-^1'))
        self.assertFalse(expression_parser.is_valid_expression('(3+2]'))
        self.assertFalse(expression_parser.is_valid_expression('3!2'))
        self.assertFalse(expression_parser.is_valid_expression('3~2'))
        self.assertFalse(expression_parser.is_valid_expression('3-/2'))
        self.assertFalse(expression_parser.is_valid_expression('3-5=(-2)'))
        self.assertFalse(expression_parser.is_valid_expression('3 > 2'))