python - Sympy's latex printer, folding short fractions -


i'm feeding sympy.latex string involving fractions , i'd latex representation fractions "folded", i.e., typeset 3/2 rather \frac{3}{2}. i'm setting fold_short_fractions keyword argument true, results i'm getting inconsistent:

>>> sympy.parsing.sympy_parser import parse_exp >>> sympy import latex >>> >>> print(latex(parse_expr("3*x**2/y"))) # ok \frac{3 x^{2}}{y} >>> print(latex(parse_expr("3*x**2/y"), fold_short_frac=true)) # ok 3 x^{2} / y >>> >>> print(latex(parse_expr("3/2"))) # ok \frac{3}{2} >>> print(latex(parse_expr("3/2"), fold_short_frac=true)) # no!! \frac{3}{2} 

as can see, refuses fold numerical fraction 3/2, although seems okay symbolic expressions. have explanation/fix/workaround this? thanks!

this bug in sympy latex printer. isn't looking @ fold_short_frac option rational numbers. i've got fix here.

in meantime, can use workaround:

from sympy.printing.latex import latexprinter  class mylatexprinter(latexprinter):     def _print_rational(self, expr):         if expr.q != 1:             sign = ""             p = expr.p             if expr.p < 0:                 sign = "- "                 p = -p             if self._settings['fold_short_frac']:                 return r"%s%d / %d" % (sign, p, expr.q)             return r"%s\frac{%d}{%d}" % (sign, p, expr.q)         else:             return self._print(expr.p)  def latex(expr, **settings):     return mylatexprinter(settings).doprint(expr) 

Comments