1

我正在尝试在 Jupyter notebook 中使用 SageMath 9.3(我也尝试过 9.3.rc2)在 macOS 11.4 和 Python 3 中使用 ipycanvas。当我使用 SageMath 9.2 和 Python 3 时,ipycanvas 工作正常,但是当我将 sage 更新到 SageMath 9.3 时我开始遇到问题。

我做的第一件事是在我的 mac 终端上再次安装 ipycanvas

$ sage —pip install ipycanvas

安装显然是成功的。

但是,即使运行 ipycanvas 的最小实例也会产生 JSON 类型的可序列化错误,例如,

canvas = Canvas(width=200, height=200)
canvas.stroke_style = 'blue'
canvas.stroke_line(0, 0, 150, 150)
canvas

在此处输入图像描述

我无法弄清楚为什么这次我会出错。我如何序列化圣人理性?

我找到的解决方案是将每个圣人数字转换为浮点数。但是,这在打字时有点烦人。我错过了什么吗?

4

1 回答 1

1

TL; DR 不幸的是,您需要将需要传递的数字转换为 ipycanvas

我想你已经在你自己的问题中找到了答案。事实证明,Sage 笔记本中的数字默认解释为 Sage 类型(请查看https://doc.sagemath.org/html/en/tutorial/tour_coercion.html#types-versus-parents了解有关类型强制的更多信息) . 因此,当您键入时,说它7整数环ZInteger(7)中的元素 7 中的元素相同。

该类Integer针对代数计算进行了高度优化,但是它包含一些不能被 JSON 序列化*的方法/属性,这是ipycanvas呈现 javascript 所需要的。

  • 在单独的说明中,与您“顺便”提出的一个问题有关,所有 Sage 有理数都可以用 pickle 序列化。不幸的是,这对 ipycanvas 的情况没有帮助。
于 2021-05-30T06:37:13.583 回答