用于自动为函数创建数学公式的 Python 包 [已关闭]

Python package to automatically create mathematical formula for a function [closed]

提问人:bwooster 提问时间:11/5/2023 最后编辑:bwooster 更新时间:11/6/2023 访问量:84

问:


我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。

16天前关闭。

我相信我学到了一个 Python 包,它可以自动将 Python 函数转换为数学符号。例如,当应用于

def power(a, b):
  return a**b

包装将产生

功率 = ab

在 Jupyter Notebook 中,可能使用 LaTeX。

有谁知道那个包是什么?

编辑:我正在考虑一个单一用途的软件包。我知道 SymPy 并且没有想到这一点,但 @cards 的答案表明它可以工作。

Python Math LaTeX Jupyter 公式

评论

0赞 cards 11/5/2023
这回答了你的问题吗?使用 sympy 解析字符串时出现意外行为
0赞 cards 11/5/2023
替换为 : -- parse_expr --> -- --> LaTeX:sympystrsympy.Expsympy.latexstr

答:

1赞 Andrey Rojas 11/5/2023 #1

你所指的包可能是 SymPy,它是一个用于符号数学的 Python 库。SymPy 可用于操作符号表达式和生成数学符号,包括 LaTeX 输出。

评论

0赞 bwooster 11/5/2023
感谢您的回复。我熟悉它,因为我实际上已经为它贡献了文档。SymPy 当然是一种创建方程式并在 LaTeX 中输出它们的方法,但这需要在 SymPy 中编写方程式,例如定义符号和方程式。我记得我学到的是一种仅基于现有 Python 代码生成格式化数学表达式的方法。我相信它将是围绕上面定义的函数的装饰器,并将在 Jupyter Notebook 中输出格式化的数学表达式。power
1赞 Robert Dodier 11/6/2023
@bwooster 您可以考虑将此说明附加到您的问题陈述中;它将帮助其他人知道您已经了解 Sympy,并且您正在寻找其他东西或更多东西。
2赞 cards 11/5/2023 #2

一个有同情心的解决方案。

思路:--sympy.parsing--> --sympy.printing.latexpython_funcSympy.Expr --> LaTeX_str

使用 inspect 获取函数的源代码。

这里有一个示例,试图跟踪帖子作者在评论中提供的信息。

参数只能以关键字形式传递!

from inspect import getsource
from sympy import parse_expr, latex

def python2latex(func):
    # return a latex expression from a python function
    def __wrapper(**kwargs):
        # get expression in return
        *_, src_return = getsource(func).rstrip().rpartition('\n')
        *_, src_return = src_return.partition('return ')

        # cast to sympy expression
        expr = parse_expr(src_return, kwargs , evaluate=False)
        
        # not mandatory - compute final result without sympy
        result = func(**kwargs)

        # build a possible LaTeX expression
        template_result_TeX = "${} = {} = {}$"
        
        # apply the template
        return template_result_TeX.format(
            latex(parse_expr(src_return)),
            latex(expr),
            result)
            
    return __wrapper

@python2latex
def power(a, b):
    return a**b

result = power(a=3, b=4) # arguments as keywords!!
print(result)

输出

$a^{b} = 3^{4} = 81$

评论

0赞 bwooster 11/6/2023
感谢您解决这个问题,@cards!令人印象深刻的是,可以从 Python 函数中提取多少。但我正在寻找一个参数化的方程,而不是一个替换值的方程,例如,我想要 $power = a^{b}$,而不是 $3^{4} = 81$
0赞 cards 11/6/2023
我不确定我是否理解你的意思,特别是是否应该改变如何调用函数(装饰器的方式是oo!:) 因此,请尝试以下编辑,它返回[当然您可以根据自己的意愿进行修改]result_TeX = f"${latex(parse_expr(src_return))} = {latex(expr)} = {result}$"$a^{b} = 3^{4} = 81$
0赞 bwooster 11/6/2023 #3

Mastodon 上的某个人让我想起了我正在考虑的软件包:latexify

latexify 是一个 Python 包,用于编译 Python 源代码的片段 代码到相应的 LaTeX 表达式

它可以从函数的所有行中提取数学运算。示例在 Google Colab 笔记本中。