docs(data): 补齐 io 两个函数的 Parameters 与 Raises
按 docs/02-architecture.md §4.7,每个公开函数都要写全 Parameters 与 Raises, 格式对齐参考实现 core/random.py 的 get_rng。 - docstring 由 Codex 代写(本轮用户明确授权);函数体逻辑由用户本人改 - load_table:返回注解 Any -> pd.DataFrame,与 docstring 的承诺对齐; 写明 FileNotFoundError / ValueError / ImportError 各自在什么情况下抛 - save_table:写明 TypeError / ValueError / ImportError; 并把 isinstance(df, pd.DataFrame) 校验挪到 mkdir 之前 - 两套环境 pytest 均 39 passed / 44 skipped,ruff All checks passed
This commit is contained in:
1 parent
49fd84a2df
commit
19f4a15107
3 files changed
+55
-11
No files matched your search
@@ -86,6 +86,8 @@
|
||||
- `na_values` 默认吃下空串 / `NA` / `N/A` / `#N/A` / `null` / `-`
|
||||
- 不支持的扩展名抛 `ValueError`;文件不存在抛带路径的 `FileNotFoundError`
|
||||
- 测试:`tests/test_data.py` 由 1 条(且被模块级 skip 掉)扩到 **8 条**
|
||||
- docstring 的 `Parameters` / `Raises` 已按 §4.7 补齐(Codex 代写,用户授权)——
|
||||
numpydoc 格式,对齐参考实现 `core/random.py` 的 `get_rng`
|
||||
- [ ] 剩余 9 项(10 个函数):`clean_missing`
|
||||
`detect_outliers` `normalize` `standardize` `describe` `correlation_matrix`
|
||||
`bootstrap_ci` `monte_carlo` `save_figure`
|
||||
@@ -155,17 +157,14 @@
|
||||
| 24 | `get_rng(None)` **复用同一个模块级生成器**(会推进),不每次新建 | **用户本人提出**,取代 Codex 原来"每次新建 `default_rng(全局种子)`"的写法——那样两个都省略 `random_state` 的函数会抽到完全相同的数。共享单例既保证重跑一致,又让流自然推进 |
|
||||
| 25 | `src/` 下的实现默认由**用户本人**写,Codex 只改 `tests/` 与 `docs/` | 目标是"一边学一边自己写"。曾出现 Codex 直接落盘 `random.py`、与用户编辑器缓冲区冲突导致保存失败。需要代写时用户会明说 |
|
||||
| 26 | 未实现的算法用**逐条** `@pytest.mark.skip`,禁用模块级 `pytestmark` | 模块级 skip 会把同文件里**已经写好**的函数一起跳过。本次 `test_data.py` 就这样让 `load_table` 零覆盖,直到有人手动数才被发现 |
|
||||
| 28 | 不启用 ruff 的 preview 规则集 | `E302`(函数间要 2 个空行)在 ruff 0.16 里是 preview 规则,`select = ["E"]` 默认**不包含**它——所以少一个空行 ruff 照样报 "All checks passed"。行数空行得自己盯,别指望 lint |
|
||||
| 27 | base 里的 zstandard 残骸目录**改名禁用**,不删除、不重装 | 删掉不可逆;`pip install zstandard` 会给 base 塞一个 conda 记录里根本没有的包,下次 `conda update --all` 又要重新判断。改名后 `import` 变回正常 `ModuleNotFoundError`,pandas 自动跳过 |
|
||||
|
||||
## 下一步
|
||||
|
||||
1. **`data/io.py` 待你修两处**(`src/` 归你,Codex 不代写,见决策 25):
|
||||
- `save_table` 把 `path.parent.mkdir(parents=True, exist_ok=True)` 放在了**后缀校验之前**,
|
||||
传个 `.txt` 会先建出一个空目录再抛 `ValueError`。
|
||||
把校验(后缀 + `isinstance(df, pd.DataFrame)`)挪到 `mkdir` 前面即可。
|
||||
- 两个函数都缺 `Raises` 段落(`docs/02-architecture.md` §4.7 要求写全);
|
||||
`load_table` 的返回注解建议从 `Any` 改成 `pd.DataFrame` —— docstring 已经承诺返回 DataFrame,
|
||||
注解写 `Any` 等于同一个契约写了两遍(`docs/dev/personal-pitfalls.md` 条目 3,本次已复发一次)。
|
||||
1. **`data/io.py` 还剩一处**:`isinstance(df, pd.DataFrame)` 已经挪到 `mkdir` 前面了,
|
||||
但**后缀校验还留在 `else` 分支里**,仍在 `mkdir` 之后。传 `sub/x.txt` 依旧会先建出
|
||||
`sub/` 再抛 `ValueError`(实测确认)。把后缀判断也提到 `mkdir` 前面即可。
|
||||
2. 继续 L0,**下一个:`data/clean.py` 的 `clean_missing`**(L0 / A 档,直接能写)。
|
||||
同文件的 `detect_outliers` 是 **S 档**,要先按 `docs/dev/function-card-template.md`
|
||||
把函数卡片写出来再动手。
|
||||
|
||||
Reference in new issue
Block a user