SymPy: пользовательский формат печати для пользовательского выражения функции - PullRequest
0 голосов
/ 08 марта 2019

Как правильно определить классы, которые наследуют класс 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

Может кто-нибудь помочь мне понять, что мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...