作者:Matt McCormick,Mary Elise Dedicke,Alex Remedios
计算实验的可重复性
Jupyter已成为人工智能(AI)解决方案开发和科学探究的基本组成部分。 Jupyter notebooks在现代教育,商业应用和学术研究中是较为偏爱的人。 Insight Toolkit (ITK)是用于从医学,生物显微镜,材料科学和地球科学图像获得定量见解的开源,跨平台工具包。 ITK社区高度重视科学的可重复性和软件可持续性。结果,工具包中的高级计算方法具有较大的影响,因为它们可以重复应用于派生的研究或商业应用中。
自1999年ITK成立以来,一直着重于导致高质量软件的工程实践。高质量的科学软件是由回归测试驱动的。 ITK项目支持CTest和CDash单元测试和软件质量仪表板工具的开发,可与CMake构建系统一起使用。在Python编程语言中,pytest测试驱动程序可帮助开发人员编写小型,可读的脚本,以确保其软件将继续按预期工作。但是,pytest默认情况下只能测试Python脚本,未经测试的计算笔记本中的错误比经过良好测试的Python代码更常见。
在这篇文章中,我们描述了ITK的Python接口如何利用nbmake,这是一种简单,功能强大的工具,可通过使用Pytest测试驱动程序进行测试来提高Jupyter笔记本电脑的质量。
nbmake
nbmake是一个pytest插件,它使开发人员能够验证jupyter笔记本文件是否在没有错误的情况下运行。这使团队可以保留基于笔记本的文档并在不断发展的项目中进行最新研究。
存在与单元测试和笔记本有关的相关库:
- nbval非常适合想要检查细胞始终呈现相同值的开发人员
- testbook由NTERACT社区维护,非常适合测试笔记本中编写的功能
- nbmake对于那些维护文档和研究材料的人来说很受欢迎。它通过编程方式运行笔记本电脑从上到下来验证内容
我们使用了NBMake,因为其采用的简单性,与Pytest的集成以及在本地和连续集成(CI)测试系统(如GitHub Action)的能力。
入门
测试笔记本的重要第一步是使用其默认设置运行NBMake:
pip install nbmake # install the python library
pytest --nbmake my_notebook.ipynb # Invoke pytest with nbmake on a notebook
此简单命令将在笔记本中检测到大多数常见问题,例如导入错误。
要添加有关预期笔记本内容的更多详细信息,只需在两个笔记本单元中添加断言:
# my_notebook.ipynb
# %% Cell 1
x = 42
# %% Cell 2
assert x == 42
使用断言检查笔记本的正常工作。
注意:如果您想提出一个不含断言的笔记本的更清洁版本,则可以使用Jupyter book将其渲染到站点中,并使用remove-cell tag省略从输出中的主张。
使用NBMAKE的提示
开始测试任何软件包总是很困难的,但是一旦开始,它就变得更容易维护优质的软件。
如果您的目录包含各种笔记本,您会发现不同的阻滞剂:
- 有些需要具有不同类型和名称的内核
- 有些会引起错误,预期或意外地
- 有些人需要身份验证和网络依赖性
- 有些人需要花费几个小时
我们的建议是开始小。
尝试通过单个短笔记本上的开发环境本地运行NBMAKE。如果
这是一个挑战,请使用--nbmake-find-import-errors
标志仅检查缺失的依赖项。
一旦您的质量最少,您就可以考虑测试的下一步
方法。
- 运行软件质量检查CI
- 测试更多笔记本
- 使用koude1减少测试时间
- 使用
--overwrite
标志将输出笔记本写入磁盘以构建文档或 提交版本控制。
有关完整的文档和故障排除指南,请参见nbmake GitHub repo。
ITK用例
创建空间分析处理管道,示例代码,笔记本可视化工具和文档时,ITK利用NBMake确保没有常见的导入错误或意外错误或意外错误的高质量,易于维护的文档。
在ITK扩展中,例如ITKIOScanco(使用3D微传输量的模块)或ITKElastix(用于图像的刚性和非核定注册的工具箱),NBMake在GitHub Actions CI测试中运行笔记本。
> > > > >itkelastix github操作笔记本测试输出,显示标准的pytest状态信息。
CI测试通过pytest 。
捕获错误并显示回溯信息itkwidgets,一种用于Python笔记本的下一代,简单的3D可视化工具,使用NBMake检查其功能。
用nbmake测试的itkwidgets visualization notebook。
在ITK的Sphinx examples中,笔记本嵌入了HTML文档并连续测试。
图像注册过程中的explanation of optimization。笔记本在狮身人面像中渲染并用NBMake进行了测试。
下一步
尽管笔记本已经存在一段时间,但我们仍在学习如何将它们整合到严格的工程过程中。 NBMake项目正在继续开发方法来消除与许多组织中维护优质笔记本相关的摩擦。
在第二年,将对缺少的进口检查器(以保持虚拟环境的最新状态)和模拟系统(在测试过程中跳过缓慢而复杂的单元格)。
nbmake由基于
的机器学习基础设施公司treebeard.io维护
英国。 ITK是一个NumFOCUS项目,由Kitware提供的商业支持,Kitware是一家总部位于美国的开源科学计算公司。