"""附录 G：实际触发并定位四种常见错误，全部在内存中进行。"""

import numpy as np
import torch


def experiment():
    prediction = np.array([[1.], [2.], [3.]])
    target = np.array([1., 2., 3.])
    wrong_loss = ((prediction - target) ** 2).mean()
    right_loss = ((prediction[:, 0] - target) ** 2).mean()

    x = torch.tensor(2., requires_grad=True)
    detached = torch.tensor(x.item() ** 2)
    detached_error = False
    try:
        detached.backward()
    except RuntimeError:
        detached_error = True
    (x ** 2).backward()
    right_gradient = x.grad.item()

    values = np.array([1000., 1001.])
    with np.errstate(over="ignore", invalid="ignore"):
        raw = np.exp(values) / np.exp(values).sum()
    shifted = np.exp(values - values.max())
    stable = shifted / shifted.sum()

    train_groups, test_groups = ["writer-a", "writer-b"], ["writer-a", "writer-c"]
    overlap = sorted(set(train_groups) & set(test_groups))
    return dict(wrong_shape=(prediction - target).shape, wrong_loss=float(wrong_loss),
                right_loss=float(right_loss), detached_error=detached_error,
                right_gradient=right_gradient, raw_finite=bool(np.isfinite(raw).all()),
                stable=stable, overlapping_groups=overlap)


def main():
    r = experiment()
    print(f'广播误差形状：{r["wrong_shape"]}，错误 MSE={r["wrong_loss"]:.6f}，正确 MSE={r["right_loss"]:.6f}')
    print(f'item() 后重建张量的反传失败：{r["detached_error"]}；保留计算图后梯度={r["right_gradient"]:.1f}')
    print(f'直接指数概率全部有限：{r["raw_finite"]}；稳定概率和={r["stable"].sum():.6f}')
    print("跨划分重复的书写者：", r["overlapping_groups"])
    print("修复范围：数值路径与分组检查；不等于模型已能泛化。")


if __name__ == "__main__":
    main()
