变更日志

QuTiP 5.1.0 (2024-12-12)

功能

  • 它为HEOM的费米子求解器添加了奇偶校验支持(#2261,由Gerardo Jose Suarez提供)

  • 创建 SMESolver.run_from_experiment,允许从已知噪声或测量中运行随机演化。(#2318)

  • 添加类型提示。(#2327, #2473)

  • 轨迹求解器中的加权轨迹(改进了nm_mcsolve的采样)(#2369, 由Paul Menczel提供)

  • 更新了qutip.core.metrics.dnorm,使其在寻找两个酉矩阵的差异时具有高效的加速。我们使用了D. Aharonov, A. Kitaev, 和 N. Nisan, (1998) 第18页的结果。(#2416, 由owenagnel贡献)

  • 允许为mcsolve和nm_mcsolve设置混合初始条件。(#2437, 由Paul Menczel提供)

  • 在qutip.core.metrics中添加对jitgrad的支持(#2461,由Rochisha Agarwal贡献)

  • 允许合并来自随机求解器的结果。(#2474)

  • 支持对jaxjaxdia数据类型的测量统计(#2493,由Rochisha Agarwal提供)

  • 使用 numpy_backend 启用带有 jax.grad 的 mcsolve (#2499, 由 Rochisha Agarwal 提供)

  • 向稳态添加传播器方法 (#2508)

  • 介绍了qutip.core.environment模块,该模块包含描述玻色子和费米子热环境的类。(#2534, 由Gerardo Jose Suarez提供)

  • 为Qobj维度实现了一个einsum函数(评估操作数上的爱因斯坦求和约定。)(#2545,由Franco Mayo贡献)

  • 波函数计算已通过Cython实现加速。它优化了distribution.py中HarmonicOscillatorWaveFunction类的更新方法。(#2553,由Matheus Gomes Cordeiro贡献)

  • 通过添加sparse选项来加速kraus_to_super。(#2569,由Sola85提供)

错误修复

  • 修复了Bloch.add_states参数color的维度问题 清理了Bloch.add_state中的代码 在Bloch类的指南中添加了Bloch.add_arc和Bloch.add_line (#2445, 由PositroniumJS贡献)

  • 修复 HTMLProgressBar 显示问题 (#2475)

  • 使expm、cosm、sinm与jax一起工作。(#2484,由Rochisha Agarwal提供)

  • 修复随机求解器步骤方法 (#2491)

  • clip 给出了弃用警告,这可能在将来成为一个问题。因此,切换到 where (#2507, 由 Rochisha Agarwal 提供)

  • 修复 brmesolve 检测常量与时间依赖系统的问题。(#2530)

  • propagator 现在接受像 mesolve 一样的列表格式 c_ops。(#2532)

  • 修复与matplotlib>=3.9在matrix_histogram中的兼容性问题 (#2544, 由Andreas Maeder贡献)

  • 解决TwoModeQuadratureCorrelation类的不兼容问题(#2548,由quantum-menace提交)

  • 修复了具有多个退化特征值的稀疏特征求解器问题。(#2586)

  • 修复获取不均匀超算子的张量排列问题。(#2561)

文档

  • 改进指南设置页面。(#2403)

  • 整理API文档中类型别名的格式 (#2436, 由Paul Menczel贡献)

  • 更新文档 - 更新贡献者 - 提高apidoc的可读性 (#2523)

  • 修复 simdiag 文档字符串中的错误 (#2585, 由 Sola85 提交)

其他

  • 添加auto_real_casting选项。(#2329)

  • 为 sqrtm 添加调度程序 (#2453, 由 Rochisha Agarwal 提供)

  • 使e_opsargsoptions仅作为关键字。 求解器与e_ops不一致,通常跟随c_ops,但有时 在它之前。将其设置为仅关键字消除了记忆每个求解器 签名的需要。(#2489)

  • 介绍了一个新的NumpyBackend `类,该类允许动态选择在`qutip`中使用的numpy_backend。 该类便于根据settings.core中指定的配置在不同numpy实现(主要是numpyjax.numpy)之间切换。(#2490, 由Rochisha Agarwal提供)

  • 改进mkl查找功能。(#2497)

  • 确定性轨迹不计入ntraj。(#2502)

  • 允许在一个Python会话中多次执行测试(#2538,由张迈云提供)

  • 通过使用静态numpy版本检查来提高qutip.Qobj的性能(#2557,由Pieter Eendebak贡献)

  • 修复 towncrier 检查 (#2542)

QuTiP 5.0.4 (2024-08-30)

微版本发布以增加对numpy 2.1的支持

错误修复

  • 修复了dicke_trace_function中的舍入错误,该错误导致了负特征值。(#2466, 由 Andrey Nikitin 提交)

QuTiP 5.0.3 (2024-06-20)

微版本发布以增加对numpy 2的支持。

错误修复

  • 修复了过程矩阵渲染中的错误。(#2400, 由Anush Venkatakrishnan提交)

  • 修复稳态排列被反转的问题。(#2443)

  • vernN方法添加并行化支持,使用mcsolve。(由Utkarsh提交的#2454)

文档

  • 添加了qutip.core.gates到apidoc/functions.rst,并在guide-states.rst中添加了一个Gates部分。(#2441, 由alan-nala)

其他

  • 添加对numpy 2的支持 (#2421, #2457)

  • 添加对 scipy 1.14 的支持 (#2469)

QuTiP 5.0.2 (2024-05-16)

错误修复

  • 使用CSR作为expand_operator的默认值(#2380,由BoxiLi提供)

  • 修复了partial_transpose函数的导入问题。 确保negativity函数能够处理ket和密度算子作为输入。(#2371, 由vikas-chaudhary-2802贡献)

  • 确保mcsolve结果的end_condition在没有达到目标容差时不会显示已达到目标容差 (#2382, 由magzpavz)

  • 修复了稳态Floquet求解器中的两个错误,并调整了测试以对此问题敏感。(#2393, 由Neill Lambert贡献)

文档

  • 修正文档中的错误(#2401,由PositroniumJS提供)

  • 修复 #2156:更正文档中的代码示例 (#2409, 由 PositroniumJS 提供)

杂项

  • 在操作符创建函数中更好的元数据管理 (#2388)

  • 隐式设置最低Python版本为3.9 (#2413)

  • Qobj.__eq__ 使用核心设置的 rtol。(#2425)

  • 仅当初始状态已经归一化时,才对求解器状态进行归一化。(#2427)

QuTiP 5.0.1 (2024-04-03)

补丁更新修复了v5.0.0版本中的一些小问题

  • 在迁移到readthedocs时修复文档中的损坏链接

  • 修复readthedocs搜索功能

  • 将setuptools添加到运行时编译要求中

  • 修复开放系统的mcsolve文档

  • 修复进度条中的OverFlowError

QuTiP 5.0.0 (2024-03-26)

QuTiP 5 是对 QuTiP 许多核心组件(QobjQobjEvo、求解器)的重新设计,以使它们更加一致和灵活。

Qobj 现在可以以稀疏或密集表示形式存储,并且可以根据需要合理地混合这两种形式。QobjEvo 现在在 QuTiP 中一致使用,并且其实现已经得到了大幅度的清理。一个新的 Coefficient 类用于表示 QobjEvo 内部的时间依赖因子。

求解器已被重写,以便与新的数据层良好配合,并且引入了解决ODE的Integrators概念。未来,新的数据层可能会提供专门针对其底层数据表示的Integrators

QuTiP 的用户界面 API 大部分仍然保持熟悉,但必须进行许多小的破坏性更改。如果我们能够使从 QuTiP 4 迁移到 QuTiP 5 的代码变得更容易,请告诉我们。

以下是详细的更改列表。

贡献者

QuTiP 5 是过去三年中许多人共同努力的成果。

特别是:

  • Jake Lishman 领导了新数据层和系数的实现。

  • Eric Giguère 领导了新 QobjEvo 接口和求解器的实现。

  • Boxi Li 领导了 QuTiP 的 QIP 支持的更新和 qutip_qip 的创建。

QuTiP 管理团队的其他成员也积极参与了 QuTiP 5 的审查、测试和设计工作:

  • 亚历山大·皮奇福德

  • 阿西尔·加利西亚

  • 内森·沙马

  • 沙赫纳瓦兹·艾哈迈德

  • 尼尔·兰伯特

  • 西蒙·克罗斯

  • 保罗·门切尔

两位Google Summer of Code贡献者更新了教程和基准测试到QuTiP 5:

  • Christian Staufenbiel 更新了许多教程 ()。

  • Xavier Sproken 更新了基准测试 ()。

在RIKEN实习期间,Patrick Hopf创建了一种新的量子控制方法并改进了现有方法的接口:

  • Patrick Hopf 创建了新的量子控制包 ()。

四个实验性的数据层后端要么作为Google Summer of Code的一部分编写,要么作为单独的项目编写。虽然这些仍然是alpha质量,但它们极大地帮助测试了数据层API:

  • qutip-tensorflow: 由 Asier Galicia 提供的 TensorFlow 后端 ()

  • qutip-cupy: 由Felipe Bivort Haiek提供的CuPy GPU后端 ()`

  • qutip-tensornetwork: 由Asier Galicia开发的TensorNetwork后端 ()

  • qutip-jax: 由 Eric Giguère 提供的 JAX 后端 ()

最后,Yuji Tamakoshi 更新了可视化功能,并作为 Google Summer of Code 项目的一部分添加了动画功能。

我们还有许多其他贡献者,他们的具体贡献如下所述:

  • Pieter Eendebak(更新了所需的SciPy至1.5+,#1982 )。

  • Pieter Eendebak(通过设置日志记录器名称减少了导入时间,#1981

  • Pieter Eendebak (允许使用 scipy 1.12 与 qutip,#2354 )

  • Xavier Sproken(在源代码分发中包含了C头文件,#1971

  • Christian Staufenbiel(为Floquet求解器添加了对多个崩溃操作符的支持,#1962

  • Christian Staufenbiel(修复了Floquet主方程求解器中使用的基础,#1952

  • Christian Staufenbiel(允许bloch_redfield_tensor函数接受字符串和可调用对象作为a_ops#1951

  • Christian Staufenbiel (添加关于超算子、泡利基和通道收缩的指南,#1984 )

  • Henrique Silvéro(允许qutip_qip作为qutip.qip导入,#1920

  • Florian Hopfmueller (添加了process_fidelityaverage_gate_fidelity的极大改进实现,#1712 , #1748 , #1788 )

  • Felipe Bivort Haiek(修正了否定密集实现文档字符串中的不准确性,#1608

  • Rajath Shetty(增加了通过qutip.Bloch指定单个点、矢量和状态显示颜色的支持,#1335

  • Rochisha Agarwal (将dtype添加到qobj的打印输出中,#2352 )

  • Kosuke Mizuno (添加了 plot_wigner() 和 plot_wigner_fock_distribution() 的参数以指定 wigner() 的参数,#2057 )

  • Matt Ord(仅在keep_runs_results为False时预计算密度矩阵,#2303

  • 丹尼尔·莫雷诺·加兰(添加了自定义点颜色的可能性,如V4中所示,并修复了‘l’样式的点图行为,#2303

  • Sola85 (修复了simdiag不返回正交特征向量的问题,#2269 )

  • 爱德华·托马斯(修复了Jupyter单元输出中Qobj状态的LaTeX显示,#2272

  • Bogdan Reznychenko(重写kraus_to_choi使其更快,#2284

  • gabbence95 (修复expect文档中的拼写错误,#2331 )

  • lklivingstone (为 QobjEvo 添加了 __repr__,#2111 )

  • Yuji Tamakoshi (通过使其更简洁来改进 print(qutip.settings),#2113 )

  • khnikhil (添加了费米子湮灭和产生算符, #2166 )

  • 丹尼尔·韦斯(改进了mcsolve的采样算法,#2218

  • SJUW (将 matrix_histogram_complex() 的缺失颜色条填充从 0 增加到 0.05, #2181 )

  • 瓦兰·巴普蒂斯特·马图拉纳亚加姆(将qutip-notebooks更改为qutip-tutorials,并修复了PR模板中重定向到变更日志部分的链接中的拼写错误,#2107

  • Gerardo Jose Suarez(在文档中添加了关于sec_cutoff的信息,#2136

  • Cristian Emiliano Godinez Ramirez(向MESolver、SMESolver、SSESolver、NonMarkovianMCSolver的API文档添加了继承成员,#2167

  • 安德烈·拉胡博夫斯基(修正了Bloch-Redfield主方程文档中的语法,#2174

  • Rushiraj Gadhvi (qutip.ipynbtools.version_table() 现在可以在没有安装Cython的情况下调用,#2110 )

  • Harsh Khilawala(将HTMLProgressBar从qutip/ipynbtools.py移动到qutip/ui/progressbar.py,#2112

  • Avatar Srinidhi P V (在创建 QobjEvo 时添加了新参数 bc_type 以接受边界条件,#2114 )

  • 安德烈·拉库博夫斯基(修复了projection()文档字符串中的类型,#2363

Qobj 变更

以前,Qobj 数据存储在类似 SciPy 的稀疏矩阵中。现在表示形式更加灵活。QuTiP 中包含了密集和稀疏格式的实现,并且可以自定义实现。因此,QuTiP 在密集状态和操作符上的性能显著提高。

一些亮点:

  • 数据仍然可以通过.data属性访问,但现在它是底层数据类型的实例,而不是类似SciPy的稀疏矩阵。无论数据类型如何,qutip.core.data中可用的操作都可以在.data上使用。

  • Qobj 与不同数据类型的对象可以在算术和其他操作中混合使用。系统会自动确定一个合理的输出类型。

  • 新的.to(...)方法可用于将Qobj从一种数据类型转换为另一种数据类型。例如,.to("dense")将转换为密集表示,而.to("csr")将转换为稀疏类型。

  • 许多Qobj方法和创建Qobj的方法现在接受一个dtype参数,该参数允许指定返回的Qobj的数据类型。

  • 新的 & 运算符可用于获取张量积。

  • 新的@运算符可用于获取矩阵/运算符乘积。 bar @ ket返回一个标量。

  • 新的.contract()方法将折叠Qobj维度的1D子空间。

  • 新的 .logm() 方法返回一个算子的矩阵对数。

  • 方法 .set_data, .get_data, .extract_state, .eliminate_states, .evaluate.check_isunitary 已被移除。

  • 属性 dtype 返回所使用的数据的表示。

  • 新的 data_as 允许以常见的 Python 格式获取数据: numpy 数组、scipy 稀疏矩阵、JAX 数组等。

QobjEvo 变更

用于存储时间依赖量子对象的QobjEvo类型已经显著扩展、标准化和扩展。时间依赖系数现在使用一个新的Coefficient类型表示,如果需要,可以独立创建和操作。

一些亮点:

  • .compile() 方法已被移除。如果可能,指定为字符串的系数会自动编译,并且编译结果会在不同的 Python 运行和实例之间缓存。

  • 现在支持在单个Qobj中混合系数类型。

  • 为了方便起见,QobjEvo 添加了许多新属性。例如包括 .dims, .shape, .superrep.isconstant

  • 许多旧属性如 .cte, .use_cython, .type, .const, 和 .coeff_file 已被移除。

  • 一个新的Spline系数支持不同阶的样条插值。旧的Cubic_Spline系数已被移除。

  • 新的 .arguments(...) 方法允许更新底层系数函数的附加参数。

  • _step_func_coeff 参数已被 order 参数取代。_step_func_coeff=False 等同于 order=3_step_func_coeff=True 等同于 order=0order 的较高值会给出更高阶的样条插值。

  • 样条类型可以使用 bc_type 来控制边界条件。

  • QobjEvo 可以通过将 Qobj 与系数相乘来创建: oper * qutip.coefficient(f, args=args) 等同于 qutip.QobjEvo([[oper, f]], args=args)

  • 系数函数可以用Python风格定义:def f(t, A, w)。 字典args的第二个参数不再需要。 使用确切f(t, args)签名的函数将使用旧方法以确保向后兼容性。

求解器更改

QuTiP 中的求解器已经进行了大量的重做和标准化。 在底层,求解器现在使用可交换的 ODE Integrators。 包含了许多 Integrators(见下面的列表),并且可以实现自定义的实现。求解器现在一致地接受在哈密顿量或李雅普诺夫量处的 QobjEvo 实例,或者任何可以传递给 QobjEvo 构造函数的对象。

以下是亮点的详细分解。

所有求解器:

  • 求解器选项现在以普通的Python字典形式提供。 qutip.Options 已被弃用,并返回一个字典以保持向后兼容性。

  • 可以通过提供method选项来选择特定的ODE积分器。

  • 每个求解器都提供了一个类接口。创建类的实例允许为同一系统多次运行求解器,而无需重复构建要积分的ODE的右侧。

  • 大多数操作符都接受QobjEvo实例,例如, H, c_ops, e_ops, a_ops

  • 进度条现在使用progress_bar选项进行选择。 提供了一个使用tqdm Python库的新进度条。

  • 动态参数,其中操作符的值取决于演化界面的当前状态已重新设计。现在求解器的一个属性将被用作参数: args={"state": MESolver.StateFeedback(default=rho0)}

集成者:

  • SciPy 的 zvode 积分器可通过 BDF 和 Adams 方法使用,分别为 bdfadams

  • SciPy 的 dop853 积分器(由 Dormand 和 Prince 提出的八阶 Runge-Kutta 方法)可作为 dop853 使用。

  • SciPy 的 lsoda 积分器可以作为 lsoda 使用。

  • QuTiP 自己实现的 Verner 的“最有效”的 7 阶和 9 阶 Runge-Kutta 方法可用作 vern7vern9。有关这些方法的描述,请参见 http://people.math.sfu.ca/~jverner/

  • QuTiP 自己的求解器实现,直接对角化要积分的系统,可用作 diag。它仅适用于时间无关的系统,并且设置速度较慢,但一旦对角化完成,它生成解决方案的速度非常快。

  • QuTiP 自己实现的近似 Krylov 子空间积分器可用作 krylov。此积分器仅可与 sesolve 一起使用。

结果类:

  • 一个新的.e_data属性提供了期望值作为字典。 与.expect不同,这些值以Python列表的形式提供,而不是 numpy数组,这更好地支持非数字类型。

  • .stats 属性的内容发生了显著变化,现在在各个求解器之间更加一致。

蒙特卡洛求解器 (mcsolve):

  • 系统,H,现在可能是一个超算子。

  • seed 参数现在支持提供 numpy 的 SeedSequenceGenerator 类型。

  • 新的 timeouttarget_tol 参数允许求解器在达到超时或目标容差时提前退出。

  • ntraj 选项不再支持轨迹数量的列表。 相反,只需多次运行求解器,并在设置求解器需要大量时间时使用类 MCSolver

  • map_func 参数已被 map 选项替换。

  • 已添加基于loky的并行映射。

  • 已添加基于mpi的并行映射。

  • mcsolve返回的结果现在支持计算光电流和在N个轨迹上计算稳态。

  • 旧的 parfor 并行执行函数已从 qutip.parallel 中移除。请使用 parallel_map, loky_mapmpi_pmap 代替。

  • 添加了改进的采样选项,当崩溃概率较小时,收敛速度更快。

非马尔可夫蒙特卡罗求解器 (nm_mcsolve):

  • 支持负衰减率的新蒙特卡洛求解器。

  • 基于影响鞅方法,Donvil 等人,Nat Commun 13, 4140 (2022)。

  • 对常规蒙特卡洛求解器的大多数改进也适用于此处。

  • 影响鞅的值可以通过结果的.trace属性获得。

随机方程求解器 (ssesolve, smesolve)

  • 函数调用发生了很大变化:许多关键字参数现在变为可选。

  • m_ops 和 dW_factors 现在仅从新类接口的默认值更改。

  • 使用与mcsolve相同的并行映射:增加了对loky和mpi映射的支持。

  • 添加了结束条件 timeouttarget_tol

  • seed 参数现在支持提供 numpy 的 SeedSequence

  • Wiener 函数现在可以作为反馈使用。

布洛赫-雷德菲尔德主方程求解器 (brmesolve):

  • a_opsspectra 支持的实现已经进行了大量重新设计,以重用新的 Coefficient 和 QobjEvo 类中的技术。

  • use_secular 参数已被移除。请改用 sec_cutoff=-1

  • 所需的容差现在从qutip.settings中读取。

Krylov子空间求解器 (krylovsolve):

  • Krylov 求解器现在使用 SESolverkrylov ODE 积分器实现。函数 krylovsolve 为了方便而保留,并且现在支持更多的选项。

  • sparse 参数已被移除。请为哈密顿量提供一个稀疏的 Qobj

Floquet 求解器 (fsesolve 和 fmmesolve):

  • Floquet 求解器已被重写,以使用一个新的 FloquetBasis 类,该类管理从实验室基准到 Floquet 基准的转换及其反向转换。

  • 旧版Floquet求解器使用的许多内部方法已被移除。Floquet张量仍然可以通过函数floquet_tensor重新获取。

  • Floquet Markov 主方程求解器已经进行了许多更改并添加了新选项。可以使用 w_th 指定环境温度,结果状态存储在实验室基中,并可选地使用 store_floquet_state 存储在 Floquet 基中。

  • 提供给fmmesolve的光谱函数现在必须向量化 (即接受并返回频率和密度的numpy数组)并且 必须接受负频率(即通常包括一个w > 0因子 以便返回的密度在负频率时为零)。

  • 要保留的边带数量,kmax 仅在使用 FMESolver 时才能提供。

  • Tsteps 参数已从 fsesolvefmmesolve 中移除。可以使用 FloquetBasisprecompute 选项来代替。

状态求解器的演变 (essovle):

  • 函数 essolve 已被移除。请使用 diag 集成方法与 sesolvemesolve 代替。

稳态求解器(steadystate模块):

  • method 参数和 solver 参数已经被分开。之前它们混合在 method 参数中。

  • 之前的选项现在作为参数传递给稳态求解器,并且大部分传递给底层的SciPy函数。

  • 日志记录和统计信息已被移除。

相关函数(相关模块):

  • 新增了一个correlation_3op函数。它支持MESolverBRMESolver

  • correlationcorrelation_4opcorrelation_ss 函数已被移除。

  • 支持使用 mcsolve 计算相关性的功能已被移除。

传播器(propagator 模块):

  • 已为传播器添加了一个类接口,qutip.Propagator

  • 现在支持使用QobjEvo传播时间依赖系统。

  • unitary_modeparallel 选项已被移除。

相关光谱(光谱模块):

  • 函数 spectrum_ssspectrum_pi 已被移除,现在它们是内部函数。

  • use_pinv 参数已从 spectrum 中移除,其功能已合并到 solver 参数中。请使用 solver="pi" 代替。

层次运动方程求解器 (HEOM)

  • 更新了求解器以使用新的QuTiP积分器和数据层。

  • 已将所有的HEOM教程更新至QuTiP 5。

  • 增加了对结合玻色子和费米子浴的支持。

  • 将HEOM求解器的右侧构建速度提高了4倍。

  • 与QuTiP 4一样,HEOM支持任意谱密度、玻色子和费米子浴、相关函数的Páde和Matsubara展开、计算Matsubara终止符以及检查ADOs(辅助密度算子)。

QuTiP 核心

核心QuTiP功能还有许多其他小的变化:

  • qft(...) 返回量子傅里叶变换算子的函数已从 qutip.qip.algorithm 移动到 qutip

  • Bloch-Redfield 求解器张量 brtensor 已被移至 qutip.core。有关详细信息,请参阅上面关