Sagemath 作为 Python 库

SeF*_*SeF 5 sage

是否可以在 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 世界中。

Sam*_*vre 9

在 Python 会话中导入 SageMath 函数

有多种方法可以实现这一目标。

来自操作系统的包管理器的 SageMath

一些操作系统原生打包了 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 的案例。

SageMath 与 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从该模块导入函数)应该可以工作。


kel*_*aka 6

对于那些无法使用某些与 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 来识别这些。