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 的情况没有帮助。
我正在尝试在 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 的情况没有帮助。