# `data_h5.py` 使用说明

## 这个文件做什么
- 提供 `hs300_x795_v3` 的高效读取工具。
- 把两份 `x_part` 因子列按指定特征顺序拼成训练输入。
- 按 `3M2Q1C_T3 + T5 + T40` 组合目标标签。

## 为什么要有它
- H5 文件很大，默认缓存可能导致读取慢。
- 这里暴露 `rdcc_nbytes/rdcc_nslots/rdcc_w0`，方便调 HDF5 chunk cache。

## 关键接口
- `list_days(root, max_days)`：列出可用交易日目录。
- `load_name_maps(day_dir)`：读取 `x_names/y_names` 映射。
- `build_feature_spec(feature_names, x_name2idx, n_part0)`：构造列选择计划。
- `iter_day_batches(...)`：按批次迭代返回 `(xb, yb)`。

## 快速示例
```python
from pathlib import Path
from data_h5 import H5CacheConfig, list_days, load_name_maps, read_feature_file, build_feature_spec, target_indices, iter_day_batches

root = Path("/intern9/NST0_h5_data/hs300_x795_v3")
days = list_days(root, max_days=1)
day_dir = root / days[0]
x_names, x_name2idx, y_name2idx, n_part0 = load_name_maps(day_dir)
feat_names = read_feature_file(Path("/intern9/share/lixuelin/hs300_20260219_features_all_eps20_top200.txt"))
spec = build_feature_spec(feat_names, x_name2idx, n_part0)
y_idx = target_indices(y_name2idx)
cache = H5CacheConfig(rdcc_nbytes=256 * 1024 * 1024)

for xb, yb in iter_day_batches(day_dir, spec, y_idx, batch_rows=100000, cache_cfg=cache):
    print(xb.shape, yb.shape)
    break
```
