核心 API¶
QPE 引擎¶
用于分子系统的量子相位估计(QPE)实现。
阶段 2:标准 QPE 电路,包括:- 通过 qml.BasisState 制备 HF 态;- 通过 qml.TrotterProduct 实现受控时间演化;- 通过 qml.adjoint(qml.QFT) 实现逆 QFT。
阶段 4:集成 Catalyst @qjit,支持 JIT 编译。
- class q2m3.core.qpe.QPEEngine(n_qubits, n_iterations=8, mapping='jordan_wigner', device='default.qubit', device_type='lightning.qubit', use_catalyst=False, **kwargs)[源代码]¶
基类:
object用于 QM/MM 计算的迭代量子相位估计引擎。
实现面向近期量子设备优化的迭代 QPE 算法,目标为早期容错量子计算机(EFTQC)。
- 参数:
n_qubits (int)
n_iterations (int)
mapping (str)
device (str)
device_type (str)
use_catalyst (bool)
- __init__(n_qubits, n_iterations=8, mapping='jordan_wigner', device='default.qubit', device_type='lightning.qubit', use_catalyst=False, **kwargs)[源代码]¶
初始化 QPE 引擎。
- 参数:
n_qubits (int) -- 系统量子比特数
n_iterations (int) -- QPE 迭代次数(概念验证使用 5-10 次)
mapping (str) -- 费米子到量子比特的映射('jordan_wigner' 或 'bravyi_kitaev')
device (str) -- PennyLane 设备名称(已弃用,改用 device_type)
device_type (str) -- 设备选择策略:- "auto":自动选择可用的最佳设备 (GPU > lightning.qubit > default.qubit);- "default.qubit":标准 PennyLane 模拟器;- "lightning.qubit":高性能 CPU 模拟器(默认);- "lightning.gpu":GPU 加速模拟器(需要 cuQuantum)。
use_catalyst (bool) -- 启用 Catalyst @qjit 编译(需要 pennylane-catalyst)
**kwargs -- 附加设备配置
- estimate_ground_state_energy(hamiltonian_data, initial_state=None)[源代码]¶
通过经典模拟估计基态能量(概念验证)。
此经典模拟为概念验证而模拟 QPE 行为。使用 PySCF Hartree-Fock 结果作近似。结果及其模拟收敛过程均标记为 hf_reference。
- 参数:
hamiltonian_data (dict[str, Any]) -- 包含 PySCF 分子数据的字典
initial_state (ndarray | None) -- 初始量子态制备(经典模拟中不使用)
- 返回:
energy: 基态能量,单位为 Hartree
convergence: 收敛信息
density_matrix: 电子密度矩阵
method: hf_reference(未进行相位估计测量)
- 返回类型:
Dictionary containing
- static compute_optimal_base_time(energy_estimate, safety_margin=None)[源代码]¶
计算避免 QPE 相位溢出的最优 base_time。
QPE 满足关系
phi = |E| * t / (2*pi)。为避免溢出,需满足phi < 1,即t < 2*pi / |E|。- 参数:
energy_estimate (float) -- 估计的基态能量(例如 HF 能量)
safety_margin (float) -- 安全系数(默认:PHASE_SAFETY_MARGIN = 0.8)
- 返回:
避免相位溢出的最优 base_time
- 返回类型:
float
- static compute_shifted_qpe_params(target_resolution=0.001, energy_range=0.2, safety_margin=None)[源代码]¶
计算能量平移 QPE 的最优参数。
能量平移 QPE 将哈密顿量变换为 H' = H - E_ref * I,其中 E_ref 通常为 HF 能量。这使 QPE 测量 ΔE = E - E_ref,而非绝对能量 E,从而更精确地检测微小能量变化,例如 MM 嵌入效应。
物理关系:- QPE 测量相位:
φ = |ΔE| * t / (2π);- 对 n 位精度:resolution = 2π / (2^n * t);- 能量范围:ΔE_max = 2π / t(用于避免相位溢出)。此方法计算最优 n_estimation_wires 和 base_time,在覆盖预期能量范围的同时达到目标分辨率。
- 参数:
target_resolution (float) -- 目标能量分辨率,单位为 Hartree(默认:0.001 Ha ≈ 0.63 kcal/mol)
energy_range (float) -- E_ref 附近的预期能量范围,单位为 Hartree(默认:±0.1 Ha)
safety_margin (float) -- 相位溢出的安全系数(默认:PHASE_SAFETY_MARGIN)
- 返回:
n_estimation_wires: 达到目标精度所需的估计量子比特数
base_time: 最优基础演化时间
resolution: 实际达到的能量分辨率
max_energy_range: 最大可测能量范围
phase_cycles: 范围边界处 ΔE 对应的相位周期数
- 返回类型:
Dictionary containing
示例
>>> params = QPEEngine.compute_shifted_qpe_params( ... target_resolution=0.001, # 0.63 kcal/mol ... energy_range=0.2, # ±0.1 Ha range ... ) >>> print(f"Use {params['n_estimation_wires']} estimation qubits") Use 7 estimation qubits >>> print(f"base_time = {params['base_time']:.4f}") base_time = 49.0874
- draw_qpe_circuit(hamiltonian, hf_state, n_estimation_wires=4, base_time=0.3, n_trotter_steps=5, max_display_wires=8, use_pennylane_draw=True)[源代码]¶
生成 QPE 电路结构的文本可视化。
使用 qml.draw(),并设置 decimals=None 和 level=0,以清楚显示电路结构,避免参数干扰。
- 参数:
hamiltonian (LinearCombination) -- PennyLane 分子哈密顿量
hf_state (ndarray) -- HF 参考态的二进制数组
n_estimation_wires (int) -- 估计量子比特数
base_time (float) -- 基础演化时间
n_trotter_steps (int) -- 每次演化的 Trotter 步数
max_display_wires (int) -- 完整电路显示的最大线路数(默认:8)
use_pennylane_draw (bool) -- 使用 qml.draw() 可视化(默认:True)
- 返回:
电路的字符串表示
- 返回类型:
str
QM/MM 系统¶
用于分子模拟的 QM/MM 系统构建器。
- class q2m3.core.qmmm_system.Atom(symbol, position, charge=0.0, is_qm=True)[源代码]¶
基类:
object表示具有位置和属性的原子。
- 参数:
symbol (str)
position (ndarray)
charge (float)
is_qm (bool)
- class q2m3.core.qmmm_system.QMMMSystem(qm_atoms, mm_model='tip3p', solvation_shells=1, num_waters=8)[源代码]¶
基类:
object构建并管理水环境中 H3O+ 的 QM/MM 系统。
此类划分 QM 与 MM 区域,并为量子计算准备嵌入势。
- 参数:
qm_atoms (list[Atom])
mm_model (str)
solvation_shells (int)
num_waters (int)
- __init__(qm_atoms, mm_model='tip3p', solvation_shells=1, num_waters=8)[源代码]¶
初始化 QM/MM 系统。
- 参数:
qm_atoms (list[Atom]) -- QM 区域中的原子列表(H3O+)
mm_model (str) -- MM 区域的水模型
solvation_shells (int) -- 溶剂化壳层数
num_waters (int) -- MM 区域中的水分子数
量子 QM/MM 编排器¶
整合所有组件的主要 Quantum-QM/MM 接口。
- class q2m3.core.quantum_qmmm.QuantumQMMM(qm_atoms, mm_waters=8, qpe_config=None, use_catalyst=False, rdm_config=None)[源代码]¶
基类:
objectQuantum-QM/MM 计算的主要接口。
协调 PySCF 经典计算、PennyLane 量子电路和 QM/MM 嵌入之间的工作流。
- 参数:
qm_atoms (list[Atom])
mm_waters (int)
qpe_config (dict[str, Any])
use_catalyst (bool)
rdm_config (dict[str, Any] | None)
- __init__(qm_atoms, mm_waters=8, qpe_config=None, use_catalyst=False, rdm_config=None)[源代码]¶
初始化 Quantum-QM/MM 计算器。
- 参数:
qm_atoms (list[Atom]) -- QM 区域中的原子
mm_waters (int) -- MM 区域中的水分子数
qpe_config (dict[str, Any]) -- QPE 算法配置
use_catalyst (bool) -- 为 QPE 电路启用 Catalyst @qjit 编译
rdm_config (dict[str, Any] | None) -- RDM 测量配置(默认:启用并使用默认值)- enabled: 启用 RDM 测量(默认:True)- n_shots: 测量次数(默认:1000)- include_off_diagonal: 测量非对角元素(默认:True)- symmetrize: 强制满足厄米对称性(默认:True)
- compute_ground_state(include_resource_estimation=False)[源代码]¶
使用 QPE 计算基态性质。
- 参数:
include_resource_estimation (bool) -- 若为 True,在输出中包含 EFTQC 资源估计。使用 PennyLane 的 DoubleFactorization 估计逻辑量子比特数、Toffoli 门数和 QPE 迭代次数。默认:False。
- 返回:
energy: 基态能量 (Hartree)
energy_hf: HF 参考能量 (Hartree)
energy_difference:
|E_QPE - E_HF|(Hartree)density_matrix: 电子密度矩阵
atomic_charges: Mulliken 电荷
convergence: 收敛信息
eftqc_resources: 请求时提供的 EFTQC 资源估计(可选)
timing: 用于性能分析的细分计时
- 返回类型:
Dictionary containing
约化密度矩阵¶
从量子态估计约化密度矩阵(RDM)。
对费米子算符进行 Jordan-Wigner 变换后,使用 Pauli 期望值测量 1-RDM。
关键公式:
Diagonal: gamma_pp = <a_p†a_p> = (1 - <Z_p>) / 2
Off-diagonal (p < q):
gamma_pq = 1/4 * [<X_p Z... X_q> + <Y_p Z... Y_q>
+ i(<X_p Z... Y_q> - <Y_p Z... X_q>)]
性能优化(阶段 7):- 批量测量:单个 QNode 返回所有可观测量(执行次数从 120x 降至 1x);- 通过 device_utils 实现 GPU 加速;- 支持 Catalyst @qjit。
- class q2m3.core.rdm.RDMEstimator(n_qubits, n_electrons, config=None)[源代码]¶
基类:
object使用 Pauli 期望值从量子态测量 1-RDM。
从 Trotter 时间演化制备的量子态测量单粒子约化密度矩阵(1-RDM)。使用 Jordan-Wigner 变换将费米子算符转换为 Pauli 可观测量。
性能优化:使用批量测量(单个 QNode),而非每个可观测量单独使用 QNode,可获得 10-50x 加速。
- 参数:
n_qubits (int)
n_electrons (int)
config (dict[str, Any] | None)
- __init__(n_qubits, n_electrons, config=None)[源代码]¶
初始化 RDM 估计器。
- 参数:
n_qubits (int) -- 自旋轨道数(Jordan-Wigner 映射中的量子比特数)
n_electrons (int) -- 系统中的电子数
config (dict[str, Any] | None) -- 可选配置字典,包含以下键:- n_shots: 测量次数(默认:1000);- include_off_diagonal: 测量非对角元素(默认:True);- symmetrize: 强制满足厄米对称性(默认:True);- output_basis: "spin" 或 "spatial"(默认:"spin")。
- measure_1rdm(hamiltonian, hf_state, base_time, n_trotter_steps, device_type='default.qubit', use_catalyst=False)[源代码]¶
通过批量测量,从 Trotter 演化态测量 1-RDM。
制备
|HF>,施加 TrotterProduct 时间演化,再在单个 QNode 中将所有 1-RDM 元素测为 Pauli 期望值。- 参数:
hamiltonian (LinearCombination) -- PennyLane 分子哈密顿量
hf_state (ndarray) -- Hartree-Fock 参考态的二进制数组
base_time (float) -- Trotter 演化时间
n_trotter_steps (int) -- Trotter 步数
device_type (str) -- 设备选择策略:- "auto":自动选择最佳设备 (GPU > lightning.qubit > default.qubit);- "default.qubit":标准 PennyLane 模拟器;- "lightning.qubit":高性能 CPU 模拟器;- "lightning.gpu":GPU 加速模拟器。
use_catalyst (bool) -- 启用 Catalyst @qjit 编译
- 返回:
numpy 数组形式的 1-RDM,形状为 (n_qubits, n_qubits)
- 返回类型:
ndarray
- build_rdm_observables()[源代码]¶
构建所有 1-RDM 元素的 Pauli 可观测量(旧接口)。
- 返回:
将 (p, q) 索引映射到 PennyLane 可观测量的字典。p == q 时为粒子数算符可观测量;p < q 时为包含 4 个 Pauli 可观测量的元组,分别用于实部和虚部。
- 返回类型:
dict[tuple[int, int], Any]
- enforce_physical_constraints(rdm_raw)[源代码]¶
强制 1-RDM 满足物理约束。
约束:1. 厄米性:γ_pq = γ_qp*;2. 半正定性:所有本征值 >= 0;3. 迹归一化:Tr(γ) = N_electrons。
- 参数:
rdm_raw (ndarray) -- 测量得到的原始 1-RDM
- 返回:
满足物理约束的 1-RDM
- 返回类型:
ndarray
- draw_rdm_circuit(hamiltonian, hf_state, base_time, n_trotter_steps, max_observables=4, use_pennylane_draw=True)[源代码]¶
生成 RDM 测量电路的文本可视化。
使用 qml.draw(),并设置 decimals=None 和 level=0,以清楚显示电路结构,避免参数干扰。
- 参数:
hamiltonian (LinearCombination) -- PennyLane 分子哈密顿量
hf_state (ndarray) -- HF 参考态的二进制数组
base_time (float) -- Trotter 演化时间
n_trotter_steps (int) -- Trotter 步数
max_observables (int) -- 显示的最大可观测量数(默认:4)
use_pennylane_draw (bool) -- 使用 qml.draw() 可视化(默认:True)
- 返回:
电路的字符串表示
- 返回类型:
str
- spin_to_spatial_rdm(spin_rdm)[源代码]¶
将自旋轨道 1-RDM 转换为空间轨道 1-RDM。
对于限制性体系,空间 RDM = alpha 与 beta 自旋块之和。
- 参数:
spin_rdm (ndarray) -- 自旋轨道基下的 1-RDM,形状为 (2*n_spatial, 2*n_spatial)
- 返回:
空间轨道基下的 1-RDM,形状为 (n_spatial, n_spatial)
- 返回类型:
ndarray
- active_mo_to_ao_rdm(active_spatial_rdm, mo_coeff, mo_occ, active_electrons, active_orbitals)[源代码]¶
将活性空间的空间轨道 1-RDM 转换到 AO 基。
步骤:1. 将活性空间 RDM 嵌入完整 MO RDM;2. 从 MO 基变换到 AO 基:P_AO = C @ P_MO @ C^T。
- 参数:
active_spatial_rdm (ndarray) -- 活性 MO 基下的 1-RDM,形状为 (active_orbitals, active_orbitals)
mo_coeff (ndarray) -- HF 的 MO 系数矩阵,形状为 (n_ao, n_mo)
mo_occ (ndarray) -- HF 的 MO 占据数,形状为 (n_mo,)
active_electrons (int) -- 活性电子数
active_orbitals (int) -- 活性轨道数
- 返回:
AO 基下的 1-RDM,形状为 (n_ao, n_ao)
- 返回类型:
ndarray
- q2m3.core.rdm.measure_rdm_from_qpe_state(hamiltonian, hf_state, n_electrons, base_time, n_trotter_steps, config=None, device_type='default.qubit', use_catalyst=False)[源代码]¶
从类似 QPE 的态测量 1-RDM 的便捷函数。
- 参数:
hamiltonian (LinearCombination) -- PennyLane 分子哈密顿量
hf_state (ndarray) -- Hartree-Fock 参考态
n_electrons (int) -- 电子数
base_time (float) -- 演化时间
n_trotter_steps (int) -- Trotter 步数
config (dict[str, Any] | None) -- 可选 RDM 配置
device_type (str) -- PennyLane 设备选择
use_catalyst (bool) -- 启用 Catalyst @qjit 编译
- 返回:
1-RDM numpy 数组
- 返回类型:
ndarray
资源估计¶
EFTQC 资源估计模块。
此模块封装 PySCFPennyLaneConverter.estimate_qpe_resources(),也直接从活性空间积分估计资源。它以结构化数据类返回早期容错量子计算机(EFTQC)的资源估计结果。
- class q2m3.core.resource_estimation.EmbeddingDiagnostics(active_indices, delta_h_diag_fro, delta_h_offdiag_fro, delta_h_offdiag_to_diag, delta_h_hermitian_max_abs, delta_h_trace_ha, delta_nuclear_mm_ha, delta_core_constant_ha, fixed_mo, two_electron_tensor_fixed)[源代码]¶
基类:
objectMM 单电子嵌入资源结果的标量诊断信息。
- 参数:
active_indices (tuple[int, ...])
delta_h_diag_fro (float)
delta_h_offdiag_fro (float)
delta_h_offdiag_to_diag (float | None)
delta_h_hermitian_max_abs (float)
delta_h_trace_ha (float)
delta_nuclear_mm_ha (float)
delta_core_constant_ha (float)
fixed_mo (bool)
two_electron_tensor_fixed (bool)
- active_indices¶
用于活性块的真空分子轨道索引。
- 类型:
tuple[int, ...]
- delta_h_diag_fro¶
活性空间微扰对角部分的 Frobenius 范数。
- 类型:
float
- delta_h_offdiag_fro¶
非对角微扰的 Frobenius 范数。
- 类型:
float
- delta_h_offdiag_to_diag¶
非对角部分范数与对角部分范数之比。
- 类型:
float | None
- delta_h_hermitian_max_abs¶
最大的反厄米残差。
- 类型:
float
- delta_h_trace_ha¶
活性空间微扰的迹,单位为 Hartree。
- 类型:
float
- delta_nuclear_mm_ha¶
MM 引起的核常数差,单位为 Hartree。
- 类型:
float
- delta_core_constant_ha¶
冻结核单电子项与核 MM 常数之和。
- 类型:
float
- fixed_mo¶
微扰是否在真空 MO 框架中表示。
- 类型:
bool
- two_electron_tensor_fixed¶
双电子张量是否保持真空值。
- 类型:
bool
- class q2m3.core.resource_estimation.EFTQCResources(hamiltonian_1norm, logical_qubits, toffoli_gates, n_terms, target_error, n_system_qubits, basis, n_mm_charges, embedding_mode='none', embedding_diagnostics=None, walk_operator_calls=None)[源代码]¶
基类:
object单个 EFTQC 配置的资源估计结果。
- 参数:
hamiltonian_1norm (float)
logical_qubits (int)
toffoli_gates (int)
n_terms (int | None)
target_error (float)
n_system_qubits (int)
basis (str)
n_mm_charges (int)
embedding_mode (str)
embedding_diagnostics (EmbeddingDiagnostics | None)
walk_operator_calls (int | None)
- hamiltonian_1norm¶
哈密顿量的 Lambda(1-范数),单位为 Hartree。
- 类型:
float
- logical_qubits¶
所需逻辑量子比特数。
- 类型:
int
- toffoli_gates¶
整次 QPE 运行的非 Clifford(Toffoli)门总数(PennyLane
DoubleFactorization.gates)。- 类型:
int
- n_terms¶
哈密顿量项数。使用 DoubleFactorization 资源估计时为 None,因为该方法不构建完整的 PennyLane Hamiltonian 对象。
- 类型:
int | None
- target_error¶
目标能量误差,单位为 Hartree。
- 类型:
float
- n_system_qubits¶
系统寄存器大小 = n_orbitals * 2(Jordan-Wigner)。
- 类型:
int
- basis¶
使用的基组,例如 "sto-3g"。
- 类型:
str
- n_mm_charges¶
MM 点电荷数。真空时为 0。
- 类型:
int
- embedding_mode¶
实际嵌入状态("none"、"diagonal" 或 "full_oneelectron")。
- 类型:
str
- embedding_diagnostics¶
固定 MO 单电子嵌入的可选标量诊断信息。
- walk_operator_calls¶
QPE 中量子比特化游走算符的调用次数,
ceil(pi * lambda / (2 * target_error))(PennyLaneDoubleFactorization.estimation_cost)。仅供参考:这些调用已计入toffoli_gates。- 类型:
int | None
- class q2m3.core.resource_estimation.ResourceComparisonResult(vacuum, solvated, delta_lambda_percent, delta_gates_percent)[源代码]¶
基类:
object真空与溶剂化系统的 EFTQC 资源比较。
- 参数:
vacuum (EFTQCResources)
solvated (EFTQCResources)
delta_lambda_percent (float)
delta_gates_percent (float)
- vacuum¶
无 MM 嵌入时的资源估计。
- solvated¶
带 MM 点电荷嵌入的资源估计。
- delta_lambda_percent¶
溶剂化引起的哈密顿量 1-范数百分比变化:(solvated - vacuum) / vacuum * 100。
- 类型:
float
- delta_gates_percent¶
溶剂化引起的 Toffoli 门数百分比变化:(solvated - vacuum) / vacuum * 100。
- 类型:
float
- q2m3.core.resource_estimation.estimate_resources(symbols, coords, charge=0, basis='sto-3g', active_electrons=None, active_orbitals=None, target_error=0.0016, mm_charges=None, mm_coords=None, embedding_mode='full_oneelectron')[源代码]¶
估计分子系统的 EFTQC 资源需求。
封装 PySCFPennyLaneConverter.estimate_qpe_resources(),返回结构化、不可变的 EFTQCResources 数据类,而非原始字典。
- 参数:
symbols (list[str]) -- 原子符号列表,例如 ['H', 'H']。
coords (ndarray) -- 以埃为单位的原子坐标,形状为 (n_atoms, 3)。
charge (int) -- 分子总电荷,默认为 0。
basis (str) -- 基组名称,默认为 "sto-3g"。
active_electrons (int | None) -- 活性空间电子数(可选)。
active_orbitals (int | None) -- 活性空间轨道数(可选)。
target_error (float) -- 目标能量误差,单位为 Hartree(默认:0.0016 = 1 kcal/mol)。
mm_charges (ndarray | None) -- MM 点电荷数组(可选,启用溶剂化哈密顿量)。
mm_coords (ndarray | None) -- 以埃为单位的 MM 电荷坐标,形状为 (n_mm, 3)。
embedding_mode (str) -- 资源结果的 MM 嵌入模式。默认保留原有的完整固定 MO 单电子资源估计行为。
- 返回:
所有资源字段均已填充的 EFTQCResources 数据类。
- 返回类型:
- q2m3.core.resource_estimation.estimate_qpe_resources_from_integrals(h1, h2, *, basis, target_error=0.0016)[源代码]¶
估计给定活性空间积分对应哈密顿量的 EFTQC 资源。
估计值是该哈密顿量的双因子分解成本,DoubleFactorization 的设置与
estimate_resources相同。不运行任何电路。- 参数:
h1 (ndarray) -- 实对称单电子积分,形状为
(norb, norb)。h2 (ndarray) -- 化学家记号
(pq|rs)的实数双电子积分,形状为(norb, norb, norb, norb)。basis (str) -- 写入结果的基组名称。
target_error (float) -- 目标能量误差,单位为 Hartree(默认:0.0016 = 1 kcal/mol)。
- 返回:
真空活性空间哈密顿量的 EFTQCResources。
- 抛出:
ValueError -- 形状不匹配,或积分不满足实数化学家记号的置换对称性。
- 返回类型:
- q2m3.core.resource_estimation.compare_vacuum_solvated(symbols, coords, charge=0, basis='sto-3g', active_electrons=None, active_orbitals=None, mm_charges=None, mm_coords=None, target_error=0.0016, embedding_mode='full_oneelectron')[源代码]¶
比较真空与溶剂化系统的 EFTQC 资源需求。
此函数调用 estimate_resources() 两次:一次不使用 MM 电荷(真空),另一次使用 MM 电荷(溶剂化)。随后计算百分比变化。
- 参数:
symbols (list[str]) -- 原子符号列表。
coords (ndarray) -- 以埃为单位的原子坐标,形状为 (n_atoms, 3)。
charge (int) -- 分子总电荷,默认为 0。
basis (str) -- 基组名称,默认为 "sto-3g"。
active_electrons (int | None) -- 活性空间电子数(可选)。
active_orbitals (int | None) -- 活性空间轨道数(可选)。
mm_charges (ndarray | None) -- 溶剂化估计所用的 MM 点电荷。
mm_coords (ndarray | None) -- 溶剂化估计所用的 MM 电荷坐标,单位为埃。
target_error (float) -- 目标能量误差,单位为 Hartree(默认:0.0016)。
embedding_mode (str) -- 溶剂化资源结果的 MM 嵌入模式。
- 返回:
包含两项估计及其变化量的 ResourceComparisonResult。
- 返回类型:
- q2m3.core.resource_estimation.derive_t_resources(toffoli_gates)[源代码]¶
从 Toffoli 门数推导 T 门数和保守的 T 深度。
DoubleFactorization 返回 Toffoli 门数与逻辑量子比特数,但不返回表面码类分析所需的 T 深度。使用标准容错关系 T-count = 7 * Toffoli-count,并使用深度的保守串行上界。
- 参数:
toffoli_gates (int) -- DoubleFactorization 给出的 Toffoli 门总数。
- 返回:
t_count: 7 * toffoli_gates
toffoli_depth: 保守串行上界 (= toffoli_gates)
t_depth: T_PER_TOFFOLI * toffoli_depth(串行上界)
- 返回类型:
Dict with
- q2m3.core.resource_estimation.surface_code_distance(logical_qubits, toffoli_gates, p_phys=0.001, failure_budget=0.01)[源代码]¶
使整次运行的失败概率低于
failure_budget的最小奇数表面码距离。此函数使用 Litinski (Quantum 3, 128 (2019), Eq. 10) 的逻辑错误模型:每个逻辑量子比特在每个码周期的错误率为
p_L(d) = 0.1 * (100 * p_phys) ** ((d + 1) / 2)。假设每个 Toffoli 对每个逻辑量子比特均占用一个逻辑时间步,每步为d个码周期。- 参数:
logical_qubits (int) -- 逻辑(数据)量子比特数。
toffoli_gates (int) -- 算法的串行 Toffoli 总数。
p_phys (float) -- 每个门/码周期的物理错误率。
failure_budget (float) -- 可接受的总逻辑失败概率。
- 返回:
码距
d([3, 99] 内的奇数)。- 抛出:
ValueError -- 不存在小于 101 且满足预算的码距时。
- 返回类型:
int
- q2m3.core.resource_estimation.estimate_eftqc_runtime(toffoli_gates, logical_qubits, p_phys=0.001, t_cycle_microseconds=1.0, t_react_microseconds=10.0, n_factories=1, failure_budget=0.01)[源代码]¶
估计 EFTQC QPE 运行的实际时间与物理资源占用。
表面码模型:
runtime = toffoli_gates * tick,其中tick = max(t_react, 5.5 * d * t_cycle / n_factories)。每个工厂每5.5 d个码周期产出一个 CCZ(Gidney & Fowler, Quantum 3, 135 (2019); Babbush et al., PRX Quantum 2, 010103 (2021), Eq. 6),且 tick 不低于经典反应时间(Lee et al., PRX Quantum 2, 030305 (2021))。toffoli_gates是整个算法的**总**门数。PennyLaneDoubleFactorization.gates/EFTQCResources.toffoli_gates返回的正是此值。它已包含ceil(pi*lambda/(2*eps))次相位估计重复。因此,此函数不再乘以迭代次数。- 参数:
toffoli_gates (int) -- 算法的 Toffoli 总数。
logical_qubits (int) -- 逻辑量子比特数(决定码距)。
p_phys (float) -- 物理错误率(默认 1e-3,采用超导假设)。
t_cycle_microseconds (float) -- 表面码周期时间(默认 1 us)。
t_react_microseconds (float) -- 经典反应时间下限(默认 10 us)。
n_factories (int) -- 并行 CCZ 工厂数。默认为 1(串行上界)。Lee 2021 FeMoco 使用 4 个。
failure_budget (float) -- 可接受的总逻辑失败概率。
- 返回:
字典,包含
code_distance、tick_microseconds、regime("factory" 或 "reaction")、runtime_{microseconds,seconds,hours,days}、physical_qubits(每个逻辑量子比特 2(d+1)^2,加上每个工厂 15d x 8d),并回传输入假设。- 返回类型:
dict[str, float | int | str]
设备工具¶
量子设备选择与管理工具。
为 QPE 与 RDM 模块提供统一的设备选择逻辑,支持 GPU 加速并兼容 Catalyst。
重要:q2m3 有两套独立的 GPU 支持系统:
PennyLane Lightning GPU (cuQuantum/CUDA):- 用于标准 QPE 电路(不使用 @qjit);- 通过 HAS_LIGHTNING_GPU 标志检测;- 需要 pennylane-lightning[gpu]、cuQuantum 和 CUDA。
JAX/Catalyst GPU (jaxlib[cuda]):- 用于 Catalyst @qjit 编译电路;- 通过 HAS_JAX_CUDA 标志检测;- 需要 jax[cuda11_pip] 或 jax[cuda12_pip]。
启用 Catalyst @qjit 时,即使设备为 lightning.gpu,实际执行后端也由 JAX 决定,而非 PennyLane。若 JAX 不支持 CUDA,无论设备名称为何,Catalyst 均在 CPU 上运行。
- q2m3.core.device_utils.get_best_available_device()[源代码]¶
返回当前最佳可用设备的名称。
优先级:lightning.gpu > lightning.qubit > default.qubit
- 返回:
设备名称字符串
- 返回类型:
str
- q2m3.core.device_utils.get_catalyst_backend_info()[源代码]¶
获取 Catalyst 执行后端的详细信息。
重要:Catalyst @qjit 使用 JAX 作为执行后端,该后端独立于 PennyLane 设备选择。即使 device="lightning.gpu",若 JAX 不支持 CUDA,Catalyst 仍在 CPU 上运行。
- 返回:
jax_backend: JAX 默认后端("cpu"、"cuda"、"gpu")
has_jax_cuda: JAX 是否支持 CUDA
effective_device: Catalyst 的实际执行设备
warning: 期望使用 GPU 但 GPU 不可用时的可选警告信息
- 返回类型:
Dictionary with
- q2m3.core.device_utils.get_effective_catalyst_device_label()[源代码]¶
获取 Catalyst 执行的实际设备标签。
get_best_available_device() 返回 PennyLane 设备名称;此函数返回 Catalyst 实际运行的设备(由 JAX 后端决定为 CPU 或 GPU)。
- 返回:
CPU)" 或 "lightning.gpu (JAX: GPU)"
- 返回类型:
Human-readable label like "lightning.gpu (JAX
- q2m3.core.device_utils.get_catalyst_effective_backend()[源代码]¶
获取便于阅读的 Catalyst 执行后端标签。
- 返回:
类似 "GPU (JAX CUDA)" 或 "CPU (JAX)" 的字符串
- 返回类型:
str
- q2m3.core.device_utils.select_device(device_type, n_wires, use_catalyst=False, seed=None)[源代码]¶
根据 device_type 参数选择量子设备。
注意:自 PennyLane v0.43 起,在设备上设置 shots 已弃用。改为对 QNode 使用 qml.set_shots() 变换。
- 参数:
device_type (str) -- 设备选择策略:- "auto":自动选择可用的最佳设备 (GPU > lightning.qubit > default.qubit);- "default.qubit":标准 PennyLane 模拟器;- "lightning.qubit":高性能 CPU 模拟器;- "lightning.gpu":GPU 加速模拟器(需要 cuQuantum)。
n_wires (int) -- 量子比特数
use_catalyst (bool) -- 若为 True,确保回退设备兼容 Catalyst(使用 lightning.qubit,而非 default.qubit)
seed (int | None) -- 可选的设备随机种子,用于可复现的有限次数测量采样
- 返回:
PennyLane 设备实例
哈密顿量工具¶
PennyLane 哈密顿量算符工具。
提供辅助函数,用于分解 PennyLane Sum/Hamiltonian 对象(兼容 PennyLane 0.44+),以及构建算符索引映射,以高效更新 QM/MM 模拟中的系数。
- q2m3.core.hamiltonian_utils.decompose_hamiltonian(H)[源代码]¶
从 PennyLane Sum/Hamiltonian 提取 (coeffs, ops)。
PennyLane 0.44+ 的 qml.qchem.molecular_hamiltonian 返回由 SProd 组成的 Sum。qml.dot(coeffs, ops) 需要分离的系数与算符。
- 参数:
H -- PennyLane 哈密顿量(SProd 算符之和)
- 返回:
(coefficients, operators) 元组,其中 coefficients 为浮点数,operators 为 PennyLane 算符实例。
- 返回类型:
tuple[list[float], list]
- q2m3.core.hamiltonian_utils.build_operator_index_map(ops, n_system_qubits, coeffs)[源代码]¶
扫描 ops,查找 Identity 与单个 Z(wire) 的索引,用于 MM 系数更新。
若 range(n_system_qubits) 中任一 wire 缺少 Z(wire),则追加 coeff=0.0 的占位项,确保所有自旋轨道都能接收 MM 修正。
- 参数:
ops (list) -- PennyLane 算符列表(来自 decompose_hamiltonian)
n_system_qubits (int) -- 系统量子比特数 (= 2 * active_orbitals)
coeffs (list[float]) -- 对应的系数列表(可能扩展)
- 返回:
index_map: {"identity_idx": int, "z_wire_idx": {wire: idx, ...}}
extended_coeffs: 追加所有缺失 Z 项后的系数
extended_ops: 追加所有缺失 Z 项后的算符
- 返回类型:
Tuple of (index_map, extended_coeffs, extended_ops) where
求解器扩展点¶
用于基态能量估计的量子求解器接口。
QM/MM 模拟中量子求解器的抽象基类。具体实现(QPE、VQE 等)位于独立模块中。
此模块可独立使用,不从 core/__init__.py 导出。未来的 VQE/QAOA 求解器可直接导入:
from q2m3.core.quantum_solver import QuantumSolver, SolverResult
- class q2m3.core.quantum_solver.SolverResult(energy, phase, raw_measurements, metadata=<factory>)[源代码]¶
基类:
object量子求解器的通用结果容器。
- 参数:
energy (float)
phase (float)
raw_measurements (Any)
metadata (dict)
- energy¶
估计的基态能量,单位为 Hartree。
- 类型:
float
- phase¶
QPE 估计的相位值。
- 类型:
float
- raw_measurements¶
算法特有的测量数据。
- 类型:
Any
- metadata¶
算法特有的附加信息。
- 类型:
dict