feat(solve): random_walk 的 step_sampler 契约改成"整数 size + 一维返回"(方案 B)

用户拍板方案 B(决策 55),Codex 代改。

- size 由 (n_paths, n_steps) 改成整数 n_paths * n_steps,必须返回一维;
  内部 reshape(n_paths, n_steps)(行主序);二维返回一律判失败
- 动因:方阵时转置 (n_steps, n_paths) 与目标形状相同,形状校验天生分不出来(易错点 25)
- 关键:不用 .ravel() 救场(会把转置摊平,歧义原样回来)
- 红利:与 monte_carlo 的 sampler 契约(决策 48 的 size=n)统一,采样器可直接复用(实测)
- docstring:step_sampler 契约与 Notes 同步(一维 / 行主序 / 二维必失败)
- tests:转置那条改成 rejects_2d_step_sampler(含方阵),新增"整数 size + 行主序"契约测试;solve 段 43 条
- 验证:210 收集 / 179 passed / 31 skipped / 0 xfail,ruff 0,pyright 0
- docs:STATUS 决策 55 + random_walk 待办全部办结;CHANGELOG
This commit is contained in:
guzhujushi committed 2026-10-05 18:06:55 +08:00
1 parent cd6f613568
commit 9368dd91cb
4 files changed
+73 -38

No files matched your search

+13
View File
@@ -495,6 +495,19 @@
- `STATUS.md`:新增**决策 55**(`n_paths == n_steps` 的"方阵歧义"留作已知边界,A 接受 / B 换契约两条路);
3 条口径办结 2 条,验证计数更新为 178 / 31。
### Changed
- `random_walk` 的 `step_sampler` 契约按**方案 B** 重定(用户拍板,**决策 55**):`size` 由 `(n_paths, n_steps)` 改为**整数**
`n_paths * n_steps`,必须返回**一维**数组,内部 `reshape(n_paths, n_steps)`(行主序)。
**动因**:转置 `(n_steps, n_paths)` 与目标 `(n_paths, n_steps)` 在 `n_paths == n_steps` 时形状相同,形状校验天生分不出来(易错点 25)。
探针实测:默认采样器 `(5, 101)` 正常;转置二维 / 方阵二维 / 长度 +1 / `(N, 1)` 四种返回一律判失败。
**关键点:不要用 `.ravel()` 救场**,那会把转置的二维摊平、歧义原样回来。红利:与 `monte_carlo` 的 `sampler`(决策 48 的 `size=n`)
契约统一,给 `monte_carlo` 写的采样器可直接复用(实测通过)。
- `random_walk` 的 docstring 同步:`step_sampler` 说明改为"整数 `size` + 一维返回 + 行主序",`Notes` 记明二维返回一律判失败。
- `tests/test_solve.py`:把"转置采样器"那条改成 `test_random_walk_rejects_2d_step_sampler`(含方阵情形),
新增 `test_random_walk_step_sampler_gets_flat_size_and_is_row_major`(验 `size == 6` 与 `cumsum` 的行主序结果);
`solve` 段 42 → **43** 条,全量 **210 收集 / 179 passed / 31 skipped / 0 xfail**(ruff 0 / pyright 0)。
- `STATUS.md`:决策 55 改为"已选 B 并落地";`random_walk` 的 7 条待办全部办结;验证计数更新为 179 / 31。
## [0.0.1] - 2026-10-01
### Added