微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

结合 doctest 和 Matplotlib Sphinx 扩展

如何解决结合 doctest 和 Matplotlib Sphinx 扩展

Sphinx 扩展 sphinx.ext.doctest 可以直接确保您的文档是最新的。同时,matplotlib.sphinxext.plot_directive 扩展使自动生成数字作为文档的一部分变得简单。

在我的情况下,我想结合最好的两个扩展和

  1. 进行一些缓慢的计算,
  2. 使用 doctest 检查结果,
  3. 绘制结果。

也就是说,类似于下面的内容

>>> 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-directive 块的上下文。

所以我的问题是:

将断言和绘图这两个操作结合起来的最佳方式是什么,同时仍然让断言作为 doctest 运行,并且不运行慢速操作两次,并确保在代码的 doctest 部分设置变量文档的其余部分仍然可用吗?

我所拥有的最佳解决方法是以下有效方法,但要求您在 make html 之前运行 doctest,并在尚未生成图像时在 doctest 运行中产生烦人的警告:

>>> import time
>>> def make_result():
...     time.sleep(100) 
...     return [3,4]
>>> import matplotlib.pyplot as plt
>>> plt.plot(result)
>>> plt.savefig('result.png')

.. image:: result.png

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。