QuTiP 开发路线图

前言

本文档概述了QuTiP当前和未来发展的计划和想法。该文档由QuTiP管理团队维护。非常欢迎来自QuTiP社区的贡献。

特别是本文档概述了qutip下一个主要版本的发布计划,该版本将是第5版。还包括下一个主要版本之后的计划和梦想。

QuTiP中有许多开发工作没有记录在这里。这只是对未来协调策略和想法的一个尝试。

什么是QuTiP?

QuTiP这个名字指代几件事。最著名的是,qutip是一个用于模拟量子动力学的Python库。为了支持这一点,该库还包含各种具有更通用应用的软件工具(函数和类),例如线性代数组件和可视化工具,以及专门与量子相关但应用不仅限于解决动力学问题的工具(例如部分迹计算)。

QuTiP 也是一个组织,在 Github 的意义上,以及在一群人共同合作实现共同目标的意义上,同时也是一个网站存在 qutip.org。QuTiP 社区包括自 2010 年项目构想以来所有支持该项目的人,包括管理者、资助者、开发者、维护者和用户。

这些相关且重叠的QuTiP名称使用在考虑如何组织所有与QuTiP相关的软件包时几乎没有影响,特别是那些由QuTiP管理团队维护的软件包。在这里,QuTiP将指代项目/组织,而qutip将指代用于模拟量子动力学的库。

如果我们从头开始,那么我们可能会为主qutip库选择另一个名称,例如qutip-quantdyn。然而,qutip非常有名,这个名称将会保留。

库包结构

由于名称如Python中的量子工具包一样通用,添加到qutip的新代码模块的范围非常广泛。该库变得越来越难以维护,大约在2020年,QuTiP管理团队决定限制“主”(因为没有更好的名称)qutip包的范围。这个范围仅限于用于模拟(求解)量子系统动力学的组件。该范围包括支持此功能的实用程序,包括输出的分析和可视化。

同时,为了简化维护工作,决定限制依赖关系。主要的qutip运行时代码组件应仅依赖于Numpy和Scipy。安装(从源代码)需要Cython,一些可选组件在运行时也需要Cython。单元测试需要Pytest。可视化(可选)组件需要Matplotlib。

由于计划抽象线性代数数据层的全面性,此增强功能(作为GSoC项目的一部分开发)被允许具有要求主要版本的自由(可能导致非向后兼容性)。这样的时机允许对qutip组件进行重组,使得一些可能被视为超出范围的内容可以以不同的方式打包——也就是说,不作为主要qutip包的一部分安装。因此,接下来描述了不同类型的包的提议。关于上述讨论的QuTiP/qutip名称,计划的重组存在命名混淆的问题,这似乎在不重命名组织或主要包的情况下是不可避免的(这两者都是不可取的)。

QuTiP family packages

主要的qutip包已经包含了一些子包,这些子包在主要的qutip仓库中维护。任何由QuTiP组织维护的包都将被称为QuTiP“家族”包。qutip主包中的子包将被称为“集成”子包。一些包将在它们自己的仓库中维护,并在主要的qutip文件夹结构中单独安装以提供向后兼容性,这些包将被称为qutip可选子包。其他包将安装在自己的文件夹中,但(很可能)将qutip作为依赖项——这些包将仅被称为“家族”包。

QuTiP affilliated packages

其他包已经由QuTiP组织之外的人开发,这些包与qutip一起工作,并且是互补的。计划是给予我们认为值得的那些一些认可[这需要澄清]。这些包将不由QuTiP团队维护。

家庭套餐

qutip 主页面

  • 当前包状态: 家庭包 qutip

  • 计划包状态: 家庭包 qutip

主qutip包范围内的所有组件目前都位于基础文件夹中。计划是将一些组件移动到集成的子包中,如下所示:

  • core 量子对象和操作

  • solver 量子动力学求解器

基础文件夹中剩下的将是杂项模块。可能会有一些机会将一些模块分组到一个可视化子包中。还有一些重命名的潜力,因为一些模块名称包含下划线,这是不常见的。

Qtrl

  • 当前包状态: 已集成的子包 qutip.control

  • 计划包状态: 家庭包 qtrl

有许多用于量子控制优化的OSS Python包。也有许多不同的算法。当前的control集成子包提供了GRAPE和CRAB算法。对于QuTiP来说,尝试(或希望)提供所有选项是过于雄心勃勃的。控制优化已被视为超出范围,因此这些组件将被分离到一个名为Qtrl的家族包中。

根据QuTiP控制框架,Qtrl可能会被用于GRAPE和CRAB的独立包所取代。

QIP

  • 当前包状态: 已集成的子包 qutip.qip

  • 计划包状态: 家庭包 qutip-qip

QIP 子包已被认为超出范围(功能方面)。它还依赖于 qutip.control,因此由于依赖关系的原因也会超出范围。已经为 qutip-qip 创建了一个单独的仓库。

qutip-符号

  • 当前包状态: 独立包 sympsi

  • 计划包状态: 家庭包 qutip-symbolic

很久以前,Robert Johansson 和 Eunjong Kim 开发了 Sympsi。它是一个相当完整的量子计算机代数(符号计算)库。它主要是 Sympy 的量子封装。

它已经陷入无人维护的状态。sympsi 仓库上的最新版本无法与最新版本的 Sympy 一起使用。Alex Pitchford 有一个分支,可以与最近的 Sympy 版本“兼容”——单元测试通过,大多数示例也能正常工作。然而,由于 Sympy 简化函数中对非交换运算符的尊重不足,一些(重要的)示例会失败(注意,截至 2019 年 11 月,这种情况仍然存在,可能现在已经修复)。

有一个[未与RJ和EK讨论]的计划,将其移至QuTiP家族,以便管理团队能够维护、开发和推广它。‘Sympsi’这个名字很可爱,但有点抽象,因此提议使用qutip-symbolic作为替代,因为它更简单且与Sympy更明显区分。

附属包

qucontrol-krotov

一个用于使用Krotov进行量子控制优化的包,主要由Michael Goerz开发。

通常被管理团队接受为开发良好且维护得当。一个坚实的附属候选者。

开发项目

求解器数据层集成

tag:

solve-dl

status:

开发进行中

admin lead:

Eric

main dev:

Eric

新的数据层为显著提高qutip求解器的性能提供了机会。Eric通过部署他开发的QobjEvo(时间依赖的量子对象)来改进求解器。QobjEvo将利用数据层,而求解器则反过来利用QobjEvo

Qtrl迁移

tag:

qtrl-mig

status:

概念化

admin lead:

Alex

main dev:

待定

目前打包为qutip主程序集成子包的组件将被移动到一个名为Qtrl的独立包中。这是该包在集成到qutip之前的原始代号。此外,还将实施更改以利用新的数据层。

QuTiP 控制框架

tag:

ctrl-fw

status:

概念化

admin lead:

Alex

main dev:

待定

创建新的包 qutip-ctrlfw “QuTiP 控制框架”。其目的是提供一个可以被控制优化包采用的通用框架,使得不同的包(算法)可以应用于相同的问题。

用于定义受控系统的类:

  • 命名的控制参数。标量和n维。连续和离散变量

  • 控制参数到动态生成器参数的映射

  • 用于优化的控制参数的掩码

用于时间依赖变量参数化的类

  • 分段常数

  • 分段线性

  • 傅里叶基

  • 更多

用于定义优化问题的类:

  • 单目标和多目标

QuTiP 优化

tag:

qutip-optim

status:

概念化

admin lead:

Alex

main dev:

待定

多变量优化函数的封装器。例如scipy.optimize中的那些(Nelder-Mead, BFGS),但也包括其他方法,如贝叶斯优化和其他基于机器学习的方法。最初仅为量子控制优化提供通用接口,但更广泛适用。

Sympsi 迁移

tag:

sympsi-mig

status:

概念化

admin lead:

Alex

main dev:

待定

从ajgpitch的Sympy分支创建一个新的家族包qutip-symbolic。必须获得Robert Johansson和Eunjong Kim的许可。扩展Sympy的简化功能以尊重非交换运算符。生成用户文档。

状态消息和记录

tag:

状态信息

status:

概念化

admin lead:

Alex

main dev:

待定

QuTiP 有多种记录和报告状态和进度的方法。

  • ProgressBar 被一些求解器使用

  • 在qutip.control中使用的Python日志记录

  • Dump 用于 qutip.control

  • heom 记录 solver.Stats

对这些进行一些整合会很好。

一些过程(如某些求解器、相关性、控制优化)有许多阶段和层次。Dump最初是为了帮助调试而开发的,但它也适用于记录数据以进行分析。qutip.logging_utils因其使用Python日志记录的方式而受到批评。输出会发送到stderr,因此在Jupyter笔记本中输出看起来像错误。

显然,存储过程阶段数据在内存和CPU时间方面是昂贵的,因此任何实现都必须能够选择性地开启/关闭,并且在低级进程(cythonized组件)中完全避免。

所需功能:

  • 可选记录(存储)过程阶段数据(状态、操作员等)

  • 可选地将子集写入标准输出

  • 可能是其他图形表示

  • 将子集保存到文件的选项

  • 理想情况下应该替换使用ProgressBar、Python日志记录、control.Dumpsolver.Stats

qutip 交互式

status:

概念化

tag:

qutip-gui

admin lead:

Alex

main dev:

待定

对于具备基本Python技能的人来说,QuTiP在入门级别使用起来相当简单。然而,一些Python技能是必要的。为qutip的某些部分提供图形用户界面(GUI)可能有助于使qutip更易于使用。这对于教育中的教师和学习者来说可能特别有帮助。

这将是一个很好的GSoC项目。它是独立的,范围灵活。

这个范围广泛且灵活。想法包括但不限于:

交互式布洛赫球面

Matplotlib 具有一些交互功能(滑块、单选按钮、命令按钮),可用于控制参数。它们使用起来有点笨拙,但它们确实存在。也许可以避免使用这些功能并开发我们自己的 GUI。一个交互式的 Bloch 球体可以有用于量子比特状态角度的滑块。按钮可以添加状态,切换状态演化路径。

交互式求解器

配置动态生成器(Lindbladian / Hamiltonian 参数等)和期望算子的选项。然后运行求解器并查看状态演化。

动画电路

QIP电路可以被动画化。状态灯显示处理过程中状态的演变。量子位的动画布洛赫球。

已完成的开发项目

数据层抽象

tag:

dl-abs

status:

已完成

admin lead:

Eric

main dev:

Jake Lishman

开发作为一个GSoC项目完成。已在dev.major分支中完全实现。目前被一些研究小组使用。

从代码qutip组件中抽象出线性代数数据,允许使用替代方案,如稀疏、密集等。难以总结。几乎qutip中的每个文件都以某种方式受到影响。这是qutip的一个重要里程碑。整个qutip的性能显著提升。

一些开发任务仍然存在,包括提供对数据层调度器如何选择最合适的输出类型的完全控制。

qutip 主要重组

tag:

qmain-reorg

status:

已完成

admin lead:

Eric

main dev:

Jake Lishman

将qutip的主要组件重组为上述结构。

qutip 用户文档迁移

tag:

qmain-docs

status:

已完成

admin lead:

Jake Lishman

main dev:

Jake Lishman

qutip 用户文档构建文件将被移动到 qutip/qutip 仓库。这对于一个开源软件包来说更为典型。

作为这一举措的一部分,计划是从头开始重建Sphinx结构。历史上,构建文档存在许多问题。自从qutip文档首次开发以来,Sphinx已经取得了长足的进步。主要的源(rst)文件将保持[几乎]不变,尽管有很大的改进空间。

qutip-doc 仓库之后将仅用于与 QuTiP 项目相关的文档,例如本文档。

QIP迁移

tag:

qip-mig

status:

已完成

admin lead:

Boxi

main dev:

Sidhant Saraogi

在Sidhant的GSoC项目期间,创建了一个单独的qutip-qip包。 需要进行一些微调,特别是在qutip.control迁移之后。

HEOM 改造

tag:

heom-revamp

status:

已完成

admin lead:

Neill

main dev:

Simon Cross, Tarun Raheja

对HEOM求解器进行了全面改革,以融入BoFiN中开创的改进。

QuTiP 主要发布路线图

QuTiP 版本 5

这些项目需要为qutip v.5版本完成。

计划的发布时间表是:

  • alpha版本,2022年12月。核心功能已打包并可供有经验的用户测试。

  • 测试版,2023年1月。所有必需的功能和文档已完成,打包并准备进行社区测试。

  • 完整版本,2023年4月。全面测试的版本已发布。

计划支持的环境:

  • python 3.8 .. 3.11

  • numpy 1.20 .. 1.23

  • scipy 1.5 .. 1.8