Пример #1
0
def simplify_print(expr: sympy.Expr):
    if isinstance(expr, sympy.Float):
        # Just a float number.
        return nicely_print_float(
            str(expr.round(FLOAT_ROUND)))
    elif isinstance(expr, sympy.Add):
        expression = ''
        for i, ele in enumerate(expr.args):
            ele_str = simplify_print(ele)

            if ele_str == '0':
                continue

            if ele_str[0] == '-' or expression == '':
                expression += ele_str
            else:
                expression += '+' + ele_str

        if expression == '':
            return '0'
        else:
            return expression
    elif isinstance(expr, sympy.Mul):
        coefficient, _ = expr.as_coeff_Mul()
        if coefficient < 0:
            expr = -expr
            sign = '-'
        else:
            sign = ''

        exps = []
        for arg in expr.as_ordered_factors():
            exp = simplify_print(arg)
            if exp == '0':
                return '0'
            if exp != '1':
                if precedence(arg) < precedence(expr):
                    exp = '(%s)' % exp
                exps.append(exp)

        expression = sign + '*'.join(exps)
        return expression
    elif isinstance(expr, NegativeOne):
        return '-1'
    elif isinstance(expr, One):
        return '1'
    elif isinstance(expr, Zero):
        return '0'
    elif isinstance(expr, sympy.Symbol):
        return expr.name
    elif isinstance(expr, sympy.Integer):
        return str(expr.p)
    elif isinstance(expr, sympy.Rational):
        return simplify_print(expr.evalf())
    else:
        raise ExpressionPrintException(
            'Do not know how to print %r: %r' % (type(expr), expr))