finish this part
This commit is contained in:
12
README.md
12
README.md
@@ -6,10 +6,10 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="https://github.com/your-username/Geo-Layout-Transformer/stargazers"><img src="https://img.shields.io/github/stars/your-username/Geo-Layout-Transformer.svg" /></a>
|
||||
<a href="https://github.com/your-username/Geo-Layout-Transformer/network/members"><img src="https://img.shields.io/github/forks/your-username/Geo-Layout-Transformer.svg" /></a>
|
||||
<a href="https://github.com/your-username/Geo-Layout-Transformer/issues"><img src="https://img.shields.io/github/issues-raw/your-username/Geo-Layout-Transformer" /></a>
|
||||
<a href="https://github.com/your-username/Geo-Layout-Transformer/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/your-username/Geo-Layout-Transformer" /></a>
|
||||
<a href="http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer/stargazers"><img src="https://img.shields.io/github/stars/your-username/Geo-Layout-Transformer.svg" /></a>
|
||||
<a href="http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer/network/members"><img src="https://img.shields.io/github/forks/your-username/Geo-Layout-Transformer.svg" /></a>
|
||||
<a href="http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer/issues"><img src="https://img.shields.io/github/issues-raw/your-username/Geo-Layout-Transformer" /></a>
|
||||
<a href="http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/your-username/Geo-Layout-Transformer" /></a>
|
||||
<a><img src="https://img.shields.io/badge/python-3.12%2B-blue" /></a>
|
||||
<a><img src="https://img.shields.io/badge/PyTorch-2.x-orange" /></a>
|
||||
</p>
|
||||
@@ -115,7 +115,7 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
2) Clone the repository:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/your-username/Geo-Layout-Transformer.git
|
||||
git clone http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer.git
|
||||
cd Geo-Layout-Transformer
|
||||
```
|
||||
|
||||
@@ -143,7 +143,7 @@ Notes:
|
||||
1) Clone the repository:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/your-username/Geo-Layout-Transformer.git
|
||||
git clone http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer.git
|
||||
cd Geo-Layout-Transformer
|
||||
```
|
||||
|
||||
|
||||
12
README_zh.md
12
README_zh.md
@@ -6,10 +6,10 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="https://github.com/your-username/Geo-Layout-Transformer/stargazers"><img src="https://img.shields.io/github/stars/your-username/Geo-Layout-Transformer.svg" /></a>
|
||||
<a href="https://github.com/your-username/Geo-Layout-Transformer/network/members"><img src="https://img.shields.io/github/forks/your-username/Geo-Layout-Transformer.svg" /></a>
|
||||
<a href="https://github.com/your-username/Geo-Layout-Transformer/issues"><img src="https://img.shields.io/github/issues-raw/your-username/Geo-Layout-Transformer" /></a>
|
||||
<a href="https://github.com/your-username/Geo-Layout-Transformer/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/your-username/Geo-Layout-Transformer" /></a>
|
||||
<a href="http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer/stargazers"><img src="https://img.shields.io/github/stars/your-username/Geo-Layout-Transformer.svg" /></a>
|
||||
<a href="http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer/network/members"><img src="https://img.shields.io/github/forks/your-username/Geo-Layout-Transformer.svg" /></a>
|
||||
<a href="http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer/issues"><img src="https://img.shields.io/github/issues-raw/your-username/Geo-Layout-Transformer" /></a>
|
||||
<a href="http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed-raw/your-username/Geo-Layout-Transformer" /></a>
|
||||
<a><img src="https://img.shields.io/badge/python-3.12%2B-blue" /></a>
|
||||
<a><img src="https://img.shields.io/badge/PyTorch-2.x-orange" /></a>
|
||||
</p>
|
||||
@@ -115,7 +115,7 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
2)克隆代码仓库:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/your-username/Geo-Layout-Transformer.git
|
||||
git clone http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer.git
|
||||
cd Geo-Layout-Transformer
|
||||
```
|
||||
|
||||
@@ -143,7 +143,7 @@ uv sync
|
||||
1)克隆代码仓库:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/your-username/Geo-Layout-Transformer.git
|
||||
git clone http://jiao77.cn:3012/Jiao77/Geo-Layout-Transformer.git
|
||||
cd Geo-Layout-Transformer
|
||||
```
|
||||
|
||||
|
||||
202
TODO.md
202
TODO.md
@@ -1,125 +1,103 @@
|
||||
<!-- TODO.md -->
|
||||
# TODO — Geo-Layout-Transformer 🚀
|
||||
# Geo-Layout-Transformer TODOs
|
||||
|
||||
目的:遍历项目并把发现的未实现/待完善项整理到此文件,方便后续开发分配与跟踪。📝
|
||||
本文件汇总项目目标、架构概览、当前完成度与改进计划,按优先级分组并提供可执行清单(复选框)。
|
||||
|
||||
简短项目说明 ✨
|
||||
- 这是一个面向半导体版图(GDSII/OASIS)的研究型工程,目标构建一个混合 GNN + Transformer 的“版图理解”基础模型(自监督预训练 + 任务微调),用于热点评估、连通性校验、版图匹配等下游任务。
|
||||
## 项目目标(简述)
|
||||
- 构建用于物理设计版图理解的统一基础模型,面向热点检测、连通性验证、结构匹配等任务。
|
||||
- 采用“GNN Patch Encoder + 全局 Transformer”的混合架构,支持自监督预训练与任务头微调。
|
||||
|
||||
检索与覆盖说明(工具扫描结果) 🔎
|
||||
- 已扫描主要入口和核心模块:`README*.md`, `main.py`, `src/models/*`, `src/data/*`, `src/engine/*`, `scripts/*`。
|
||||
- 发现显式未实现/占位符(`pass`、`TODO`)的位置列在下方。
|
||||
## 架构概览(对应代码位置)
|
||||
- 数据层:`src/data/`
|
||||
- `gds_parser.py`:GDSII/OASIS 解析、按 patch 裁剪与几何特征提取(使用 gdstk)。
|
||||
- `graph_constructor.py`:从几何对象构建 PyG 图(节点特征、KNN/Radius 边、元信息)。
|
||||
- `dataset.py`:InMemoryDataset 加载处理后的 `.pt` 数据。
|
||||
- 模型层:`src/models/`
|
||||
- `gnn_encoder.py`:可切换 GCN/GraphSAGE/GAT 的 Patch 编码器 + 全局池化。
|
||||
- `transformer_core.py`:Transformer 编码器(正余弦位置编码 + EncoderStack)。
|
||||
- `task_heads.py`:分类/匹配任务头;`geo_layout_transformer.py` 组装端到端模型。
|
||||
- 训练与评估:`src/engine/`
|
||||
- `trainer.py`:监督训练循环(BCEWithLogitsLoss);缺少 focal loss 等实现。
|
||||
- `evaluator.py`:Accuracy/Precision/Recall/F1/AUC 指标计算。
|
||||
- `self_supervised.py`:占位式“掩码版图建模”流程,尚不稳定(见改进项)。
|
||||
- 脚本与入口:
|
||||
- `scripts/preprocess_gds.py`:GDS → 图数据集流水线(保存为 InMemoryDataset)。
|
||||
- `scripts/visualize_attention.py`:注意力可视化占位,需实现细节。
|
||||
- `main.py`:加载配置、构建数据/模型,并在 pretrain/train/eval 模式下运行。
|
||||
- 配置:`configs/default.yaml`、`configs/hotspot_detection.yaml`
|
||||
- 依赖与版本:`pyproject.toml`(Python >=3.12,Torch/PyG 等);锁文件 `uv.lock`。
|
||||
|
||||
-一览:显式未实现 / 需要实现(按优先级排序)
|
||||
## 当前完成度(粗略评估)
|
||||
- 已完成
|
||||
- GDS 解析与 patch 裁剪(含裁剪多边形与面积比例等元信息)。
|
||||
- 图构建(节点几何/层特征,KNN/Radius 边,PyG Data 包装)。
|
||||
- GNN 编码器(GCN/GraphSAGE/GAT)与 Transformer 主干的基本数据流。
|
||||
- 监督训练 Trainer(BCEWithLogitsLoss)、Evaluator 指标管线。
|
||||
- 预处理脚本与 InMemoryDataset 持久化;基础日志与配置装载/合并。
|
||||
- README 中安装/运行指引(推荐 uv;备选 Conda/Pip)。
|
||||
- 进行中/占位
|
||||
- 自监督预训练(self_supervised):掩码策略与维度重塑存在假设,需调通与验证。
|
||||
- 注意力可视化脚本:仅说明性注释,未接入模型权重与实际权重提取。
|
||||
- main.py 数据集切分:目前 train/val 复用同一数据源,留有 TODO。
|
||||
- 缺失/需改进
|
||||
- 任务头与损失的更丰富支持(如 focal loss、class weights、masking/采样)。
|
||||
- 训练循环的验证与早停、最佳模型保存、学习率调度等训练工程化能力。
|
||||
- 自监督目标的严谨实现(mask 索引与 batch/ptr 对齐、掩码、重建头/投影器)。
|
||||
- 可复现实验脚本与最小数据样例;单元测试与快速 CI 校验。
|
||||
- CUDA/大图内存管理(梯度累积、混合精度、GraphSAINT/Cluster-GCN 等)。
|
||||
- 可观测性(TensorBoard/CSVLogger、随机种子、配置溯源与版本记录)。
|
||||
|
||||
- [ ] 1) 必要:数据处理与加载(高优先级) ⚠️
|
||||
- 文件:`src/data/dataset.py`
|
||||
- 问题:继承 `InMemoryDataset` 的 `download()` 和 `process()` 方法均为 `pass`。
|
||||
- 影响:无法自动将原始 GDS/OASIS 转换并打包为 PyG 可加载的 `data.pt`。`main.py` 依赖 `LayoutDataset(root=...)` 加载数据,会在没有 `processed` 数据时失败。
|
||||
- 建议实现:
|
||||
1. `download()`:可选,从远程或指定路径复制原始文件(若不需要可留空并在 README 标注)。
|
||||
2. `process()`:读取 `raw_dir` 下已由 `scripts/preprocess_gds.py` 生成的 `.pt` 或中间文件,或直接在此处调用解析与图构建逻辑(调用 `src/data/gds_parser.py` 和 `src/data/graph_constructor.py`),最后保存 `torch.save((data, slices), self.processed_paths[0])`。
|
||||
3. 文档化输入目录结构和所需文件名约定。
|
||||
- 估时:3–8 小时,取决于是否复用 `scripts/preprocess_gds.py`。
|
||||
## 优先级清单(可执行项)
|
||||
|
||||
- [ ] 2) 必要:预处理脚本(高优先级) 🔧
|
||||
- 文件:`scripts/preprocess_gds.py`
|
||||
- 问题:脚本中存在 `pass` 和 `TODO`(未实现从标签文件加载标签或完整的预处理流程)。
|
||||
- 影响:无法从 GDS/OASIS 生成可训练的数据集(patch 切分、polygon 裁剪、节点/边构建、保存为 `.pt`)。
|
||||
- 建议实现:
|
||||
1. 实现或封装 `gds_parser`(基于 `gdstk` 或 `klayout`)以读取多层几何并输出 polygon 列表与层信息。
|
||||
2. 实现 patch 切分(窗口大小、stride)、polygon 裁剪与 `is_partial`、area ratio 计算。
|
||||
3. 调用 `graph_constructor` 构造 PyG `Data`(节点特征、边、metadata),并保存为单个或批量 `.pt` 文件放入 `processed_dir`。
|
||||
4. 提供 `--overwrite`、`--workers`、`--verbose` 等 CLI 参数。
|
||||
- 依赖:`gdstk` 或 `klayout`(README 中已提及)。
|
||||
- 估时:2–16 小时(实现完整解析 + 并行化视复杂度而定)。
|
||||
### P0(立即优先)
|
||||
- [ ] 数据集切分与 DataLoader 管线
|
||||
- 在 `main.py` 引入可配置的 train/val/test 切分比例与随机种子;支持从目录/清单载入各 split。
|
||||
- 为 `configs/default.yaml` 增加 `splits` 字段;更新 `README*` 用法说明。
|
||||
- [ ] 监督训练工程化
|
||||
- 在 `trainer.py` 补充验证阶段与最佳模型保存(`torch.save` 至指定路径)。
|
||||
- 引入学习率调度器(如 StepLR/CosineAnnealingWarmRestarts)与早停策略。
|
||||
- 支持 class weights/focal loss:在 `trainer.py` 增加 `focal_loss` 实现并在配置选择。
|
||||
- [ ] 自监督预训练修复
|
||||
- 明确 batch 内每图的 patch 序列映射:根据 `batch.ptr` 逐图生成 mask 索引,避免跨图混淆。
|
||||
- 将掩码作用在输入特征/图结构层而非已池化的图级嵌入;或增加“节点级→patch 聚合→重建头”。
|
||||
- 为 `transformer_core` 或单独模块增加重建头(MLP)以回归原 patch 表征;提供单元测试。
|
||||
|
||||
- [ ] 3) 必要:训练脚本中的数据集划分与 checkpoint(中/高优先级) 🗂️
|
||||
- 文件:`main.py`
|
||||
- 问题:存在 TODO,当前将整个 `LayoutDataset` 直接用于 train/val loaders 而非划分;模型 checkpoint 加载被注释(示例中注释掉 `load_state_dict`)。
|
||||
- 影响:无法做标准的训练/验证/测试分割,也缺少断点重载逻辑。
|
||||
- 建议实现:
|
||||
1. 在 `main.py` 中实现基于 `random_split` 或按设计文件/布局分层划分(确保跨-layout 的分割策略),并将结果保存 `splits/` 以保证可复现性。
|
||||
2. 实现 checkpoint 的保存(按 epoch/metric)和加载逻辑(支持 optimizer 和 scheduler state)。
|
||||
- 估时:1–3 小时。
|
||||
### P1(高优)
|
||||
- [ ] 任务头与损失扩展
|
||||
- 在 `task_heads.py` 增加多标签分类、回归头;增添可插拔的池化(CLS token/Mean/Max/Attention Pool)。
|
||||
- 在 `trainer.py` 支持多任务训练配置(不同 head/loss 的加权)。
|
||||
- [ ] 训练与日志可观测性
|
||||
- 增加 TensorBoard/CSVLogger;记录 epoch 指标、学习率、耗时;保存 `config` 与 `git` 提交信息。
|
||||
- 固定随机种子(PyTorch/NumPy/环境变量),在 `utils` 中提供 `set_seed()` 并在入口调用。
|
||||
- [ ] 可复现实验与最小数据
|
||||
- 提供最小 GDS 示例与对应的 processed `.pt` 小样,便于 CI 与用户快速体验。
|
||||
- 在 `scripts/` 增加一键跑通的小样流程脚本(preprocess→train→eval)。
|
||||
|
||||
- [ ] 4) 必要/需修正:模型中批次/序列维度处理(中优先级) 🧩
|
||||
- 文件:`src/models/geo_layout_transformer.py`
|
||||
- 问题:代码里直接用 `nodes_per_graph[0]` 假设每个图(sample)包含相同数量的 patch(nodes),然后用 `.view(num_graphs, nodes_per_graph[0], -1)` 强制 reshape。这在真实数据里通常不成立(patch 数量/节点数会变化)。
|
||||
- 影响:当样本 patch 数不同或数据使用不定长序列时会崩溃或产生错误的上下文分割。
|
||||
- 建议实现:
|
||||
1. 使用 `torch_geometric` 的 `Batch` 提供的信息按-图聚合 patch embeddings(例如,对每个图做 mean/max pooling,或构建 padded sequences 并 mask)。
|
||||
2. 另外可在 `graph_constructor` 处保证每个样本序列长度固定(但这限制较大)。
|
||||
- 估时:2–6 小时。
|
||||
### P2(中优)
|
||||
- [ ] 大图/性能优化
|
||||
- 引入混合精度(`torch.cuda.amp`)、梯度累积、可选更小 batch,监控显存。
|
||||
- 探索 GraphSAINT/Cluster-GCN 等大图训练策略,并与当前 patch 划分结合。
|
||||
- [ ] I/O 与生态集成
|
||||
- `klayout` Python API 的可选集成与安装脚本说明;解析 OASIS 的路径补全与测试。
|
||||
- 在 `graph_constructor.py` 为边策略加入可学习/基于几何关系的拓展(如跨层连接边)。
|
||||
- [ ] 可解释性与可视化
|
||||
- 完成 `scripts/visualize_attention.py`:注册 Hook 提取注意力/特征图,绘图并保存到 `docs/`。
|
||||
- 在 `Data.node_meta` 基础上支持几何叠加可视化(patch bbox 与局部多边形)。
|
||||
|
||||
- [ ] 5) 必要/改进:Trainer 功能不完整(中优先级) 🚦
|
||||
- 文件:`src/engine/trainer.py`
|
||||
- 问题:仅支持少数优化器和 BCE 损失;没有早停、学习率调度、checkpoint 保存、验证调用;示例中注释掉了 Evaluator 的使用。
|
||||
- 影响:难以进行标准训练流程与调参。
|
||||
- 建议实现:
|
||||
1. 增加 checkpoint 保存/加载(model + optimizer + epoch)。
|
||||
2. 支持 scheduler(如 CosineAnnealingLR、ReduceLROnPlateau)与早停逻辑。
|
||||
3. 在 `run()` 中每个 epoch 后调用 `Evaluator`(或传入回调)做验证与模型选择。
|
||||
4. 扩展损失函数注册,添加 `cross_entropy`、`focal`、`dice`(视任务而定)。
|
||||
- 估时:3–8 小时。
|
||||
### P3(后续)
|
||||
- [ ] 更丰富的自监督任务
|
||||
- 对比学习(SimCLR/GraphCL/MaskGIT风格)、上下文预测、旋转/裁剪增广等。
|
||||
- [ ] 生成式方向探索
|
||||
- 以 Transformer 编码为条件,尝试版图片段重建/扩展的生成任务。
|
||||
- [ ] 文档与示例完善
|
||||
- 在 `README*` 增补训练曲线示例、模型结构图与常见问题(FAQ)。
|
||||
|
||||
- [ ] 6) 改进/增强:任务头与可扩展性(中优先级) 🧠
|
||||
- 文件:`src/models/task_heads.py` 与 `src/models/geo_layout_transformer.py`
|
||||
- 问题:任务头目前仅示例了 classification 与 matching,两者接口可能需要标准化(输入 shape、masking、loss 约定)。
|
||||
- 建议:定义统一的 Head 接口(forward 接受 embeddings + mask,可返回 logits + aux),并在配置(configs/*.yaml)中声明 head 类型与损失配置。
|
||||
- 估时:2–4 小时。
|
||||
## 风险与边界条件(建议处理)
|
||||
- 空 patch/稀疏边界:预处理阶段应丢弃无几何或孤立节点过多的 patch,并统计占比。
|
||||
- 类别不平衡:提供正负样本重采样或损失加权;评估报告中输出混淆矩阵与 PR 曲线。
|
||||
- 版本与兼容:已将 Python 要求更新为 3.12+;如需老版本 Python,需回溯依赖并测试。
|
||||
- 随机性:固定随机种子并在日志中写入,以确保结果可复现。
|
||||
|
||||
- [ ] 7) 可选:scripts/visualize_attention.py 与可解释性工具(低优先级) 🔍
|
||||
- 说明:README 提到 attention 可视化,但 `scripts/visualize_attention.py` 需要检查是否完整实现(未详细扫描)。如果目标是可解释性,应实现从 Transformer attention 到版图坐标/多边形映射的工具链。
|
||||
- 估时:4–12 小时(视可视化深度)。
|
||||
---
|
||||
|
||||
- [ ] 8) 项目文档 & CI(低优先级) 📚
|
||||
- 问题:`pyproject.toml` 中 Python 要求为 3.12(但 README 写 3.9+),依赖列表为空,`requirements.txt` 存在但需与 `pyproject` 同步。
|
||||
- 建议:统一 python 版本约定、完善 `pyproject.toml` dependencies 或使用 `requirements.txt`,添加 basic `tox`/`github actions` 用于 lint/test。
|
||||
- 估时:1–3 小时。
|
||||
维护者可按上述优先级推进,每完成一项请勾选对应复选框并在 PR 中引用本条目以便追踪。
|
||||
|
||||
隐含的设计改进(建议) 💡
|
||||
- 增加端到端的单元/集成测试(最小例:人工构造的 patch -> graph -> forward pass),确保 pipeline 各步正确。
|
||||
- 在 `scripts/preprocess_gds.py` 中加入小样本模式(debug 用),能快速构造少量样本用于单元测试。
|
||||
- 考虑在 `src/data/` 中添加一个轻量的 synthetic generator(随机几何与层),便于 CI 下的快速运行和回归测试。
|
||||
|
||||
建议的短期工作分配(建议先做 1→2→3) 🔜
|
||||
- A. 实现 `scripts/preprocess_gds.py`(若已有成熟解析器可复用):2–16h
|
||||
- B. 实现 `src/data/dataset.py::process()` 加载 `processed/` 数据并写入 `data.pt`:3h
|
||||
- C. 修复 `geo_layout_transformer` 中的序列 reshape(改为按图聚合或 padding+mask):3–6h
|
||||
- D. 在 `main.py` 中实现数据划分与 checkpoint load/save:1–3h
|
||||
- E. 在 `trainer` 中加入 eval & checkpoint:3–6h
|
||||
|
||||
- 质量门(quality gates) ✅
|
||||
- 在完成 A+B 后,应跑通一个最小端到端 smoke test:生成 1–5 个 processed `.pt`,用 `main.py --mode pretrain` 或 `--mode train` 在 1 epoch 上跑通(CPU 可行)。
|
||||
- 增加 2 个单元测试:
|
||||
1. graph_constructor 测试:输入简单 polygon 输出节点/边及元数据
|
||||
2. model 前向测试:使用 synthetic batch 验证 forward 不崩溃并返回期望 shape
|
||||
|
||||
文件与代码位置清单(已发现的占位实现)
|
||||
- src/data/dataset.py — download(), process(): pass
|
||||
- scripts/preprocess_gds.py — 主要预处理逻辑存在 pass/TODO
|
||||
- main.py — TODO: 数据集划分;checkpoint 加载示例被注释
|
||||
- src/models/geo_layout_transformer.py — 假定每个图拥有相同 patch 数(reshape 问题),建议改为可变长度处理
|
||||
- src/engine/trainer.py — 基础训练循环已实现,但缺少评估调用、checkpoint、scheduler 支持
|
||||
|
||||
后续步骤(我可以为你做的)
|
||||
- 如果你同意,我将按优先级 **实现/修复 A + B + C**:
|
||||
1. 实现 `scripts/preprocess_gds.py` 的基础版本(支持 gdstk 作为依赖)并保存 `processed/*.pt`。
|
||||
2. 在 `src/data/dataset.py` 中实现 `process()` 以加载 `processed` 文件并生成 `data.pt`。
|
||||
3. 修复 `geo_layout_transformer` 中的 reshape,采用 pooling 或 padded sequences + mask。
|
||||
4. 运行一个快速 smoke test(1 epoch,CPU),并把结果写入 `TODO.md` 下的进度条目。
|
||||
|
||||
要求与注意事项(请确认或提供)
|
||||
- 你希望我直接修改代码并在仓库中提交这些改动吗?(我已准备好直接修改并运行 smoke test)。
|
||||
- 如果有偏好的 GDS 解析库(`gdstk` 或 `klayout`),请说明;我会优先使用 `gdstk`(requirements.txt 已列出)。
|
||||
|
||||
需求覆盖映射
|
||||
- "遍历项目代码,找出项目做什么" —— Done(在文档与简短项目说明中覆盖)。
|
||||
- "找出哪些没有实现的地方" —— Done(列出显式 `pass` / `TODO`,并补充潜在的设计缺陷与改进项)。
|
||||
- "整理到 TODO.md 里面" —— Done(此文件即为输出)。
|
||||
|
||||
变更记录
|
||||
- 创建:`TODO.md`(列出问题与修复建议)。
|
||||
|
||||
最后简短说明:如果你允许我继续实现优先级 A+B+C,我将开始具体编码并在每个重要阶段给出进度更新(包括运行结果和短时间的 smoke tests)。
|
||||
|
||||
Reference in New Issue
Block a user