Как правильно определить классы, которые наследуют класс Function
в Sympy, и создать для них пользовательские операторы печати?
Я следовал примерам https://docs.sympy.org/latest/modules/printing.html, которые модифицируют выводMod
и все работает нормально.
Например:
с пользовательским принтером
from sympy import Symbol, Mod
from sympy.printing.latex import LatexPrinter
class MyLatexPrinter(LatexPrinter):
def _print_Mod(self, expr, exp=None):
return 'hey'
def print_my_latex(expr):
print(MyLatexPrinter().doprint(expr))
x = Symbol('x')
m = Symbol('m')
print_my_latex(Mod(x, m))
# prints: hey
или
с пользовательским методом печати
from sympy import Symbol, Mod
from sympy.printing.latex import print_latex
class ModOp(Mod):
def _latex(self, printer=None):
return "hello"
x = Symbol('x')
m = Symbol('m')
print_latex(ModOp(x, m))
# prints: hello
Однако, когда я пытаюсь создать свою собственную функцию, я никогда не могу получить ни один метод для изменения вывода.
с пользовательским принтером
from sympy import Symbol, Function
from sympy.printing.latex import LatexPrinter
class MyLatexPrinter(LatexPrinter):
def _print_Custom(self, expr, exp=None):
return 'hi'
def print_my_latex(expr):
print(MyLatexPrinter().doprint(expr))
class Custom(Function):
@classmethod
def eval(cls, a, b):
return a * b
a = Symbol('a')
b = Symbol('b')
print_my_latex(Custom(a, b))
# prints: a b
или
с пользовательским методом печати
from sympy import Symbol, Function
from sympy.printing.latex import print_latex
class Custom(Function):
@classmethod
def eval(cls, a, b):
return a * b
def _latex(self, printer=None):
return "howdy"
a = Symbol('a')
b = Symbol('b')
print_latex(Custom(a, b))
# prints: a b
Может кто-нибудь помочь мне понять, что мне не хватает?