ipycanvas中的Type is not JSON serializable错误

Type is not JSON serializable error in ipycanvas

我正在尝试在 Jupyter notebook 中使用 ipycanvas 和 SageMath 9.3(我也试过 9.3.rc2)用于 macOS 11.4 和 Python 3. 当我使用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

这次我想不通为什么会出错。如何序列化 sage rationals?

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

TL;博士 不幸的是,您需要将需要传递给 ipycanvas

的数字进行转换

我想你已经找到了你自己问题的答案。事实证明,Sage 笔记本中的数字默认被解释为 Sage 类型(查看 https://doc.sagemath.org/html/en/tutorial/tour_coercion.html#types-versus-parents for more info on types coercion). So when you type, say 7 it casts as Integer(7) as in the element 7 in the ring of integers Z.

class Integer 针对代数计算进行了高度优化,但是它包含一些 methods/attributes 不能 JSON- 序列化*,这就是 ipycanvas 需要渲染 javascript.

  • 在单独的注释中,与您“顺便”提出的一个问题相关,所有 Sage rationals 都可以用 pickle 序列化。不幸的是,这对 ipycanvas 的情况没有帮助。