Sagemath 作为 python 库

Sagemath as a python library

是否可以在 python 会话中导入 sagemath 函数?

我想做的,从用户的角度来看是这样的:

>>> import sage
>>> sage.kronecker_symbol(3,5)  # ...or any other sage root functions

而不是从 sagemath 会话访问 kronecker_symbol(3,5)。 如果可能的话,这将非常方便,因为可以将 sagemath 的所有功能嵌入到 python 世界中。

在 Python 会话中导入 SageMath 函数

有几种方法可以实现。

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

一些操作系统自带 Sage, 例如 Arch Linux、Debian、Fedora、Gentoo、NixOS、 及其衍生物(Linux Mint、Manjaro、Ubuntu...)。

请参阅 Sage wiki 上的专用 "Distribution" 页面:

如果使用其中之一,请使用包管理器 安装 sagesagemath 然后 Sage库将安装在系统的 Python,在那个 Python 中它将成为可能 做

之类的事情
>>> from sage.arith.misc import kronecker
>>> kronecker(3, 5)
-1

另一种选择是使用跨平台包管理器 例如 Conda、Guix 和 Nix。这些应该适用于大多数 Linux 发行版和 macOS。另一种选择是 到 运行 一个 Docker 容器。

我将在下面详细介绍 Conda 案例。

SageMath 与 Conda

用 Conda 安装 Sage,你就会得到它。

说明在这里:

然后从安装 Conda 发行版开始,要么 Miniconda、Minimamba 或 Anaconda,然后创建一个 sageconda环境。

安装 sage conda 环境后,激活它:

conda activate sage

有了 sage conda 环境,运行

python

并导入 sage 模块或导入函数 例如该模块中的 kronecker 应该可以工作。

这是对那些未能使用某些与 Python 语法不兼容的 SageMath 函数的人的补充答案。

例如;

from sage.all import *

F = GF(2)
R.<x> = k[]

这将在 R.<x> = k[] 上产生错误,因为它不是有效的 Python 语法。那么如何解决这个问题呢?

SageMath 解析 SageMath 语法然后使用 Python。需要使用 preparse 才能看到实际命令。

sage: preparse('R.<x> = k[]')
"R = k['x']; (x,) = R._first_ngens(1)"

所以替换线,完成!

from sage.all import *

F = GF(2)
R = k['x']; (x,) = R._first_ngens(1)

不幸的是,必须使用 SageMath 来识别这些。

1/ pip 安装 sage
2/ 来自鼠尾草导入 *