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开发。
通常被管理团队接受为开发良好且维护得当。一个坚实的附属候选者。
开发项目
求解器数据层集成
新的数据层为显著提高qutip求解器的性能提供了机会。Eric通过部署他开发的QobjEvo(时间依赖的量子对象)来改进求解器。QobjEvo将利用数据层,而求解器则反过来利用QobjEvo。
Qtrl迁移
- tag:
qtrl-mig
- status:
概念化
- admin lead:
- main dev:
待定
目前打包为qutip主程序集成子包的组件将被移动到一个名为Qtrl的独立包中。这是该包在集成到qutip之前的原始代号。此外,还将实施更改以利用新的数据层。
QuTiP 控制框架
- tag:
ctrl-fw
- status:
概念化
- admin lead:
- main dev:
待定
创建新的包 qutip-ctrlfw “QuTiP 控制框架”。其目的是提供一个可以被控制优化包采用的通用框架,使得不同的包(算法)可以应用于相同的问题。
用于定义受控系统的类:
命名的控制参数。标量和n维。连续和离散变量
控制参数到动态生成器参数的映射
用于优化的控制参数的掩码
用于时间依赖变量参数化的类
分段常数
分段线性
傅里叶基
更多
用于定义优化问题的类:
单目标和多目标
QuTiP 优化
- tag:
qutip-optim
- status:
概念化
- admin lead:
- main dev:
待定
多变量优化函数的封装器。例如scipy.optimize中的那些(Nelder-Mead, BFGS),但也包括其他方法,如贝叶斯优化和其他基于机器学习的方法。最初仅为量子控制优化提供通用接口,但更广泛适用。
Sympsi 迁移
- tag:
sympsi-mig
- status:
概念化
- admin lead:
- main dev:
待定
从ajgpitch的Sympy分支创建一个新的家族包qutip-symbolic。必须获得Robert Johansson和Eunjong Kim的许可。扩展Sympy的简化功能以尊重非交换运算符。生成用户文档。
状态消息和记录
- tag:
状态信息
- status:
概念化
- admin lead:
- 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.Dump、solver.Stats
qutip 交互式
- status:
概念化
- tag:
qutip-gui
- admin lead:
- main dev:
待定
对于具备基本Python技能的人来说,QuTiP在入门级别使用起来相当简单。然而,一些Python技能是必要的。为qutip的某些部分提供图形用户界面(GUI)可能有助于使qutip更易于使用。这对于教育中的教师和学习者来说可能特别有帮助。
这将是一个很好的GSoC项目。它是独立的,范围灵活。
这个范围广泛且灵活。想法包括但不限于:
交互式布洛赫球面
Matplotlib 具有一些交互功能(滑块、单选按钮、命令按钮),可用于控制参数。它们使用起来有点笨拙,但它们确实存在。也许可以避免使用这些功能并开发我们自己的 GUI。一个交互式的 Bloch 球体可以有用于量子比特状态角度的滑块。按钮可以添加状态,切换状态演化路径。
交互式求解器
配置动态生成器(Lindbladian / Hamiltonian 参数等)和期望算子的选项。然后运行求解器并查看状态演化。
动画电路
QIP电路可以被动画化。状态灯显示处理过程中状态的演变。量子位的动画布洛赫球。
已完成的开发项目
数据层抽象
- tag:
dl-abs
- status:
已完成
- admin lead:
- main dev:
开发作为一个GSoC项目完成。已在dev.major分支中完全实现。目前被一些研究小组使用。
从代码qutip组件中抽象出线性代数数据,允许使用替代方案,如稀疏、密集等。难以总结。几乎qutip中的每个文件都以某种方式受到影响。这是qutip的一个重要里程碑。整个qutip的性能显著提升。
一些开发任务仍然存在,包括提供对数据层调度器如何选择最合适的输出类型的完全控制。
qutip 主要重组
- tag:
qmain-reorg
- status:
已完成
- admin lead:
- main dev:
将qutip的主要组件重组为上述结构。
qutip 用户文档迁移
- tag:
qmain-docs
- status:
已完成
- admin lead:
- main dev:
qutip 用户文档构建文件将被移动到 qutip/qutip 仓库。这对于一个开源软件包来说更为典型。
作为这一举措的一部分,计划是从头开始重建Sphinx结构。历史上,构建文档存在许多问题。自从qutip文档首次开发以来,Sphinx已经取得了长足的进步。主要的源(rst)文件将保持[几乎]不变,尽管有很大的改进空间。
qutip-doc 仓库之后将仅用于与 QuTiP 项目相关的文档,例如本文档。
QIP迁移
- tag:
qip-mig
- status:
已完成
- admin lead:
- main dev:
在Sidhant的GSoC项目期间,创建了一个单独的qutip-qip包。 需要进行一些微调,特别是在qutip.control迁移之后。
HEOM 改造
- tag:
heom-revamp
- status:
已完成
- admin lead:
- main dev:
对HEOM求解器进行了全面改革,以融入BoFiN中开创的改进。
QuTiP 主要发布路线图
QuTiP 版本 5
这些项目需要为qutip v.5版本完成。
数据层抽象 (已完成)
qutip 主重组 (已完成)
qutip 用户文档迁移 (已完成)
Solver 数据层集成 (进行中)
QIP迁移 (已完成)
HEOM revamp (已完成)
计划的发布时间表是:
alpha版本,2022年12月。核心功能已打包并可供有经验的用户测试。
测试版,2023年1月。所有必需的功能和文档已完成,打包并准备进行社区测试。
完整版本,2023年4月。全面测试的版本已发布。
计划支持的环境:
python 3.8 .. 3.11
numpy 1.20 .. 1.23
scipy 1.5 .. 1.8