Feature/batch generation optimization - #6
leoxie2006 wants to merge 6 commits into
Conversation
- 新增「每周跑的天数」复选框(一~日),可选择只在特定星期几生成数据 - 新增「距离误差(±km)」和「时长误差(±min)」输入框,每条记录在误差范围内随机微调 - 选择天数后自动按星期对齐首条记录起始日期 - 每条记录独立计算基准参数(心率/步频),适配随机化后的距离和时长 - 新增选项仅在生成份数 > 1 时显示,不影响单条记录的使用体验
- 新增 fit_algorithms.py:包含 next_run_date、calculate_base_params、track_point 等纯逻辑函数 - main.py 改为从 fit_algorithms 导入,移除内联的算法实现 - 新增 test_main.py:30 个单元测试,覆盖星期调度、配速映射、轨迹点生成、误差随机化、向后兼容 - 所有测试通过(无需 Tkinter,可在任何环境运行)
There was a problem hiding this comment.
Pull request overview
该 PR 为批量生成 FIT 数据的流程增加“按星期调度”和“距离/时长误差随机化”能力,并将与 UI 解耦的核心算法提取到独立模块,以提升可复用性与可测试性。
Changes:
- 新增星期调度
next_run_date(),用于按选中星期推进下一条记录日期 - 批量生成时支持距离/时长误差范围随机化,并对每条记录重新计算配速相关参数
- 抽离核心算法到
fit_algorithms.py,并新增test_main.py覆盖主要逻辑
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 6 comments.
| File | Description |
|---|---|
| fit_algorithms.py | 新增纯算法模块:星期调度、配速参数映射、操场轨迹点生成与常量抽离 |
| main.py | GUI 增加批量高级选项(星期/误差),并在生成线程中应用调度与随机化逻辑;算法改为从新模块导入 |
| test_main.py | 新增单元测试,覆盖星期调度/配速映射/轨迹点等;包含对误差与兼容性的测试用例框架 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| self.error_dur_label.grid( | ||
| row=5, column=1, sticky="e", padx=(0, 100), | ||
| ) | ||
| self.error_dur_entry.grid( | ||
| row=5, column=2, sticky="w", | ||
| ) |
| if current_dt.weekday() in selected_days: | ||
| return current_dt | ||
| for offset in range(1, 8): | ||
| candidate = current_dt + timedelta(days=offset) | ||
| if candidate.weekday() in selected_days: | ||
| return candidate | ||
| # 兜底:理论上不会到这里(7 天内必定找到匹配或回到同一天)。 | ||
| return current_dt + timedelta(days=1) |
| class TestErrorRangeRandomization(unittest.TestCase): | ||
| """验证距离/时长误差范围的随机化逻辑。""" | ||
|
|
| class TestBackwardCompatibility(unittest.TestCase): | ||
| """验证未启用新功能时行为和原来一致。""" | ||
|
|
| from fit_algorithms import ( | ||
| EARTH_METERS_PER_DEGREE, | ||
| calculate_base_params, | ||
| next_run_date, | ||
| track_point, | ||
| ) |
Co-authored-by: Copilot Autofix powered by AI <[email protected]>
IAMAI-Dev
left a comment
There was a problem hiding this comment.
感谢这次功能改进。星期调度、误差范围和算法模块拆分的方向很好,我在本地验证了 30 个测试、Python 编译、星期调度和实际 FIT 文件生成,主体功能可以运行。
合并前请处理或说明以下问题:
-
start_generation() 会先解析距离/时长误差输入,再在 count <= 1 时将其清零。用户在批量模式中输入非数字内容后,如果将生成份数改回 1,输入框虽然已经隐藏,单条生成仍会报数字转换错误。请仅在 count > 1 时读取和校验这些高级选项。
-
旧版本会为整批文件计算一次心率/步频基准;当前实现即使误差为 0,也会为每个文件重新随机计算。这与 PR 中“行为和原来完全一致”的说明不符。请确认设计意图:
- 如果需要严格向后兼容,请在零误差时复用批次基准;
- 如果逐文件随机是有意的新行为,请修正兼容性说明。
-
当前误差和向后兼容测试没有调用 start_generation() 或 _run_task(),主要是在测试标准库和局部变量,无法覆盖以上场景。请补充至少覆盖隐藏输入和零误差行为的真实业务逻辑测试。
修改完成后请重新请求审核。
变更说明
关联 Issue
修改内容
新增
fit_algorithms.py— 核心算法模块next_run_date():根据选中星期计算下一条记录的日期calculate_base_params():配速 → 心率/步频参数映射track_point():操场绕圈轨迹点 GPS 坐标生成修改
main.py— UI 与生成逻辑random.uniform(-error, +error)fit_algorithms导入纯逻辑,UI 层不再包含算法实现新增
test_main.py— 30 个单元测试测试情况
python3 -m unittest test_main -v)python3 -c "import ast; ast.parse(open('main.py').read()); print('Syntax OK')"语法检查通过uv run main.py验证 GUI 交互补充说明
使用示例
5.1km、时长在 2832min 之间随机微调向后兼容