Skip to content

Manual

MolPy

面向分子模拟工作流的可编程 Python 工具包。

MolPy

管线

输入分子描述,输出可运行系统

一个分子历经所有阶段,无需写入磁盘。化学信息、坐标和参数分层存放——可在任意边界暂停,检查已有内容,然后继续推进。

同一表示 · 六个阶段 同一个分子图,构建、类型化、填充坐标——全流程走完,直接导出或原地分析

快速入门 展示了一个完整流程;示例画廊 收集了一批可直接复制运行的短工作流。

实践

每个阶段只需几行 Python

下面六张卡片与管线的各阶段一一对应。以聚合物为 演示领域,是因为它涉及的耦合、交联和多分散性对编辑机制的每个环节都有挑战性——但这并非 MolPy 建模能力的边界。

01 · 解析/构建

用文本描述化学结构

一行 SMILES 或 BigSMILES 就能定义可编辑的结构——无论单个分子还是整条聚合物链。

from molpy.builder import polymer

mol = mp.parser.parse_molecule("CCO")   # 从 SMILES 得到一个分子
peo = polymer("{[<]CCOCC[>]}|10|")      # 或整条链,聚合度 DP = 10
02 · 编辑

逐个原子地重新连接拓扑

合并结构、创建和断开化学键、移除离去基团——然后在新连接处重新推导出角和二面角。

chain = mon_a.merge(mon_b)                # 合并两个单体
chain.def_bond(anchor_C, port_O)          # 形成新的 C–O 键
chain.del_atom(o_leave, h1, h2)           # 移除离去的水分子
chain = chain.get_topo(gen_angle=True, gen_dihe=True)
03 · 类型化

在数据层面分配类型

用 SMARTS 匹配把每个原子、键、角和二面角映射到力场参数——导出前就能检查和验证。

ff    = mp.io.read_xml_forcefield("oplsaa.xml")      # 内置 OPLS-AA
typed = mp.typifier.OplsTypifier(ff).typify(chain)
04 · 填充

使用 Packmol 填满周期性盒子

在目标密度下无碰撞填充,由 Python 驱动 Packmol 来完成。想要纯 Rust 版本?我们的 molpack 填充器尚在测试阶段,欢迎试用。

from molpy.pack import Packmol, Target, InsideBoxConstraint

target = Target(typed.to_frame(), 500, InsideBoxConstraint(length=30.0))
packed = Packmol()([target], seed=42)     # 一个无碰撞的 Frame
05 · 导出

写入你的引擎真正能运行的文件

每个文件一条命令:同时写出 LAMMPS data 文件和力场系数。GROMACS、PDB 和 HDF5 的写入接口也遵循同样的模式。

packed.box = mp.Box.cubic(30.0)
mp.io.write_lammps_data("system.data", packed, atom_style="full")
mp.io.write_lammps_forcefield("system.ff", ff)
06 · 分析

将轨迹转换为可观测量

同一份数据直接传给 Rust 后端计算内核——两次调用就能得到近邻搜索和 g® 结果。另有三十多种分析功能可用。

from molpy.compute import NeighborList, RDF

neighbors = NeighborList(cutoff=8.0)(packed)
result    = RDF(n_bins=50, r_max=8.0)(packed, neighbors)   # 整个盒子的 g(r)

设计理念

为扩展而生

首先是库,不是黑盒:共享数据模型、Rust 计算内核,加上贯穿始终的显式接缝——你可以取用其中任意一块,替换另一块,不必分叉就能扩展任何部分。

一个数据结构,整个生态
所有 MolCrafts 工具共享同一套 molrs 后端抽象数据结构——molpack、molvis、molmcp 都能直接读取。工具之间不需要转换器,不需要胶水代码。
全面依托 Rust 内核
FrameBlock 以及每个计算算子的底层都是 molrs——一个 Rust 列存储,提供零拷贝 NumPy 视图和 O(N) 链接网格近邻搜索。
为 LLM 智能体打造
molmcp 套件通过 MCP 提供 MolPy 的符号、文档和实时结构——智能体能检查 Frame 并调用真实 API,依据源码而非猜测。
使用其中一块,或全部使用
解析器、构建器、类型化器、填充器以及 I/O 和计算模块之间只通过显式数据通信——没有隐藏的共享状态。只导入需要的那一层,其余可忽略。
没有任何硬编码
新的计算算子、I/O 格式、力场风格或类型化器都可以从核心外部注册——内部的目录是开放注册表,而非硬编码列表。
端到端类型化
公共 API 全都带有完整的类型提示,CI 中用 Astral 的 ty 检查。编辑器会给出真实的签名补全,不会回退到 Any

生态

一个精心设计的抽象数据结构——无需胶水代码

你在 MolPy 中构建的抽象数据结构,同样能被其他 MolCrafts 工具直接读取。共享一个数据模型,工具之间不需要任何适配器。

molvis — 交互式 3D 分子

在浏览器中渲染核心抽象数据结构:一个独立 JavaScript 库、一个可嵌入 Jupyter 的笔记本查看器,以及一个编辑器,全都基于同一套 GPU 渲染引擎。拖动阿司匹林就能旋转它。

探索 molvis →

molpack
分子填充引擎——同一个无碰撞填充器,以 CLI、Rust crate 和 Python 包三种形式提供。
molmcp
面向 LLM 智能体的 MCP 服务器——基于图的代码发现以及实时生态提供者。
molrs
共享的 Rust 分子内核——核心抽象数据结构,带有 Python、WASM 和 C 绑定。

集成

与你已有的工具协同工作

外部工具通过显式适配器和封装器连接——每个集成都是可选的,每个边界都清晰可见。

RDKit
分子图和 RDKit Mol 之间的双向转换,可用于嵌入、构象生成和 SMILES 导出。
AmberTools
用 Python 直接驱动 antechamber、parmchk2 和 tleap,生成 GAFF 电荷和拓扑。
Packmol
通过类型化约束接口,实现周期性盒子的无碰撞填充。
LAMMPS · CP2K · OpenMM
从 MolPy 数据对象生成完整可运行的输入脚本。
molrs · MCP
底层的 Rust 列存储和计算内核;MCP 套件向 LLM 智能体提供符号和文档。

找到你的页面

手册

手册按阅读目的分为两类。教程侧重学习:从运行开始,逐章了解数据模型——适合从头到尾通读。指南侧重实践:完整的操作步骤——有具体任务时直接翻到对应篇章。

教程

学习。安装,十五分钟内运行第一个系统,然后逐章了解数据模型。

指南

上手操作。端到端配方——解析、构建、类型化、填充、导出——假设已读过教程。

计算

轨迹分析:分布、输运、序参数、光谱以及分析工作流。

API 参考

每个公共模块,从核心数据结构到引擎适配器。

开发者指南

贡献流程、架构概览以及新功能的扩展点。