接口 API¶
PySCF/PennyLane 桥接¶
PySCF-PennyLane 双向转换接口。
- class q2m3.interfaces.pyscf_pennylane.UnifiedDensityMatrix(dm_data, source='pyscf')[源代码]¶
基类:
object用于量电混合数据交换的统一密度矩阵接口。
此接口在 PySCF 与 PennyLane 表示之间转换。
- 参数:
dm_data (np.ndarray)
source (str)
- class q2m3.interfaces.pyscf_pennylane.PySCFPennyLaneConverter(basis='sto-3g', mapping='jordan_wigner')[源代码]¶
基类:
object用于在 PySCF 与 PennyLane 之间转换分子积分和哈密顿量的转换器。
- 参数:
basis (str)
mapping (str)
- __init__(basis='sto-3g', mapping='jordan_wigner')[源代码]¶
初始化转换器。
- 参数:
basis (str) -- 计算使用的基组
mapping (str) -- 费米子到量子比特的映射方案
- pyscf_to_pennylane_hamiltonian(symbols, coords, charge=0, active_electrons=None, active_orbitals=None)[源代码]¶
将分子结构转换为 PennyLane 量子比特哈密顿量。
- 参数:
symbols (list[str]) -- 原子符号列表 ['O', 'H', 'H', 'H']
coords (ndarray) -- 以埃为单位的原子坐标,形状为 (n_atoms, 3) 或 (n_atoms*3,)
charge (int) -- 分子总电荷,默认为 0
active_electrons (int | None) -- 活性空间中的活性电子数(可选)
active_orbitals (int | None) -- 活性空间中的活性轨道数(可选)
- 返回:
(hamiltonian, n_qubits, hf_state) - hamiltonian: PennyLane 哈密顿量算符 - n_qubits: 所需量子比特数 - hf_state: numpy 数组形式的 Hartree-Fock 参考态
- 返回类型:
tuple
- 抛出:
ValueError -- symbols 与 coords 的维度不匹配时
示例
>>> converter = PySCFPennyLaneConverter() >>> symbols = ["H", "H"] >>> coords = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 0.74]]) >>> H, n_qubits, hf_state = converter.pyscf_to_pennylane_hamiltonian( ... symbols, coords, charge=0 ... )
- pyscf_to_pennylane_hamiltonian_with_mm(symbols, coords, charge=0, mm_charges=None, mm_coords=None, active_electrons=None, active_orbitals=None, energy_shift=None, embedding_mode='diagonal')[源代码]¶
构建带 MM 点电荷嵌入的 PennyLane 哈密顿量。
使用微扰方法:1. 从 molecular_hamiltonian 获取真空哈密顿量(具有正确的本征谱);2. 计算单电子积分的 MM 修正;3. 将 MM 修正作为 Pauli 算符加入真空哈密顿量;4. 可选地施加能量平移,以提高 QPE 精度。
此方法在加入 MM 静电效应时,保留 molecular_hamiltonian 的正确本征谱结构。
energy_shift 参数启用“平移 QPE”,其中
H' = H - E_ref * I。这使 QPE 测量ΔE = E - E_ref,而非绝对能量 E,从而更精确地检测微小能量变化(例如 MM 效应),并避免 QPE 电路中的相位溢出。- 参数:
symbols (list[str]) -- 原子符号列表 ['O', 'H', 'H', 'H']
coords (ndarray) -- 以埃为单位的原子坐标,形状为 (n_atoms, 3)
charge (int) -- 分子总电荷
mm_charges (ndarray | None) -- MM 点电荷数组
mm_coords (ndarray | None) -- 以埃为单位的 MM 电荷坐标,形状为 (n_mm, 3)
active_electrons (int | None) -- 活性电子数
active_orbitals (int | None) -- 活性轨道数
energy_shift (float | None) -- 从哈密顿量中减去的参考能量(可选)。若提供此值,返回的哈密顿量为
H' = H - E_shift * I。这使 QPE 能够以更高精度测量ΔE。embedding_mode (Literal['diagonal', 'full_oneelectron']) -- MM 嵌入模式。
"diagonal"保留原有的 Identity/Z 系数更新路径。"full_oneelectron"将完整的固定 MO 单电子微扰作为固定算符哈密顿量加入。
- 返回:
(hamiltonian, n_qubits, hf_state)
- 返回类型:
tuple
- build_qmmm_hamiltonian(qm_mol, mm_charges, mm_coords)[源代码]¶
通过经典模拟构建带 MM 嵌入的 QM/MM 哈密顿量。
- 参数:
qm_mol (Any) -- PySCF 分子对象
mm_charges (ndarray) -- MM 区域的点电荷
mm_coords (ndarray) -- MM 电荷坐标
- 返回:
包含 QPE 模拟所需分子数据的字典
- 返回类型:
dict[str, Any]
- extract_molecular_orbitals(scf_result)[源代码]¶
从 PySCF 提取分子轨道系数。
- 参数:
scf_result (Any) -- PySCF RHF 计算结果
- 返回:
分子轨道系数矩阵的副本
- 抛出:
TypeError -- scf_result 不是闭壳层 RHF 结果
- 返回类型:
ndarray
- compute_overlap_integrals(mol)[源代码]¶
计算 Mulliken 分析所需的重叠积分。
- 参数:
mol (Any) -- PySCF 分子对象
- 返回:
重叠矩阵
- 返回类型:
ndarray
- estimate_qpe_resources(symbols, coords, charge=0, mm_charges=None, mm_coords=None, active_electrons=None, active_orbitals=None, target_error=0.0016, embedding_mode='full_oneelectron')[源代码]¶
使用 PennyLane 估计 QPE 算法的 EFTQC 资源。
使用 PennyLane 的 qml.estimator.DoubleFactorization 估计分子系统量子相位估计所需的量子计算资源(Toffoli 门和逻辑量子比特)。
支持真空哈密顿量和 MM 嵌入(溶剂化)哈密顿量。提供 mm_charges/mm_coords 时,单电子积分包含 QM-MM 静电相互作用项。默认的
embedding_mode="full_oneelectron"通过加入完整的固定 MO 活性空间Delta h矩阵,保留原有的资源估计行为。使用embedding_mode="diagonal"可请求仅含对角项的兼容结果,对应当前 QPE 系数路径。- 参数:
symbols (list[str]) -- 原子符号列表,例如 ['O', 'H', 'H', 'H']
coords (ndarray) -- 以埃为单位的原子坐标,形状为 (n_atoms, 3)
charge (int) -- 分子总电荷,默认为 0(中性)
mm_charges (ndarray | None) -- MM 点电荷数组(可选,用于溶剂化哈密顿量)
mm_coords (ndarray | None) -- 以埃为单位的 MM 电荷坐标,形状为 (n_mm, 3)
active_electrons (int | None) -- 活性空间中的电子数(可选)
active_orbitals (int | None) -- 活性空间中的空间轨道数(可选)
target_error (float) -- 目标能量误差,单位为 Hartree(默认:0.0016 = 1 kcal/mol)
embedding_mode (Literal['diagonal', 'full_oneelectron']) -- 资源结果的 MM 嵌入模式。
"full_oneelectron"加入完整的活性空间微扰。"diagonal"仅加入其对角项。未提供 MM 电荷时忽略此参数,但仍验证其取值。
- 返回:
logical_qubits: EFTQC 的逻辑量子比特数
toffoli_gates: 整次 QPE 运行的 Toffoli 总数 (DoubleFactorization.gates = estimation_cost * unitary_cost)
hamiltonian_1norm: Lambda(哈密顿量的 1-范数),单位为 Hartree
qpe_iterations: 游走算符调用次数 (= ceil(πλ/2ε))。仅供参考:这些调用已计入 toffoli_gates
trotter_steps: 建议的 Trotter 步数(启发式:10 × n_orbitals)
target_error: 目标误差,单位为 Hartree
n_electrons: 系统中的电子数
n_orbitals: 空间轨道数
basis: 使用的基组
mm_embedded: 是否施加了 MM 嵌入
n_mm_charges: MM 点电荷数(真空时为 0)
active_electrons: 传给估计器的活性空间电子数
active_orbitals: 传给估计器的活性空间轨道数
embedding_mode: 实际嵌入状态(真空时为 "none")
requested_embedding_mode: 请求的 MM 模式,真空时为 None
fixed_mo: 是否使用了固定 MO 的 MM 微扰
two_electron_tensor_fixed: 双电子张量是否取自真空
active_indices: 活性空间所含的真空 MO 索引
delta_h_*:MM 单电子微扰的诊断信息
- 返回类型:
Dictionary containing
- 抛出:
ValueError -- coords 形状与 symbols 数量不匹配时
示例
>>> converter = PySCFPennyLaneConverter() >>> symbols = ['H', 'H'] >>> coords = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 0.74]]) >>> # Vacuum Hamiltonian >>> result = converter.estimate_qpe_resources(symbols, coords) >>> # Solvated Hamiltonian with MM charges >>> mm_charges = np.array([-0.834, 0.417, 0.417]) >>> mm_coords = np.array([[3.0, 0.0, 0.0], [3.5, 0.8, 0.0], [3.5, -0.8, 0.0]]) >>> result_mm = converter.estimate_qpe_resources( ... symbols, coords, mm_charges=mm_charges, mm_coords=mm_coords ... )