从正在运行的解释器启用Sympy自动符号模式

时间:2017-01-27 07:49:03

标签: python ipython sympy

isympy命令启动一个导入了sympy的解释器。我还可以提供这些选项以“交互模式”启动翻译:

  -a, --auto-symbols    automatically construct missing symbols
  -i, --int-to-Integer  automatically wrap int literals with Integer
  -I, --interactive     equivalent to -a -i

在标准Python或IPython解释器中导入Sympy后,有没有办法启用此模型? 这对于使用Jupyter笔记本非常有用。

2 个答案:

答案 0 :(得分:2)

如果查看isympy的源代码,您会发现它实际上只是将命令行选项解析为sympy.interactive.init_session()函数的参数。因此,您可以在Jupyter笔记本会话中运行该函数,该会话也是restart the service programmatically

答案 1 :(得分:0)

我根据Ondrej的回答挖了一些代码,然后找到解决问题的方法:

Althoug打电话:

ipython.interactive.init_session(ipython=None, auto_symbols=True, auto_int_to_Integer=True)

在运行IPython时不起作用, 在标准的Python控制台中,它启动一个IPython会话并按预期初始化它。

它在IPython中不起作用的原因是init_session中的大部分初始化工作都是在调用ipython.interactive.session.init_ipython_session时完成的。 但是,init_session检查它是否已经在IPython会话中,如果是,则跳过init_ipython_session调用。 由于init_ipython_sessioninit_ipython可以做的第一个有意义的事情,因此可以通过首先显式调用init_ipython_session来解决问题:

from sympy.interactive import init_session
from sympy.interactive.session import init_ipython_session
init_ipython_session(auto_symbols=True, auto_int_to_Integer=True)
init_session(ipython=None, auto_symbols=True, auto_int_to_Integer=True)

这会将正在运行的Ipython会话置于所需的模式。 但是,初始化仅在下一个“单元格”中生效。 例如,将上述代码粘贴到IPython控制台以及依赖于inirializations的代码将失败。 初始化和依赖它的代码必须分别粘贴。 在一个jupyter笔记本中,上面的代码必须在一个单独的单元格中。