是否可以在 python 会话中导入 sagemath 函数?
从用户的角度来看,我希望做的是:
>>> import sage
>>> sage.kronecker_symbol(3,5) # ...or any other sage root functions
Run Code Online (Sandbox Code Playgroud)
而不是kronecker_symbol(3,5)从 sagemath 会话访问。如果可能的话,它会非常方便,因为可以将 sagemath 的所有功能嵌入到 Python 世界中。
有多种方法可以实现这一目标。
一些操作系统原生打包了 Sage,例如 Arch Linux、Debian、Fedora、Gentoo、NixOS 及其衍生版本(Linux Mint、Manjaro、Ubuntu...)。
请参阅 Sage wiki 上专门的“分发”页面:
如果使用其中之一,请使用包管理器安装sage或sagemath然后 Sage 库将安装在系统的 Python 上,并且在该 Python 中可以执行以下操作
>>> from sage.arith.misc import kronecker
>>> kronecker(3, 5)
-1
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用跨平台包管理器,例如 Conda、Guix 和 Nix。这些应该适用于大多数 Linux 发行版和 macOS。另一种选择是运行 Docker 容器。
下面我将详细介绍Conda 的案例。
安装 Sage 和 Conda,你就会得到它。
说明在这里:
首先安装 Conda 发行版(Miniconda、Minimamba 或 Anaconda),然后创建
sageconda 环境。
sage安装 conda 环境后,激活它:
conda activate sage
Run Code Online (Sandbox Code Playgroud)
在sageconda 环境处于活动状态时,运行
python
Run Code Online (Sandbox Code Playgroud)
导入sage模块或导入函数(例如kronecker从该模块导入函数)应该可以工作。
对于那些无法使用某些与 Python 语法不兼容的 SageMath 函数的人来说,这是一个补充答案。
例如;
from sage.all import *
F = GF(2)
R.<x> = k[]
Run Code Online (Sandbox Code Playgroud)
这将给出错误,R.<x> = k[]因为它不是有效的 Python 语法。那么如何解决这个问题呢?
SageMath 解析 SageMath 语法,然后使用 Python。需要使用preparse来查看实际的命令。
sage: preparse('R.<x> = k[]')
"R = k['x']; (x,) = R._first_ngens(1)"
Run Code Online (Sandbox Code Playgroud)
所以更换线,完成!
sage: preparse('R.<x> = k[]')
"R = k['x']; (x,) = R._first_ngens(1)"
Run Code Online (Sandbox Code Playgroud)
不幸的是,我们必须使用 SageMath 来识别这些。