python - 结合 doctest 和 Matplotlib Sphinx 扩展
问题描述
Sphinx 扩展sphinx.ext.doctest
可以直接确保您的文档是最新的。同时,该matplotlib.sphinxext.plot_directive
扩展使自动生成图形作为文档的一部分变得简单。
在我的情况下,我想结合最好的两个扩展和
- 执行一些缓慢的计算,
- 使用 doctest 检查结果,
- 绘制结果。
也就是说,类似于以下内容:
>>> import time
>>> def make_result():
... time.sleep(100)
... return [3, 4]
>>> result = make_result()
>>> print(result)
[3, 4]
.. plot::
>>> import matplotlib.pyplot as plt
>>> plt.plot(result)
>>> plt.show()
就目前而言,这不会很有效,因为 plot 指令没有可用的前一个 doctest 块的上下文。此外,使用 plot 指令的“context”选项似乎还不够,因为它摆脱了 doctest,这意味着我将没有上下文可用于未来的非 plot 指令块。
所以我的问题是:
结合这两个操作(断言和绘图)的最佳方式是什么,同时仍然让断言作为 doctest 运行,并且不运行两次慢速操作,并确保代码的 doctest 部分中设置的变量仍然可用文件的其余部分?
我拥有的最佳解决方法是以下方法,但需要您在之前运行make html
doctest,并在尚未生成图像时在 doctest 运行中产生烦人的警告:
>>> import time
>>> def make_result():
... time.sleep(100)
... return [3, 4]
>>> result = make_result()
>>> print(result)
[3, 4]
>>> import matplotlib.pyplot as plt
>>> plt.plot(result)
>>> plt.savefig('result.png')
.. image:: result.png
解决方案
推荐阅读
- php - PHP Json 文件合并
- java - 如何使用 bitcoinj 库离线或在本地主机上发送比特币
- .htaccess - How can I make RewriteRule in .htaccess working?
- hadoop - Hive query getting failed while trying to use TEZ engine
- python - request.POST.get() 返回值和无
- python - Python:如何将列表列表写入文本文件?
- html - ::before 伪元素不显示
- c# - 使用 ChoETL 将 JSON 转换为 CSV 缺少一些数组值
- javascript - 如何使用 vuetity 的 v-row 和 v-col 输出 7 或 8 列网格?
- c++ - 将参数中的函数\类传递给静态库