49 lines
1023 B
Python
49 lines
1023 B
Python
def pretty_print(poly):
|
|
R_terms = []
|
|
r_terms = []
|
|
x_terms = []
|
|
mixed_terms = []
|
|
|
|
if isinstance(poly, int):
|
|
return str(poly)
|
|
|
|
has_const = bool(poly.constant_coefficient())
|
|
|
|
for monom in poly:
|
|
vars_in_term = [str(v) for v in monom.variables()]
|
|
|
|
if not vars_in_term:
|
|
continue
|
|
|
|
term = "*".join(vars_in_term)
|
|
families = {v[0] for v in vars_in_term}
|
|
|
|
if families == {"R"}:
|
|
R_terms.append(term)
|
|
elif families == {"r"}:
|
|
r_terms.append(term)
|
|
elif families == {"x"}:
|
|
x_terms.append(term)
|
|
else:
|
|
mixed_terms.append(term)
|
|
|
|
parts = []
|
|
|
|
if has_const:
|
|
parts.append("1")
|
|
|
|
if R_terms:
|
|
parts.append("f(Ri)")
|
|
|
|
if r_terms:
|
|
parts.append("f(ri)")
|
|
|
|
parts.extend(x_terms)
|
|
parts.extend(mixed_terms)
|
|
|
|
return " + ".join(parts) if parts else "0"
|
|
|
|
|
|
def pretty_print_vec(vec):
|
|
return "[" + ",\n ".join(pretty_print(p) for p in vec) + "]"
|