fix(solve): random_walk 的 start 校验恢复后收尾(文案/空格/测试)

两条口径由用户第二轮改定,Codex 顺手补工程侧。

- 用户:恢复 start 的入口类型校验;n_steps/n_paths 注解放宽为 int | np.integer
- Codex:start 报错文案"必须是整数" -> "必须是数值"(这条校验本来就收 float,原文案自相矛盾),
  类型名统一 type(x).__name__;n_paths 默认值补空格;docstring 的 start 说明与 Raises 同步
- tests:start="a" 恢复断言 TypeError;补回 np.int64 的 n_steps/n_paths;solve 段 42 条
- 验证:209 收集 / 178 passed / 31 skipped / 0 xfail,ruff 0,pyright 0
- docs:STATUS 决策 55(方阵歧义两条路)+ 验证计数;CHANGELOG
This commit is contained in:
guzhujushi committed 2026-10-05 18:01:40 +08:00
1 parent 6fca82e3fc
commit cd6f613568
4 files changed
+54 -21

No files matched your search

+11 -2
View File
@@ -331,8 +331,8 @@ def test_random_walk_rejects_bad_arguments():
random_walk(n_steps=0)
with pytest.raises(ValueError):
random_walk(n_steps=10, n_paths=0)
r = random_walk(n_steps=10, start="a") # type: ignore[arg-type] # 就是要传错
assert r.success is False # 口径待定:入口抛 TypeError 也可以,见 STATUS"下一步"
with pytest.raises(TypeError):
random_walk(n_steps=10, start="a") # type: ignore[arg-type] # 就是要传错
def test_random_walk_failure_returns_result_not_exception():
@@ -363,6 +363,15 @@ def test_random_walk_rejects_nan_steps():
assert "NaN" in r.message
def test_random_walk_accepts_numpy_integer():
"""§4.7:`np.int64` 不是 `int` 的子类,注解与运行期都要收(易错点 1)。"""
from mcm_toolkit.solve import random_walk
r = random_walk(n_steps=np.int64(20), n_paths=np.int64(3), random_state=0)
assert r.success
assert r.data.shape == (3, 21)
def test_random_walk_metrics_are_terminal_positions():
"""终点位置的标准差按 √t 扩散(t = n_steps)—— 随机游走的核心性质。"""
from mcm_toolkit.solve import random_walk