import numpy as np from wp39.inference import holm, paired_block_bootstrap, dm_gw_test def test_bootstrap_is_seeded_and_centered(): rng = np.random.default_rng(0) d = rng.normal(0.01, 0.1, 2000) blocks = np.repeat(np.arange(20), 100) a = paired_block_bootstrap(d, blocks, n_boot=300, seed=1) b = paired_block_bootstrap(d, blocks, n_boot=300, seed=1) assert a == b and a["ci_lo"] < a["mean"] < a["ci_hi"] def test_gw_test_rejects_clear_difference(): d = np.full(2000, 0.05) + np.random.default_rng(1).normal(0, 0.02, 2000) blocks = np.repeat(np.arange(20), 100) assert dm_gw_test(d, blocks)["p"] < 0.001 def test_holm_monotone(): adj = holm({"a": 0.01, "b": 0.04, "c": 0.5}) assert adj["a"] <= adj["b"] <= adj["c"] and adj["a"] == 0.03