mrtadf-depict 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mrtadf_depict-0.2.0/MANIFEST.in +8 -0
- mrtadf_depict-0.2.0/PKG-INFO +189 -0
- mrtadf_depict-0.2.0/README.md +166 -0
- mrtadf_depict-0.2.0/docs/ARCHITECTURE.md +81 -0
- mrtadf_depict-0.2.0/docs/DEVELOPER_GUIDE.md +516 -0
- mrtadf_depict-0.2.0/docs/MIGRATION.md +19 -0
- mrtadf_depict-0.2.0/docs/PUBLISHING.md +63 -0
- mrtadf_depict-0.2.0/docs/TESTING.md +26 -0
- mrtadf_depict-0.2.0/docs/TREE.md +58 -0
- mrtadf_depict-0.2.0/examples/compound_smiles.csv +41 -0
- mrtadf_depict-0.2.0/examples/use_python_api.py +65 -0
- mrtadf_depict-0.2.0/mrtadf_depict/__init__.py +17 -0
- mrtadf_depict-0.2.0/mrtadf_depict/__main__.py +4 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/__init__.py +1 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/bnn.py +142 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/bridges/__init__.py +5 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/bridges/hierarchy.py +131 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/bridges/multi.py +336 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/bridges/single.py +469 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/spiro/__init__.py +16 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/spiro/common.py +317 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/spiro/extreme.py +521 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/spiro/fast.py +530 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/spiro/geometry.py +199 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/spiro/topology.py +106 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/substituents/__init__.py +19 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/substituents/small_alkyl.py +177 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/substituents/terminals.py +176 -0
- mrtadf_depict-0.2.0/mrtadf_depict/algorithms/substituents/tert_butyl.py +175 -0
- mrtadf_depict-0.2.0/mrtadf_depict/batch.py +74 -0
- mrtadf_depict-0.2.0/mrtadf_depict/cli.py +66 -0
- mrtadf_depict-0.2.0/mrtadf_depict/core/__init__.py +5 -0
- mrtadf_depict-0.2.0/mrtadf_depict/core/geometry.py +120 -0
- mrtadf_depict-0.2.0/mrtadf_depict/core/validation.py +370 -0
- mrtadf_depict-0.2.0/mrtadf_depict/io.py +25 -0
- mrtadf_depict-0.2.0/mrtadf_depict/layout.py +61 -0
- mrtadf_depict-0.2.0/mrtadf_depict/pipeline.py +182 -0
- mrtadf_depict-0.2.0/mrtadf_depict/xyz.py +48 -0
- mrtadf_depict-0.2.0/mrtadf_depict.egg-info/PKG-INFO +189 -0
- mrtadf_depict-0.2.0/mrtadf_depict.egg-info/SOURCES.txt +49 -0
- mrtadf_depict-0.2.0/mrtadf_depict.egg-info/dependency_links.txt +1 -0
- mrtadf_depict-0.2.0/mrtadf_depict.egg-info/entry_points.txt +2 -0
- mrtadf_depict-0.2.0/mrtadf_depict.egg-info/requires.txt +6 -0
- mrtadf_depict-0.2.0/mrtadf_depict.egg-info/top_level.txt +1 -0
- mrtadf_depict-0.2.0/pyproject.toml +47 -0
- mrtadf_depict-0.2.0/setup.cfg +4 -0
- mrtadf_depict-0.2.0/tests/data/GGD1662.sdf +237 -0
- mrtadf_depict-0.2.0/tests/data/GGD1699.sdf +316 -0
- mrtadf_depict-0.2.0/tests/data/GGD1700.sdf +318 -0
- mrtadf_depict-0.2.0/tests/test_core.py +87 -0
- mrtadf_depict-0.2.0/tests/test_spiro_search.py +113 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mrtadf-depict
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: 用于 MR-TADF 分子的分层刚性二维结构绘图工具
|
|
5
|
+
Keywords: chemistry,cheminformatics,MR-TADF,RDKit,molecular-depiction
|
|
6
|
+
Classifier: Development Status :: 3 - Alpha
|
|
7
|
+
Classifier: Intended Audience :: Science/Research
|
|
8
|
+
Classifier: Natural Language :: Chinese (Simplified)
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Chemistry
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
Requires-Dist: numpy
|
|
19
|
+
Requires-Dist: rdkit
|
|
20
|
+
Requires-Dist: shapely
|
|
21
|
+
Provides-Extra: dev
|
|
22
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
23
|
+
|
|
24
|
+
# MR-TADF 二维结构绘图工具
|
|
25
|
+
|
|
26
|
+
`mrtadf_depict` 用于把 MR-TADF 分子的 SMILES 转成经过结构化排版的二维图,并可独立生成三维 XYZ 初始结构。
|
|
27
|
+
|
|
28
|
+
## 从 PyPI 安装
|
|
29
|
+
|
|
30
|
+
发布后,用户可以直接运行:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
python -m pip install mrtadf-depict
|
|
34
|
+
mrtadf-depict --help
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
也可以在 Python 中使用:
|
|
38
|
+
|
|
39
|
+
```python
|
|
40
|
+
from rdkit import Chem
|
|
41
|
+
from mrtadf_depict import optimize_mrtadf_layout
|
|
42
|
+
|
|
43
|
+
mol = Chem.MolFromSmiles("Brc1ccccc1")
|
|
44
|
+
result = optimize_mrtadf_layout(mol)
|
|
45
|
+
print(result.final_svg)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
当前二维流程重点保证:
|
|
49
|
+
|
|
50
|
+
- 螺芴及类似环系内部保持刚体,不拉伸芳环;
|
|
51
|
+
- 螺环中心两根连接键可独立变化,不强制等长,且优先旋转后拉长;
|
|
52
|
+
- 极端多螺环结构使用有界束搜索,不进行无限笛卡尔积;
|
|
53
|
+
- BNN 核心最终统一为两个 N 水平、B 位于上方;
|
|
54
|
+
- 简单卤素、CD3、叔丁基和小型支化基团使用确定性局部规则;
|
|
55
|
+
- 最终用 SVG 几何检查报告键交叉和标签碰撞。
|
|
56
|
+
|
|
57
|
+
## 五分钟运行
|
|
58
|
+
|
|
59
|
+
以下命令都从项目根目录 `mr_tadf_perf/` 执行。
|
|
60
|
+
|
|
61
|
+
### 第 1 步:创建环境
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python3 -m venv .venv
|
|
65
|
+
source .venv/bin/activate
|
|
66
|
+
python -m pip install --upgrade pip
|
|
67
|
+
python -m pip install -e "production[dev]"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
要求 Python 3.10 或更高版本。
|
|
71
|
+
|
|
72
|
+
### 第 2 步:运行测试
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
python -m pytest -q production/tests
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
当前预期结果:
|
|
79
|
+
|
|
80
|
+
```text
|
|
81
|
+
9 passed, 3 subtests passed
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 第 3 步:批量生成二维图片
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
mrtadf-depict depict \
|
|
88
|
+
--input production/examples/compound_smiles.csv \
|
|
89
|
+
--output output_2d \
|
|
90
|
+
--engine coordgen
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
如果没有使用命令行安装,也可以运行:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
PYTHONPATH=production python -m mrtadf_depict.cli depict \
|
|
97
|
+
--input production/examples/compound_smiles.csv \
|
|
98
|
+
--output output_2d \
|
|
99
|
+
--engine coordgen
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 第 4 步:检查结果
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
output_2d/
|
|
106
|
+
├── png/ # 预览图片
|
|
107
|
+
├── svg/ # 最终矢量图,也是碰撞验收依据
|
|
108
|
+
├── sdf/ # 带二维坐标的结构
|
|
109
|
+
└── report.csv # 状态、碰撞结果、警告和算法元数据
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
重点检查 `report.csv`:
|
|
113
|
+
|
|
114
|
+
1. `status` 应为 `ok`;
|
|
115
|
+
2. `final_svg` 理想值为 `(0, 0, 0)`;
|
|
116
|
+
3. `warnings` 应为空;
|
|
117
|
+
4. `metadata` 中若出现 `"adaptive_status": "manual_review"`,必须人工复核。
|
|
118
|
+
|
|
119
|
+
### 第 5 步:生成 XYZ
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
mrtadf-depict xyz \
|
|
123
|
+
--input production/examples/compound_smiles.csv \
|
|
124
|
+
--output output_xyz \
|
|
125
|
+
--seed 42
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
XYZ 使用独立的 `ETKDGv3 + UFF` 三维流程,不会把二维拉长的绘图键带入三维结构。
|
|
129
|
+
|
|
130
|
+
## 输入 CSV
|
|
131
|
+
|
|
132
|
+
必须包含两列:
|
|
133
|
+
|
|
134
|
+
```csv
|
|
135
|
+
compound_id,smiles
|
|
136
|
+
sample_001,Brc1ccc2...
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
其他列会被保留在输入中但不会参与计算。`compound_id` 用作输出文件名,因此应唯一且不含路径分隔符。
|
|
140
|
+
|
|
141
|
+
## Python API
|
|
142
|
+
|
|
143
|
+
稳定公共 API 只有三个名字:
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
from mrtadf_depict import (
|
|
147
|
+
PipelineConfig,
|
|
148
|
+
PipelineResult,
|
|
149
|
+
optimize_mrtadf_layout,
|
|
150
|
+
)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
完整可运行示例见:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
python production/examples/use_python_api.py
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## 开发文档
|
|
160
|
+
|
|
161
|
+
- [`docs/DEVELOPER_GUIDE.md`](docs/DEVELOPER_GUIDE.md):从安装到修改算法的完整中文步骤。
|
|
162
|
+
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md):各阶段职责和硬约束。
|
|
163
|
+
- [`docs/TREE.md`](docs/TREE.md):唯一有效的源码目录树。
|
|
164
|
+
- [`docs/TESTING.md`](docs/TESTING.md):测试范围与 GDG610、GGD1700 基准。
|
|
165
|
+
- [`docs/MIGRATION.md`](docs/MIGRATION.md):历史脚本到当前模块的映射。
|
|
166
|
+
- [`docs/PUBLISHING.md`](docs/PUBLISHING.md):PyPI 构建、上传与发布后验证。
|
|
167
|
+
|
|
168
|
+
## 开发原则
|
|
169
|
+
|
|
170
|
+
1. 不再创建 `v14.py`、`v15.py` 之类的版本脚本。
|
|
171
|
+
2. 新逻辑放进唯一对应模块,并增加回归测试。
|
|
172
|
+
3. 螺芴搜索内层禁止反复渲染 SVG。
|
|
173
|
+
4. 多臂搜索禁止直接构造完整笛卡尔积。
|
|
174
|
+
5. 找不到可靠布局时返回 `manual_review`,不要破坏原始结构。
|
|
175
|
+
6. 二维绘图与三维 XYZ 始终保持独立。
|
|
176
|
+
|
|
177
|
+
## 发布到 PyPI
|
|
178
|
+
|
|
179
|
+
发布者在 `production/` 目录执行:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
python -m pip install --upgrade build twine
|
|
183
|
+
python -m build
|
|
184
|
+
python -m twine check dist/*
|
|
185
|
+
python -m twine upload dist/*
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
PyPI API token 不要写进代码、配置文件或命令历史。完整安全步骤见
|
|
189
|
+
[`docs/PUBLISHING.md`](docs/PUBLISHING.md)。
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# MR-TADF 二维结构绘图工具
|
|
2
|
+
|
|
3
|
+
`mrtadf_depict` 用于把 MR-TADF 分子的 SMILES 转成经过结构化排版的二维图,并可独立生成三维 XYZ 初始结构。
|
|
4
|
+
|
|
5
|
+
## 从 PyPI 安装
|
|
6
|
+
|
|
7
|
+
发布后,用户可以直接运行:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
python -m pip install mrtadf-depict
|
|
11
|
+
mrtadf-depict --help
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
也可以在 Python 中使用:
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
from rdkit import Chem
|
|
18
|
+
from mrtadf_depict import optimize_mrtadf_layout
|
|
19
|
+
|
|
20
|
+
mol = Chem.MolFromSmiles("Brc1ccccc1")
|
|
21
|
+
result = optimize_mrtadf_layout(mol)
|
|
22
|
+
print(result.final_svg)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
当前二维流程重点保证:
|
|
26
|
+
|
|
27
|
+
- 螺芴及类似环系内部保持刚体,不拉伸芳环;
|
|
28
|
+
- 螺环中心两根连接键可独立变化,不强制等长,且优先旋转后拉长;
|
|
29
|
+
- 极端多螺环结构使用有界束搜索,不进行无限笛卡尔积;
|
|
30
|
+
- BNN 核心最终统一为两个 N 水平、B 位于上方;
|
|
31
|
+
- 简单卤素、CD3、叔丁基和小型支化基团使用确定性局部规则;
|
|
32
|
+
- 最终用 SVG 几何检查报告键交叉和标签碰撞。
|
|
33
|
+
|
|
34
|
+
## 五分钟运行
|
|
35
|
+
|
|
36
|
+
以下命令都从项目根目录 `mr_tadf_perf/` 执行。
|
|
37
|
+
|
|
38
|
+
### 第 1 步:创建环境
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
python3 -m venv .venv
|
|
42
|
+
source .venv/bin/activate
|
|
43
|
+
python -m pip install --upgrade pip
|
|
44
|
+
python -m pip install -e "production[dev]"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
要求 Python 3.10 或更高版本。
|
|
48
|
+
|
|
49
|
+
### 第 2 步:运行测试
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
python -m pytest -q production/tests
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
当前预期结果:
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
9 passed, 3 subtests passed
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 第 3 步:批量生成二维图片
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
mrtadf-depict depict \
|
|
65
|
+
--input production/examples/compound_smiles.csv \
|
|
66
|
+
--output output_2d \
|
|
67
|
+
--engine coordgen
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
如果没有使用命令行安装,也可以运行:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
PYTHONPATH=production python -m mrtadf_depict.cli depict \
|
|
74
|
+
--input production/examples/compound_smiles.csv \
|
|
75
|
+
--output output_2d \
|
|
76
|
+
--engine coordgen
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 第 4 步:检查结果
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
output_2d/
|
|
83
|
+
├── png/ # 预览图片
|
|
84
|
+
├── svg/ # 最终矢量图,也是碰撞验收依据
|
|
85
|
+
├── sdf/ # 带二维坐标的结构
|
|
86
|
+
└── report.csv # 状态、碰撞结果、警告和算法元数据
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
重点检查 `report.csv`:
|
|
90
|
+
|
|
91
|
+
1. `status` 应为 `ok`;
|
|
92
|
+
2. `final_svg` 理想值为 `(0, 0, 0)`;
|
|
93
|
+
3. `warnings` 应为空;
|
|
94
|
+
4. `metadata` 中若出现 `"adaptive_status": "manual_review"`,必须人工复核。
|
|
95
|
+
|
|
96
|
+
### 第 5 步:生成 XYZ
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
mrtadf-depict xyz \
|
|
100
|
+
--input production/examples/compound_smiles.csv \
|
|
101
|
+
--output output_xyz \
|
|
102
|
+
--seed 42
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
XYZ 使用独立的 `ETKDGv3 + UFF` 三维流程,不会把二维拉长的绘图键带入三维结构。
|
|
106
|
+
|
|
107
|
+
## 输入 CSV
|
|
108
|
+
|
|
109
|
+
必须包含两列:
|
|
110
|
+
|
|
111
|
+
```csv
|
|
112
|
+
compound_id,smiles
|
|
113
|
+
sample_001,Brc1ccc2...
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
其他列会被保留在输入中但不会参与计算。`compound_id` 用作输出文件名,因此应唯一且不含路径分隔符。
|
|
117
|
+
|
|
118
|
+
## Python API
|
|
119
|
+
|
|
120
|
+
稳定公共 API 只有三个名字:
|
|
121
|
+
|
|
122
|
+
```python
|
|
123
|
+
from mrtadf_depict import (
|
|
124
|
+
PipelineConfig,
|
|
125
|
+
PipelineResult,
|
|
126
|
+
optimize_mrtadf_layout,
|
|
127
|
+
)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
完整可运行示例见:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
python production/examples/use_python_api.py
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## 开发文档
|
|
137
|
+
|
|
138
|
+
- [`docs/DEVELOPER_GUIDE.md`](docs/DEVELOPER_GUIDE.md):从安装到修改算法的完整中文步骤。
|
|
139
|
+
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md):各阶段职责和硬约束。
|
|
140
|
+
- [`docs/TREE.md`](docs/TREE.md):唯一有效的源码目录树。
|
|
141
|
+
- [`docs/TESTING.md`](docs/TESTING.md):测试范围与 GDG610、GGD1700 基准。
|
|
142
|
+
- [`docs/MIGRATION.md`](docs/MIGRATION.md):历史脚本到当前模块的映射。
|
|
143
|
+
- [`docs/PUBLISHING.md`](docs/PUBLISHING.md):PyPI 构建、上传与发布后验证。
|
|
144
|
+
|
|
145
|
+
## 开发原则
|
|
146
|
+
|
|
147
|
+
1. 不再创建 `v14.py`、`v15.py` 之类的版本脚本。
|
|
148
|
+
2. 新逻辑放进唯一对应模块,并增加回归测试。
|
|
149
|
+
3. 螺芴搜索内层禁止反复渲染 SVG。
|
|
150
|
+
4. 多臂搜索禁止直接构造完整笛卡尔积。
|
|
151
|
+
5. 找不到可靠布局时返回 `manual_review`,不要破坏原始结构。
|
|
152
|
+
6. 二维绘图与三维 XYZ 始终保持独立。
|
|
153
|
+
|
|
154
|
+
## 发布到 PyPI
|
|
155
|
+
|
|
156
|
+
发布者在 `production/` 目录执行:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
python -m pip install --upgrade build twine
|
|
160
|
+
python -m build
|
|
161
|
+
python -m twine check dist/*
|
|
162
|
+
python -m twine upload dist/*
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
PyPI API token 不要写进代码、配置文件或命令历史。完整安全步骤见
|
|
166
|
+
[`docs/PUBLISHING.md`](docs/PUBLISHING.md)。
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# MR-TADF 二维布局算法结构
|
|
2
|
+
|
|
3
|
+
## 总入口
|
|
4
|
+
|
|
5
|
+
`pipeline.optimize_mrtadf_layout()` 负责阶段编排,不实现具体搜索算法。
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
初始二维坐标
|
|
9
|
+
→ 螺芴刚体搜索
|
|
10
|
+
→ 非螺芴桥臂
|
|
11
|
+
→ 小型支化基团
|
|
12
|
+
→ 简单终端原子
|
|
13
|
+
→ BNN 严格朝向
|
|
14
|
+
→ SVG 验收
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 螺芴模块
|
|
18
|
+
|
|
19
|
+
### 拓扑与几何
|
|
20
|
+
|
|
21
|
+
- `algorithms/spiro/topology.py`:识别 sp3 螺环中心、移动侧和固定侧。
|
|
22
|
+
- `algorithms/spiro/geometry.py`:生成严格刚体姿态,两根连接键可独立变化。
|
|
23
|
+
- `algorithms/spiro/common.py`:共享候选类型、评分键、长度层和结果元数据。
|
|
24
|
+
|
|
25
|
+
### 搜索策略
|
|
26
|
+
|
|
27
|
+
- `algorithms/spiro/fast.py`:1–2 臂生产路径。
|
|
28
|
+
1. 当前键长层生成粗角度候选。
|
|
29
|
+
2. 对最佳粗角度做局部细化。
|
|
30
|
+
3. 每臂保留 Top-K。
|
|
31
|
+
4. 双臂组合先按局部碰撞和净空剪枝。
|
|
32
|
+
5. 少量候选执行完整评分和 SVG 验收。
|
|
33
|
+
- `algorithms/spiro/extreme.py`:极端路径。
|
|
34
|
+
- 1–2 臂快速路径失败时扩大角度与束宽。
|
|
35
|
+
- 3–6 个独立臂使用逐臂束搜索,不构造完整笛卡尔积。
|
|
36
|
+
- 超时、刚体重叠或臂数超限时返回 `manual_review`。
|
|
37
|
+
- 若螺芴键线已经无交叉、仅剩后续局部规则可修复的标签碰撞,返回
|
|
38
|
+
`geometry_clean_pending_local_fixes`,不再重复搜索全部键长层。
|
|
39
|
+
- `algorithms/spiro/__init__.py`:稳定公共入口,不放算法细节。
|
|
40
|
+
|
|
41
|
+
旧版穷举基线已移到 `benchmarks/legacy_spiro_search.py`,不会进入生产包。
|
|
42
|
+
|
|
43
|
+
## 不可破坏的约束
|
|
44
|
+
|
|
45
|
+
1. 螺芴内部原子间距离保持不变。
|
|
46
|
+
2. 两根 C(sp3)–C 绘图键不要求等长,但都不能短于普通绘图键长。
|
|
47
|
+
3. 优先旋转;当前长度无解时才增加连接键长度。
|
|
48
|
+
4. 每根连接键最多拉长到配置上限,默认 5×。
|
|
49
|
+
5. SVG 检测只负责验收,不直接修改坐标。
|
|
50
|
+
6. 无可靠解时保留安全结构并标记人工复核。
|
|
51
|
+
|
|
52
|
+
## 桥臂模块
|
|
53
|
+
|
|
54
|
+
- `algorithms/bridges/single.py`:桥臂识别、刚体姿态和单臂搜索。
|
|
55
|
+
- `algorithms/bridges/multi.py`:多个一级桥臂的束搜索。
|
|
56
|
+
- `algorithms/bridges/hierarchy.py`:一级桥臂内部继续识别二级和三级桥臂。
|
|
57
|
+
|
|
58
|
+
桥臂模块只移动被识别为刚体的外围连通分量,不参与螺芴体系;是否跳过由 `PipelineConfig.skip_bridges_for_spiro` 控制。
|
|
59
|
+
|
|
60
|
+
## 取代基模块
|
|
61
|
+
|
|
62
|
+
- `algorithms/substituents/tert_butyl.py`:叔丁基扇形排布。
|
|
63
|
+
- `algorithms/substituents/small_alkyl.py`:塌缩小型 sp3 支化基团修复。
|
|
64
|
+
- `algorithms/substituents/terminals.py`:卤素标准外向键和 CD3 显式氘排布。
|
|
65
|
+
|
|
66
|
+
这些模块只做局部确定性修复,不承担全分子碰撞搜索。
|
|
67
|
+
|
|
68
|
+
## 基础设施
|
|
69
|
+
|
|
70
|
+
- `core/geometry.py`:唯一的通用坐标工具来源。
|
|
71
|
+
- `core/validation.py`:唯一的快速碰撞评分和 SVG 验收来源。
|
|
72
|
+
- `pipeline.py`:只决定阶段顺序、开关、错误隔离和元数据汇总。
|
|
73
|
+
|
|
74
|
+
## 维护规则
|
|
75
|
+
|
|
76
|
+
- 新拓扑识别放在 `algorithms/spiro/topology.py`,不要写进搜索循环。
|
|
77
|
+
- 新刚体变换放在 `algorithms/spiro/geometry.py`。
|
|
78
|
+
- 新评分项放在 `algorithms/spiro/common.py` 或 `core/validation.py`。
|
|
79
|
+
- 普通路径优化放在 `algorithms/spiro/fast.py`。
|
|
80
|
+
- 只对罕见复杂结构启用的策略放在 `algorithms/spiro/extreme.py`。
|
|
81
|
+
- 不要把实验版本复制成新的 `v14/v15` 脚本;通过测试和基准维护同一实现。
|