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))