SPB Git

spb/wp40_uqo

Public MIT

WP40 RAID: Phase 4 — HAR family (fit/rolling/batched), block bootstrap, R references (highfrequency, rugarch), statsmodels HAR refs, Monte Carlo tests, calendar one-offs, Python/CLI HAR+bootstrap

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Nov 2, 2026) parent 3905e5b Browse files

22 changed files +2,956 −35

modified RESEARCH_STATUS.md +6 −6
@@ -1,6 +1,6 @@
1 1 # RESEARCH_STATUS.md — RAID (UQO WP 40)
2 2
3 −Last update: 2026-11-02 (Phase 3 passed). Legend: ✅ verified by tests/artifacts · 🧪 implemented, validation pending ·
3 +Last update: 2026-11-02 (Phase 4 passed). Legend: ✅ verified by tests/artifacts · 🧪 implemented, validation pending ·
4 4 🧭 experimental · ⛔ blocked · ⏳ planned · ✖ not implemented (deliberately).
5 5
6 6 ## Phases
@@ -10,7 +10,7 @@ Last update: 2026-11-02 (Phase 3 passed). Legend: ✅ verified by tests/artifact
10 10 | 1 Foundation | clean build + tests + docs | ✅ passed 2026-11-02 | `ctest` 26/26 (314 assertions), `pytest` 7/7, `docs/PROGRESS.md` Phase 1 |
11 11 | 2 Data | offline synthetic tests + opt-in live tests | ✅ passed 2026-11-02 | offline `[findata]` 4/4, live `[live]` 2/2 (60 assertions), `docs/operations/findata.md` |
12 12 | 3 Numerical primitives | accuracy + measured break-even | ✅ passed 2026-11-02 | `[metal]` 6 cases / 6 411 assertions; `experiments/results/bench_primitives_summary.json` (Metal wins: fused realized ≥ 39 k elements up to 3.4×, GARCH NLL P=64 up to 7.9×; CPU wins: rolling sums, GARCH P=1, small panels) |
13 −| 4 Econometrics (Tier A) | references + Monte Carlo | ⏳ | — |
13 +| 4 Econometrics (Tier A) | references + Monte Carlo | ✅ passed 2026-11-02 | R (highfrequency/rugarch) + statsmodels/arch references, `tests/simulation` Monte Carlo, `docs/methods/registry.md` |
14 14 | 5 Extensions (Tier B) | per-feature specs + tests | ⏳ | — |
15 15 | 6 Benchmarking E1–E7 | every claim traceable | ⏳ | — |
16 16 | 7 Manuscript | reproducible build, no placeholders | ⏳ | — |
@@ -22,9 +22,9 @@ Last update: 2026-11-02 (Phase 3 passed). Legend: ✅ verified by tests/artifact
22 22 | returns (log/arith), lag/lead, rolling windows, calendar-aware aggregation | A | ✅ | ⏳ (Phase 3) | numpy; exchange_calendars (calendar exact 2000–2026) | ✅ CPU |
23 23 | RV, BPV, RSV±, RQ, jump proxy, TriPV, rCov/rCorr | A | ✅ (numpy truth 1e−12) | ✅ fused kernel 1e−6 vs FP64 | highfrequency 1.0.3 (R comparison Phase 4) | ✅ CPU |
24 24 | OLS/WLS/ridge, HC0–3, HAC, cluster, rolling OLS | A | ✅ (statsmodels 1e−9) | ✅ sufficient statistics 1e−6 (k ≤ 8) | statsmodels 0.15, scipy 1.18 | ✅ CPU |
25 −| HAR-RV, log-HAR, HAR-X, HARQ | A | ⏳ | ⏳ | highfrequency `HARmodel`, statsmodels | ⏳ |
25 +| HAR-RV, log-HAR, HAR-X, HARQ, rolling, batched | A | ✅ (highfrequency 1e−8, statsmodels 1e−9) | ✅ batched sufficient statistics | highfrequency 1.0.3, statsmodels 0.15 | ✅ |
26 26 | GARCH(1,1), GJR, EGARCH (N, t), QMLE/Hessian/OPG SE, forecasts | A | ✅ (arch 8.0: loglik 5e−4, params 5 %) | ✅ batched NLL 2e−5 (grids) | arch 8.0 ✅, rugarch 1.5.6 (Phase 4) | ✅ CPU |
27 −| Bootstrap (stationary / circular block), Monte Carlo | A | ⏳ | ⏳ | arch.bootstrap | ⏳ |
27 +| Bootstrap (stationary / circular / iid), Monte Carlo harness | A | ✅ (theory + MC coverage) | ⏳ GPU replicas (E5) | theory (Politis–Romano) | ✅ |
28 28 | VAR, GFEVD, Diebold–Yilmaz | B | ⏳ | ⏳ | statsmodels VAR | ⏳ |
29 29 | Realized GARCH, HEAVY, DCC, PCA/shrinkage, Kalman | B | ✖ until Tier A passes | | | ⏳ |
30 30 | Pre-averaging, realized kernels, MSRV, BNS test | C | ✖ (1-min bars) | | highfrequency | 🧭 only if validated |
@@ -35,5 +35,5 @@ Last update: 2026-11-02 (Phase 3 passed). Legend: ✅ verified by tests/artifact
35 35 not tested unless they come back.
36 36
37 37 ## Next safe action
38 −Phase 4: HAR family (fit, rolling, batched via GPU sufficient statistics), block bootstrap, R references
39 −(highfrequency / rugarch), Monte Carlo (bias/RMSE/coverage), gradient checks, registry completion.
38 +Phase 5 (Tier B, selected for research value): VAR(p) + generalized FEVD + Diebold–Yilmaz connectedness (rolling, batched
39 +realized-covariance inputs) for E4; shrinkage covariance; then Phase 6 experiments E1–E7.
modified bindings/python/raid_py.cpp +29 −0
@@ -12,6 +12,9 @@
12 12 #include "raid/estimators/ols.hpp"
13 13 #include "raid/estimators/realized.hpp"
14 14 #include "raid/models/garch.hpp"
15 +#include "raid/estimators/har.hpp"
16 +#include "raid/statistics/bootstrap.hpp"
17 +#include "raid/statistics/reductions.hpp"
15 18 #include "raid/data/bar_series.hpp"
16 19 #include "raid/data/calendar.hpp"
17 20 #include "raid/data/returns.hpp"
@@ -94,6 +97,32 @@ NB_MODULE(_core, m) {
94 97
95 98 m.def("calendar_sessions", [](const std::string& a, const std::string& b) { MarketCalendar cal; std::vector<std::string> out; for (auto d : cal.sessions(date_from_iso(a), date_from_iso(b))) out.push_back(d.iso()); return out; });
96 99
100 + // ---- HAR family ----
101 + m.def("har_fit", [](F64 rv, std::vector<usize> lags, int horizon, bool log_model, bool harq, std::optional<F64> rq, const std::string& cov, int hac_lags, const std::string& target) {
102 + est::HarSpec s; s.lags = lags; s.horizon = horizon; s.log = log_model; s.harq = harq; s.cov.type = stats::covtype_from_string(cov); s.cov.hac_lags = hac_lags; s.target = target == "single" ? est::HarTarget::single : est::HarTarget::average;
103 + std::span<const f64> rvs(rv.data(), rv.shape(0)); std::span<const f64> rqs; if (rq) rqs = std::span<const f64>(rq->data(), rq->shape(0));
104 + json out; { nb::gil_scoped_release rel; auto e = est::har_fit(rvs, s, rqs); out = e.to_json(); out["forecast_next"] = est::har_forecast(e, rvs, s, rqs); }
105 + return json_to_py(out);
106 + }, nb::arg("rv"), nb::arg("lags") = std::vector<usize>{1, 5, 22}, nb::arg("horizon") = 1, nb::arg("log") = false, nb::arg("harq") = false, nb::arg("rq") = nb::none(), nb::arg("cov") = "hac", nb::arg("hac_lags") = -1, nb::arg("target") = "average");
107 + m.def("har_rolling", [](F64 rv, std::vector<usize> lags, int horizon, bool log_model, usize window, usize step, bool harq, std::optional<F64> rq) {
108 + est::HarSpec s; s.lags = lags; s.horizon = horizon; s.log = log_model; s.harq = harq; std::span<const f64> rvs(rv.data(), rv.shape(0)); std::span<const f64> rqs; if (rq) rqs = std::span<const f64>(rq->data(), rq->shape(0));
109 + est::HarRolling r; { nb::gil_scoped_release rel; r = est::har_rolling(rvs, s, window, step, rqs); }
110 + nb::dict d; std::vector<int64_t> o(r.origin.begin(), r.origin.end()); d["origin"] = to_np_i64(std::move(o)); d["forecast"] = to_np(r.forecast); d["actual"] = to_np(r.actual); d["n_fits"] = r.n_fits; d["seconds"] = r.seconds;
111 + auto l = est::forecast_loss(r.actual, r.forecast); d["mse"] = l.mse; d["qlike"] = l.qlike; d["n_loss"] = l.n; return d;
112 + }, nb::arg("rv"), nb::arg("lags") = std::vector<usize>{1, 5, 22}, nb::arg("horizon") = 1, nb::arg("log") = false, nb::arg("window") = 1000, nb::arg("step") = 1, nb::arg("harq") = false, nb::arg("rq") = nb::none());
113 + m.def("har_batch", [](F64 rv, I64 off, std::vector<usize> lags, int horizon, bool log_model, const std::string& backend_s) {
114 + est::HarSpec s; s.lags = lags; s.horizon = horizon; s.log = log_model; ExecutionPlan p; p.backend = backend_from_string(backend_s);
115 + est::HarBatchResult r; { nb::gil_scoped_release rel; r = est::har_batch(std::span<const f64>(rv.data(), rv.shape(0)), std::span<const i64>(off.data(), off.shape(0)), s, p); }
116 + nb::list fits; for (auto& e : r.fits) fits.append(json_to_py(e.to_json())); nb::dict d; d["fits"] = fits; d["backend"] = std::string(to_string(r.stats.backend)); d["precision"] = std::string(to_string(r.stats.precision)); d["wall_seconds"] = r.stats.wall_seconds; d["device_seconds"] = r.stats.device_seconds; return d;
117 + }, nb::arg("rv"), nb::arg("offsets"), nb::arg("lags") = std::vector<usize>{1, 5, 22}, nb::arg("horizon") = 1, nb::arg("log") = false, nb::arg("backend") = "auto");
118 + // ---- bootstrap ----
119 + m.def("bootstrap", [](F64 x, const std::string& stat, const std::string& scheme, double mean_block, usize replicas, uint64_t seed, double level) {
120 + stats::BootstrapOptions o; o.scheme = scheme == "circular" ? stats::BootstrapScheme::circular_block : (scheme == "iid" ? stats::BootstrapScheme::iid : stats::BootstrapScheme::stationary); o.mean_block = mean_block; o.replicas = replicas; o.seed = seed; o.ci_level = level;
121 + std::function<f64(std::span<const f64>)> f; if (stat == "mean") f = [](std::span<const f64> v) { return stats::mean<f64>(v); }; else if (stat == "rv" || stat == "sum_squares") f = [](std::span<const f64> v) { return stats::sum_squares<f64>(v); }; else if (stat == "variance") f = [](std::span<const f64> v) { return stats::variance<f64>(v); }; else throw RaidError(ErrorCode::invalid_argument, "stat must be mean|rv|variance");
122 + stats::BootstrapResult r; { nb::gil_scoped_release rel; r = stats::bootstrap(std::span<const f64>(x.data(), x.shape(0)), f, o); }
123 + nb::dict d; d["point"] = r.point; d["se"] = r.se; d["ci_lo"] = r.ci_lo; d["ci_hi"] = r.ci_hi; d["bias"] = r.bias; d["failures"] = r.failures; d["block_length"] = r.block_length; d["statistics"] = to_np(r.statistics); d["seconds"] = r.seconds; return d;
124 + }, nb::arg("x"), nb::arg("stat") = "mean", nb::arg("scheme") = "stationary", nb::arg("mean_block") = 0.0, nb::arg("replicas") = 999, nb::arg("seed") = 20261102, nb::arg("level") = 0.95);
125 +
97 126 // ---- FinData client (keys from FINDATA_API_KEY / FINDATA_API_KEY_FILE; never passed through Python) ----
98 127 m.def("findata_bars", [](const std::string& symbol, const std::string& interval, const std::string& start, const std::string& end, const std::string& adjustment, const std::string& cache_dir, bool offline) {
99 128 findata::Config cfg = findata::Config::from_env(); if (!cache_dir.empty()) cfg.cache_dir = cache_dir; cfg.offline = offline; findata::Client cl(cfg);
modified cli/raid.cpp +10 −0
@@ -18,6 +18,7 @@
18 18 #include "raid/estimators/realized.hpp"
19 19 #include "raid/estimators/ols.hpp"
20 20 #include "raid/models/garch.hpp"
21 +#include "raid/estimators/har.hpp"
21 22 #ifdef RAID_WITH_FINDATA
22 23 #include "raid/data/findata.hpp"
23 24 #endif
@@ -34,6 +35,7 @@ void usage() {
34 35 " raid estimate realized <bars> [--backend auto|cpu|metal] [--bpv-no-fs] per-session realized measures\n"
35 36 " raid estimate garch <bars> [--model garch|gjr|egarch] [--dist gaussian|student_t] [--horizon H] [--returns daily|intraday]\n"
36 37 " raid estimate ols <csv y,x1,x2...> [--cov classical|hc0..hc3|hac|cluster] [--lags L]\n"
38 + " raid estimate har <bars> [--horizon h] [--log] [--harq] [--window W --step S] daily RV from 1m bars → HAR fit (+ rolling forecasts)\n"
37 39 " raid data ... FinData access (Phase 2)\n"
38 40 " raid benchmark ... benchmark harness (Phase 3+)\n", RAID_VERSION);
39 41 }
@@ -89,6 +91,14 @@ int cmd_estimate(const std::vector<std::string>& a) {
89 91 try { auto e = models::garch_fit(r, go); out[sym] = e.to_json(); } catch (const RaidError& ex) { out[sym] = {{"error", ex.what()}}; } }
90 92 std::cout << out.dump(1) << "\n"; return 0;
91 93 }
94 + if (what == "har") {
95 + auto bars = load_bars(path); MarketCalendar cal; json out = json::object(); est::HarSpec s; s.horizon = std::stoi(arg(a, "--horizon", "1")); s.log = flag(a, "--log"); s.harq = flag(a, "--harq");
96 + for (auto& [sym, b0] : bars) { auto b = b0; b.normalize(); auto reg = b.filter_session(cal, SessionPolicy::regular); auto ir = data::intraday_returns(reg); est::RealizedOptions ro; ro.plan = plan; auto m = est::realized_measures(ir, ro);
97 + try { auto e = est::har_fit(m.rv, s, m.rq); json j = e.to_json(); j["forecast_next"] = est::har_forecast(e, m.rv, s, m.rq); j["n_sessions"] = m.rv.size();
98 + if (!arg(a, "--window").empty()) { auto r = est::har_rolling(m.rv, s, static_cast<usize>(std::stoul(arg(a, "--window"))), static_cast<usize>(std::stoul(arg(a, "--step", "1"))), m.rq); auto l = est::forecast_loss(r.actual, r.forecast); j["rolling"] = {{"n_fits", r.n_fits}, {"mse", l.mse}, {"qlike", l.qlike}, {"seconds", r.seconds}}; }
99 + out[sym] = j; } catch (const RaidError& ex) { out[sym] = {{"error", ex.what()}}; } }
100 + std::cout << out.dump(1) << "\n"; return 0;
101 + }
92 102 if (what == "ols") {
93 103 std::ifstream f(path); RAID_REQUIRE(f.good(), io, "cannot open " + path); std::string line; std::getline(f, line);
94 104 std::vector<std::string> names; { usize s = 0; for (usize i = 0; i <= line.size(); ++i) if (i == line.size() || line[i] == ',') { names.push_back(line.substr(s, i - s)); s = i + 1; } }
added datasets/fixtures/har_rv.csv +1501 −0
@@ -0,0 +1,1501 @@
1 +rv,rq
2 +0.00010000000000000009,1.4405505785837637e-08
3 +6.3328360608245278e-05,5.8457908532148236e-09
4 +4.735392494116195e-05,2.8915512147545496e-09
5 +4.3772372296844666e-05,2.3507104508857125e-09
6 +7.6272793543610479e-05,7.7019251835855382e-09
7 +5.4619899802699215e-05,2.9980959338279616e-09
8 +4.3441504925126849e-05,2.2491120759492536e-09
9 +4.7679144275385566e-05,2.5789861759974905e-09
10 +0.00010372970093747665,1.6072885476575217e-08
11 +7.108118056210782e-05,7.2904823577695472e-09
12 +5.9592783040528097e-05,4.8651066372349026e-09
13 +7.519981368398477e-05,6.0030901703153299e-09
14 +8.6792138369599597e-05,1.0926306707785091e-08
15 +0.00010568360711704954,1.501391131310545e-08
16 +8.2733987669243058e-05,9.0312559806971966e-09
17 +6.0235323379755125e-05,4.1468894089209222e-09
18 +4.110481777812044e-05,1.7835179165626757e-09
19 +6.1230578704997925e-05,5.2846218810178925e-09
20 +6.5286629824018403e-05,6.3686948136536427e-09
21 +8.8006494273294573e-05,8.2080908016950806e-09
22 +9.3106346145575337e-05,9.0994563454820669e-09
23 +0.00016589587353684114,3.6879479922538509e-08
24 +0.00017996587973620492,4.0969752915690145e-08
25 +0.00016118777696453465,3.254738949660456e-08
26 +0.00014215997716062698,2.0668035090489348e-08
27 +0.00010430723023348266,1.4361299098377497e-08
28 +8.8213197077851438e-05,9.5746552739581861e-09
29 +8.0589904909768236e-05,7.4996919664111637e-09
30 +0.00015804542838804614,3.5521666383678481e-08
31 +0.00012772720025827817,2.2045748448063965e-08
32 +9.3486926351336682e-05,1.0384678407101521e-08
33 +0.0001050699428118745,1.1895306492747391e-08
34 +0.00013819853847982664,2.1672699648560212e-08
35 +7.9866894789802403e-05,7.2950093938329374e-09
36 +3.3626808595935305e-05,1.26138684204291e-09
37 +4.1847147168608125e-05,1.818111902587141e-09
38 +8.1887378552536388e-05,7.7354708406924213e-09
39 +6.5920643497778886e-05,4.4238782543079141e-09
40 +9.6084165973750867e-05,1.2805032726138758e-08
41 +0.00011090142110921326,1.2701144728808645e-08
42 +0.00014172575968156723,2.9125463878506157e-08
43 +9.8848941447141802e-05,1.3775585775363813e-08
44 +8.6171620822518203e-05,7.7790296409194131e-09
45 +0.00017145269149963462,3.6233338669838028e-08
46 +0.00019224972823194756,3.8099973296279259e-08
47 +5.80627160164585e-05,3.8999143881771987e-09
48 +0.0001130938065422844,1.5868851870496025e-08
49 +0.00024371572207406708,6.5218728623863564e-08
50 +0.0001676228700116649,4.2069956317544517e-08
51 +0.00019917287927743009,4.4639420546664094e-08
52 +0.00011520198291787633,1.7810125490647562e-08
53 +0.00011270065965677967,1.8099128743512548e-08
54 +0.00011250565784489241,1.3278081519704562e-08
55 +8.4583913467279045e-05,9.1933015090385829e-09
56 +0.00012789057291449956,2.2059307294042244e-08
57 +0.00014777973610786415,2.2576041410933114e-08
58 +0.00016985974964642094,3.8764945217385767e-08
59 +0.00020798870975328052,4.4998895979216774e-08
60 +6.9885745403057189e-05,5.4490269604967011e-09
61 +8.9430564746528841e-05,8.5973031258527259e-09
62 +4.8797836512109514e-05,2.6853342029450698e-09
63 +5.1155225143286407e-05,3.1882999621257537e-09
64 +6.1532185104798141e-05,4.3534184581962642e-09
65 +4.602032388876992e-05,3.1267042771399209e-09
66 +6.087383799210071e-05,5.3439374141231573e-09
67 +4.1169108295041356e-05,1.7105872704468924e-09
68 +4.4639155154950822e-05,2.7771354448123583e-09
69 +8.0370281040046342e-05,8.6581083368376567e-09
70 +5.7688289587857187e-05,4.6518752862767097e-09
71 +7.2707361438514474e-05,6.285346071405861e-09
72 +4.3150266969788614e-05,2.1079927373333253e-09
73 +6.2182554789271891e-05,4.4559093245388832e-09
74 +3.5547298632941716e-05,1.3664048491425626e-09
75 +3.2336239668369105e-05,1.1411648433607441e-09
76 +2.2892748972472851e-05,5.4005093503578139e-10
77 +3.9017075692884282e-05,2.0659736397395156e-09
78 +3.4363843603561887e-05,1.4372395842970005e-09
79 +3.7768539117161634e-05,1.9555626097253645e-09
80 +5.5608315241996902e-05,4.0285106076457656e-09
81 +9.495622628915399e-05,9.4975115388102091e-09
82 +0.00012075182221443614,1.7742888738007114e-08
83 +0.00010366646977946964,1.3871683893877352e-08
84 +0.00018309090377095866,4.4730621345731043e-08
85 +0.00021574403620057739,5.6873582368402868e-08
86 +0.00016033191342021955,3.4222334895165218e-08
87 +0.00029524409856851311,9.5208237837946376e-08
88 +0.00014538693289917551,2.3865118559053892e-08
89 +0.0001230154040645433,2.0821831408332563e-08
90 +0.00019426841234193679,4.4874313708930941e-08
91 +0.00021248430138282067,6.1390021739364239e-08
92 +0.00020622106624640146,5.6950876258613656e-08
93 +0.00014577146661019666,2.8924039131400655e-08
94 +8.849246516914541e-05,9.2618730139723343e-09
95 +7.9484071376788337e-05,7.4930077987263806e-09
96 +0.00010543354775035837,1.4042547844029122e-08
97 +8.5997587504944999e-05,1.0578253214611148e-08
98 +5.203225468468112e-05,2.9746798932897801e-09
99 +5.5463102746352212e-05,3.7868615468273752e-09
100 +0.00015972300506320904,3.3204135610437961e-08
101 +0.00020926140478594565,6.3442702338639946e-08
102 +0.00040474323939777699,2.0703460464419671e-07
103 +0.0002822073439864779,1.0331078413436207e-07
104 +0.00020366797632913357,5.5025071217726528e-08
105 +0.00014047847556854579,2.2531434562939176e-08
106 +0.0002752401704489624,9.6259763017339006e-08
107 +0.00015453092956090034,3.1663123267710143e-08
108 +0.00013907244129505243,2.7274751820318475e-08
109 +0.00017545217625634658,3.4817822612752479e-08
110 +9.022204845835242e-05,1.1353267486925884e-08
111 +7.8913671171194436e-05,9.0461925621854703e-09
112 +6.4020152694301824e-05,6.1073459648769872e-09
113 +7.1961126703031433e-05,7.5593985361473772e-09
114 +0.00010363675080400878,1.4689114371355169e-08
115 +7.6885902601847491e-05,7.4693414948764468e-09
116 +0.00010258456016755281,1.0863457054007705e-08
117 +8.0850924925293121e-05,7.0625034056745101e-09
118 +8.6328397296555508e-05,1.1158658563286452e-08
119 +8.5193439584333488e-05,9.4828229318971873e-09
120 +6.7413638591793702e-05,4.6905427836938319e-09
121 +4.2758006650950521e-05,2.237707657938565e-09
122 +5.0584413774008995e-05,2.7493742070329457e-09
123 +5.7056426383593604e-05,3.7534805781988037e-09
124 +0.00016126597708017191,2.9509717984389842e-08
125 +0.0002442474085627346,6.6657318239851568e-08
126 +0.0003233285825672374,1.4113315972023555e-07
127 +0.00019436112406991427,4.6342652526323968e-08
128 +0.00029417362634421201,1.1619970983016829e-07
129 +0.00034441132124924436,1.4413030872153624e-07
130 +0.00027989385245351633,7.9103965133578985e-08
131 +0.00040074631487730495,2.0242402956580712e-07
132 +0.00033092907680000151,1.5687600640076096e-07
133 +0.0002983630173988616,1.1945761834194381e-07
134 +0.00022665218811186393,7.4437358160846893e-08
135 +0.00013601308699839459,2.7262518463304052e-08
136 +0.00021614517441976758,6.7025598393992245e-08
137 +0.00010866287556651908,1.6903222649380552e-08
138 +0.00012748902103248088,2.1637599144235496e-08
139 +7.5779522138073806e-05,8.2461998538364272e-09
140 +8.9522437419467578e-05,8.9943223148784641e-09
141 +6.5145526018845046e-05,6.1283421279398071e-09
142 +0.00011013831000918839,1.2570296162344414e-08
143 +8.9654650183107744e-05,8.2950687834250852e-09
144 +8.1748833672386256e-05,9.9650326165940379e-09
145 +6.5267460967209618e-05,5.8730218776908812e-09
146 +5.7836121365137354e-05,3.6724855362210332e-09
147 +5.2400507364212844e-05,2.8901375403407135e-09
148 +0.00011057499854236544,1.4442411235787337e-08
149 +0.00011962178896928292,1.8865426464818469e-08
150 +7.9325028461078685e-05,7.9338075155837072e-09
151 +0.00014781237733230767,2.43633131715108e-08
152 +0.00015155113758276095,2.7462976221594666e-08
153 +0.00019082442627126978,5.4029454466883508e-08
154 +0.00024214401744905879,7.9333845978466118e-08
155 +0.00012296175121681964,2.0041005585797199e-08
156 +9.2114784751426486e-05,9.0997306702498047e-09
157 +0.00010224133096365215,1.0665839519528526e-08
158 +0.00020858264392286898,5.0745412286613246e-08
159 +0.00026196553324563365,9.3524541644135947e-08
160 +0.00010459568930190152,1.1265824210550406e-08
161 +5.5389774653539768e-05,3.5040180860417956e-09
162 +0.00012161066653792054,1.8921717202016512e-08
163 +0.00012496542721575091,2.0090718307831775e-08
164 +0.00018237212016546241,4.0252555346655152e-08
165 +0.0002533057576813087,7.7427704630914776e-08
166 +9.2848800910687939e-05,8.6764399505456429e-09
167 +0.00013893402999186333,2.8862379940478855e-08
168 +0.00012472244395763814,2.2333047764451103e-08
169 +0.00011626811087861832,1.7961932101825275e-08
170 +0.00026056566058541768,8.2532996393658417e-08
171 +0.00020340749693656979,4.5212745273411704e-08
172 +0.0001343899249302987,2.0732413307034011e-08
173 +7.1483142300146052e-05,6.9060887154592001e-09
174 +0.0001669078794181886,3.3054012066258031e-08
175 +0.00019914601063936708,5.7566608065446493e-08
176 +0.00010441877881434704,1.2569254534164447e-08
177 +0.00011598391704323882,1.3708313185213953e-08
178 +0.00013475489230286398,1.9583513128902819e-08
179 +5.9835464208879106e-05,4.5680208283605945e-09
180 +8.775384595530041e-05,9.1171677982127394e-09
181 +7.0581789719200062e-05,5.6608329267661922e-09
182 +0.00012691819814470963,2.0239123827621483e-08
183 +9.367344259306911e-05,1.2468457200351894e-08
184 +9.4515750927348961e-05,1.2693121645029642e-08
185 +3.8988624232738166e-05,2.0001574640898515e-09
186 +3.5191095101943765e-05,1.5008487242934362e-09
187 +3.1345746335553796e-05,1.0653532686350382e-09
188 +9.5315725319364118e-05,9.9787500815009172e-09
189 +8.6892729745937785e-05,9.4886559776577468e-09
190 +9.7563720117789293e-05,1.2683156354666158e-08
191 +7.0059035641051892e-05,5.2745526723645076e-09
192 +5.9674208247108859e-05,3.7636757894867601e-09
193 +7.3961571180690519e-05,6.883604033914095e-09
194 +0.00022057438233797423,6.3380586418249858e-08
195 +0.00013509595635420308,2.7211992487838203e-08
196 +0.00024670260763484317,8.5484518359752931e-08
197 +0.00035223486140870678,1.3798011172950215e-07
198 +0.00026711092946066125,8.9279473052616109e-08
199 +0.00026980280571216466,9.0354892886100141e-08
200 +0.00032007147838398824,1.0654096708895757e-07
201 +0.00016052122721345465,3.2025773902655691e-08
202 +0.00012717680856973539,1.7515351593108141e-08
203 +8.8581481702901618e-05,1.1258383712805863e-08
204 +8.4467351051480775e-05,7.6595845159092676e-09
205 +0.00011788470691246586,1.4455414379246464e-08
206 +0.00028021280354358227,1.1506116265944366e-07
207 +0.00029426793621382171,1.2249000457673324e-07
208 +0.00027391809254792234,1.10944088230275e-07
209 +8.547441593165159e-05,8.4096180744741025e-09
210 +0.00015579180526731327,2.9659944005817043e-08
211 +0.00010754070497267883,1.6880616777254691e-08
212 +0.00014706386368373595,2.560112673626659e-08
213 +0.00017616149296878657,3.179542542464602e-08
214 +0.00027513531779862555,1.044472914513479e-07
215 +0.000181893961959533,3.6827092782148085e-08
216 +0.00018454172357179908,4.5266509961290522e-08
217 +0.00016649940345223762,3.5556002227601616e-08
218 +0.00013200745799930459,2.3164312965030525e-08
219 +0.0001861482507736353,4.9720839954358491e-08
220 +0.0001416244719737273,2.331360918845109e-08
221 +0.00012138255733425131,1.8957245458468766e-08
222 +0.00015408699420419326,3.3969289361262967e-08
223 +0.00022203741372493155,6.1078323592167132e-08
224 +5.1746881329414514e-05,3.6312135045968732e-09
225 +6.6757827580333321e-05,5.5133625415378266e-09
226 +7.3919535479465465e-05,8.1644353336467734e-09
227 +0.00026547247767993938,9.9982333670178773e-08
228 +4.3092776671361529e-05,2.0097973987302333e-09
229 +5.9962968174539861e-05,4.9823993528013972e-09
230 +7.9401498064342367e-05,7.6602386160553312e-09
231 +7.6074493398083231e-05,7.5015480107249738e-09
232 +0.00014464219017977417,3.0106511725158855e-08
233 +0.00014131143633457722,2.5638487570810528e-08
234 +0.0001302415978355424,1.946694243888579e-08
235 +5.0947696269194378e-05,3.0038511824877482e-09
236 +7.4580832039912155e-05,7.3560717914570296e-09
237 +0.00010282807534332023,1.3364180649756897e-08
238 +0.00019813625378728813,4.4024705609206571e-08
239 +0.00017604496145242799,3.5502325027114845e-08
240 +0.00031589127614944907,1.3835775420618289e-07
241 +0.00052100705080737131,3.9504836733697791e-07
242 +0.00024375638521213091,8.1135266245579882e-08
243 +0.0003102907722107397,1.1513965311630114e-07
244 +0.00013740756540091116,2.0169814514937036e-08
245 +7.006648161625411e-05,5.1259313583124558e-09
246 +0.00011034404985396717,1.7847164634409414e-08
247 +0.00013970966594014858,2.2834196950386489e-08
248 +0.00012090639852409316,1.8551544132624604e-08
249 +7.786493529961827e-05,8.4435218615377187e-09
250 +4.9077900242519607e-05,2.5421755243834971e-09
251 +6.5999863171346942e-05,6.4907943687971341e-09
252 +6.0016101692424829e-05,3.9648160056497845e-09
253 +0.0001031314949311694,1.1808148380969765e-08
254 +0.00015511115442165186,3.5472676505089405e-08
255 +8.4280065072782448e-05,7.9895849984084921e-09
256 +7.8467366153467415e-05,7.2647816106345515e-09
257 +6.2308422017793053e-05,5.1829210102143666e-09
258 +6.9944215562160075e-05,7.2379901565250755e-09
259 +6.4284151612812172e-05,4.7504583724670957e-09
260 +4.5514863289180117e-05,2.3121555442905651e-09
261 +3.5503827824029109e-05,1.5652788121379011e-09
262 +3.323739905728216e-05,1.3432695340475259e-09
263 +4.0003660591531288e-05,1.9266337530786206e-09
264 +2.1023182663427053e-05,5.3637430252717326e-10
265 +2.6421632248017649e-05,7.7219126172762805e-10
266 +5.8500208475851022e-05,5.1038930224837298e-09
267 +7.9945683372462182e-05,6.8072959702889423e-09
268 +6.2787386915034917e-05,4.7561379593398483e-09
269 +3.4229705830139901e-05,1.7466192286885742e-09
270 +0.00010127930449144857,1.4014193868816126e-08
271 +0.00013739488911934441,2.0815336859401874e-08
272 +0.0001947500097437321,5.3411686296741239e-08
273 +0.00015636741970193177,2.6141554975855207e-08
274 +0.00013353163757579182,2.5087871640141134e-08
275 +7.3596787083557907e-05,6.6983119649872388e-09
276 +4.3057568001899588e-05,2.4617439388706652e-09
277 +5.1654695418385675e-05,3.9988274852557549e-09
278 +7.1262491068964487e-05,6.0041386622211344e-09
279 +7.6037823637065631e-05,6.7620599345383405e-09
280 +5.6114186162722714e-05,3.5650301489606472e-09
281 +4.2835590063910845e-05,2.6566985349401625e-09
282 +5.6416501903787042e-05,4.1278447350221711e-09
283 +7.9172933875098014e-05,8.1434082636160207e-09
284 +7.0273541225218081e-05,5.0472706227937847e-09
285 +4.675933183864088e-05,2.3467177628405253e-09
286 +8.1221395025965173e-05,8.4954452313440462e-09
287 +9.6021977311690581e-05,1.1062586165022277e-08
288 +4.610727164128142e-05,2.7910372032348836e-09
289 +3.7604716263110476e-05,1.4911603160874196e-09
290 +8.1225601075396334e-05,7.2106418345417223e-09
291 +7.9056746313299568e-05,8.1400070055765847e-09
292 +4.5443923200930361e-05,2.0885306580064658e-09
293 +5.5814829111885204e-05,3.96663825385966e-09
294 +7.1927250884325241e-05,6.6074404905425196e-09
295 +9.2985074942901892e-05,9.1222223089933362e-09
296 +7.6041188563993466e-05,8.56297734308239e-09
297 +6.5346211227125601e-05,6.3360123538782531e-09
298 +6.6548900086707682e-05,4.5232386046331083e-09
299 +8.5720868621949812e-05,7.3848003166618433e-09
300 +9.0918146780127087e-05,9.3486542862817444e-09
301 +0.00015175706629591351,3.0127955445418164e-08
302 +5.0215393639423547e-05,2.9194019328612444e-09
303 +4.0712293497382606e-05,2.0896300930632257e-09
304 +5.2223580065743348e-05,3.4296303300438429e-09
305 +6.9244652091233932e-05,5.3852177737829951e-09
306 +0.00013947349427466667,2.2068061087868937e-08
307 +0.0001403105563064267,2.3105575903065618e-08
308 +0.0001098000639054699,1.2086760802806138e-08
309 +4.4540774313285586e-05,2.727523880985936e-09
310 +5.3661145216022109e-05,3.4041765784192262e-09
311 +5.8056011568856185e-05,3.8240224703727609e-09
312 +0.00010352822431837142,1.0988507292157066e-08
313 +8.9666363171910993e-05,9.0104142352228334e-09
314 +8.2594303254089363e-05,7.9702233673596082e-09
315 +5.7667736626575074e-05,4.8807584085287391e-09
316 +4.6490782533174141e-05,2.8714236783645724e-09
317 +6.0964486154807764e-05,4.920123706507387e-09
318 +5.9014838830308736e-05,4.8581409551842741e-09
319 +4.5403598939382315e-05,3.0651145209261766e-09
320 +3.9957870623690603e-05,2.0979151451096439e-09
321 +5.0930478519446854e-05,3.3130646295242813e-09
322 +5.9375032687345025e-05,4.9115064148746838e-09
323 +9.2267138116145639e-05,1.1910529825973387e-08
324 +5.3534793114049959e-05,3.8060475503836585e-09
325 +7.6744609805345945e-05,6.3807858175409875e-09
326 +0.00013246549399797356,2.5944919145247038e-08
327 +9.3507676008056686e-05,1.2824587410915348e-08
328 +7.4826538262629406e-05,7.5374157520358413e-09
329 +0.00012127283627183676,1.6665493850448401e-08
330 +3.80467046508397e-05,2.1259929269235615e-09
331 +4.5941650851043232e-05,2.2111230722379023e-09
332 +4.1098085314484852e-05,2.2265483691767802e-09
333 +0.00011839931360137951,1.903882855065874e-08
334 +0.00019508505261254687,4.0473143235481516e-08
335 +0.00023146076461439617,5.76450241359542e-08
336 +0.00024276999832912742,6.1164778655773259e-08
337 +0.0002472798520218322,7.2579974220642769e-08
338 +0.00030352540167097086,1.2322243594804211e-07
339 +0.00026944128316120264,1.0313475059256134e-07
340 +0.00025840008333843749,9.382131321739364e-08
341 +0.00015106721386107952,2.355142578086102e-08
342 +7.4957677105530574e-05,5.6192298940954576e-09
343 +4.4722523579748347e-05,2.7307239240306406e-09
344 +6.5937481522843506e-05,5.4534888248550399e-09
345 +7.9970942956917188e-05,9.4678605221596071e-09
346 +0.00011531833984898028,1.8155850663618298e-08
347 +5.8293956729095902e-05,3.7202770190140262e-09
348 +0.00010471804190475633,1.4140465118691946e-08
349 +8.3289928784816724e-05,7.6719794134578919e-09
350 +4.914277358908666e-05,3.4880807223993363e-09
351 +8.8209534170458607e-05,9.8741791804192507e-09
352 +7.8884728086501976e-05,7.5920505473145464e-09
353 +5.2124556356989746e-05,3.3587404643417659e-09
354 +7.828927203344721e-05,7.1305935498648749e-09
355 +0.00010075927611539037,1.1469769129880864e-08
356 +8.1048700240100199e-05,8.5621193987587684e-09
357 +9.826095486830324e-05,1.0674876246303847e-08
358 +0.00015260621920374704,3.0534400261891433e-08
359 +0.00011235652790071924,1.2965230572693661e-08
360 +0.00015527101519822824,3.1975781727523184e-08
361 +0.00011227849151378484,1.4490999515326876e-08
362 +6.3932699561176982e-05,5.8945263767605894e-09
363 +6.9269031005063578e-05,6.5089244560494246e-09
364 +9.6866396274772562e-05,1.0438758574459312e-08
365 +0.00010647629138868425,1.1838042630177918e-08
366 +9.3321786990478438e-05,9.5578997143661418e-09
367 +0.00013362612382497769,2.1217861384188261e-08
368 +7.1160496438525057e-05,5.2920300722068026e-09
369 +6.3119137121765253e-05,4.7016999377608876e-09
370 +7.3455333976728835e-05,6.2929964868663656e-09
371 +7.9466822274698826e-05,7.4379615132203714e-09
372 +8.8957235580112257e-05,9.820505008714816e-09
373 +9.8411624004454299e-05,1.2667481589099864e-08
374 +0.00027172967866139511,9.6480510992760821e-08
375 +0.00010212125261553596,1.1530935046674526e-08
376 +9.9634546017718481e-05,1.4203950627683484e-08
377 +0.00024077142938247142,6.9020091748346162e-08
378 +0.00017124285421546298,3.7846035961496104e-08
379 +0.0001416713206841248,2.5318476034598015e-08
380 +0.00017843452447752187,4.1280106189646035e-08
381 +0.00014298192646372229,3.0230591152593601e-08
382 +0.00016801235770205099,4.0242945106064391e-08
383 +0.00011013004643199864,1.3175364586008529e-08
384 +0.00010953822258033056,1.3538273937874511e-08
385 +0.00014235710018049508,2.8831035289402872e-08
386 +0.00017034178339077335,3.1354421924118474e-08
387 +0.00016182423897911371,2.6419084573465926e-08
388 +0.00011759390111478323,1.4655714483680766e-08
389 +0.0001211998515678488,1.8139410796387308e-08
390 +4.0293583773631935e-05,2.002080474858696e-09
391 +4.0502976035496944e-05,1.8318084754035279e-09
392 +4.5551201580974906e-05,2.2987628642868023e-09
393 +5.4480329462933044e-05,3.8426175630026503e-09
394 +0.00011316366180244386,1.6450105612111515e-08
395 +9.7832850585077342e-05,9.6893875925996529e-09
396 +0.00010069042983442145,1.3118384123535951e-08
397 +0.0002762327346361727,1.1346759836088944e-07
398 +0.00028789840598842108,8.3367212386113956e-08
399 +0.00019751473709386834,5.4194995754813537e-08
400 +0.0001385482219340893,2.3943961839600389e-08
401 +9.7315553271584552e-05,1.0905812020984487e-08
402 +8.0136738134565494e-05,8.539738514311118e-09
403 +9.7536914763503358e-05,1.0344208872908295e-08
404 +0.0001569210700273195,3.6404489893017274e-08
405 +9.4314879154539592e-05,1.3053356399039483e-08
406 +8.685855269693912e-05,1.0797771126809099e-08
407 +0.00014696783721759917,2.5263101089394539e-08
408 +7.7084854665785785e-05,7.6742669053767026e-09
409 +7.1880793177001885e-05,5.7164350815194429e-09
410 +0.00011130297940782544,1.5655974153610632e-08
411 +7.7220661700113982e-05,8.3813292005058803e-09
412 +3.6228590543894594e-05,1.5477681122187829e-09
413 +6.2192728594818121e-05,5.6860463189200239e-09
414 +6.3138593328491242e-05,5.1179462353111651e-09
415 +0.00013965966516290708,2.3755492199851628e-08
416 +0.00011769262912516814,1.4463699685234442e-08
417 +0.00015478658514780195,2.6207928182576154e-08
418 +0.00013625057562466461,2.7670555791745665e-08
419 +0.0002149943724977501,4.8432789942786816e-08
420 +0.00013020933614248589,2.0300509396021672e-08
421 +0.00017820413770208701,3.5100896616877834e-08
422 +0.00012576226707833706,2.3157744089250918e-08
423 +9.9550154543799518e-05,1.079975001985084e-08
424 +0.0001759777911063467,4.291263065148973e-08
425 +0.00011638497844115248,1.9685342251994218e-08
426 +0.00018476989146659474,4.7038583554351609e-08
427 +9.4185432530540091e-05,9.5730432614358436e-09
428 +0.00014896045885886378,2.2858916526885419e-08
429 +0.00024741469616072396,9.0859990956003376e-08
430 +0.00036363937265708934,1.4873714303426696e-07
431 +0.00020721788273303073,6.2215087289295649e-08
432 +0.0001842125348546082,5.0572808970246539e-08
433 +5.7623796742159573e-05,4.1257432782196985e-09
434 +0.00011618348448276879,1.9025771775537491e-08
435 +5.0037317233831166e-05,2.5571467935057519e-09
436 +7.3451952591839108e-05,5.407826477683125e-09
437 +8.0355030936959807e-05,7.8496889753725378e-09
438 +7.0532520567320121e-05,6.6793743206511794e-09
439 +9.6792584666340913e-05,1.2646188116855137e-08
440 +5.9905949198847787e-05,3.737289912458922e-09
441 +0.00012723097658710029,2.3674764956821106e-08
442 +0.0002785127683590357,9.4769208880564963e-08
443 +0.00027434380233879244,8.8657872372124309e-08
444 +0.00021760251947035847,6.0191757597757443e-08
445 +0.00012833919419305177,1.9084267449490405e-08
446 +0.00013805760492475262,2.1322387369618561e-08
447 +0.00013481624979072985,2.5760657304342827e-08
448 +7.7868542716497564e-05,8.6993221919328259e-09
449 +0.00011135800030027136,1.3211997078995451e-08
450 +8.2275038323222329e-05,9.4467804528734605e-09
451 +7.8199094541355689e-05,7.3643141218473056e-09
452 +5.4367448694543207e-05,3.336184631741925e-09
453 +9.6781860822908744e-05,1.3527446376540739e-08
454 +6.2442184959987738e-05,5.539260279665186e-09
455 +4.7138568289188041e-05,2.7162622371608079e-09
456 +3.512537618836283e-05,1.8311971868061627e-09
457 +8.5139147852358909e-05,1.008740055492399e-08
458 +8.7848677929570394e-05,9.7103723568816937e-09
459 +8.5937530459319862e-05,7.9483479740326213e-09
460 +0.00010403176503063411,1.4713414051636133e-08
461 +6.9134520509442357e-05,4.9963020466795217e-09
462 +0.00012170430648472776,1.5273733332658733e-08
463 +0.00011466790022064254,1.8712404877411151e-08
464 +4.0558957762481615e-05,2.008904203739543e-09
465 +4.7890599504162361e-05,3.1409341952757204e-09
466 +4.8791032700319863e-05,2.7365401047533712e-09
467 +3.4692912770919211e-05,1.771659527501952e-09
468 +8.0605376424514922e-05,9.2915116271043078e-09
469 +7.8750715583006427e-05,6.8625022463298477e-09
470 +0.00013063284849856898,1.9796745432456599e-08
471 +0.00022731412714601431,5.6946818360888348e-08
472 +0.00026910296001531313,1.0376399840138849e-07
473 +0.00021222006982799096,6.6002059188320094e-08
474 +0.00019834778096877338,5.6244654299776243e-08
475 +0.00015689581236532482,3.6663797635049236e-08
476 +0.00014719739897037294,2.7999659139530103e-08
477 +9.2161974057979065e-05,1.1213495271958364e-08
478 +0.00012733082593941253,1.7191741520920114e-08
479 +6.6642884098088375e-05,6.3141359257446712e-09
480 +5.7132692617711185e-05,3.6032169539297367e-09
481 +8.7584332482320044e-05,1.028381863093356e-08
482 +0.00010268911278582948,1.2957124100837398e-08
483 +8.8236835622954228e-05,8.3160292269201141e-09
484 +0.00012147891184120068,2.0793421725849222e-08
485 +0.00012993041028235477,1.9226388994998291e-08
486 +5.8087219975920151e-05,4.2636388786600157e-09
487 +0.00010738526016017441,1.2335119983187547e-08
488 +8.5568737292767845e-05,1.0941004756789268e-08
489 +0.00015649953976465096,2.7388454511234206e-08
490 +9.7422533191397897e-05,1.0259505087596437e-08
491 +7.9668183070768082e-05,9.3058055368929468e-09
492 +4.3093150605787988e-05,2.3908327330601291e-09
493 +6.0911646152074507e-05,4.3458814677348375e-09
494 +7.0502570455653699e-05,7.2151809753629509e-09
495 +3.0874270264403687e-05,1.2072513516869763e-09
496 +3.2797852057643548e-05,1.5489110040064531e-09
497 +2.0177132094394047e-05,5.625943923461352e-10
498 +3.5934298700497495e-05,1.9273769226878448e-09
499 +4.6499720632209772e-05,2.4910919878734592e-09
500 +6.4858464916721842e-05,5.6033074149810484e-09
501 +9.6931370608456478e-05,1.1374238613238514e-08
502 +0.00015234880126833788,3.4635851385053881e-08
503 +0.00016307361306733208,2.6779837396383047e-08
504 +0.00016534491581656868,3.0395082807184535e-08
505 +0.00010134757923800346,1.1824709583223465e-08
506 +6.9673152253565043e-05,5.2851891355194909e-09
507 +8.2736276119760088e-05,7.9689497409908002e-09
508 +0.00011362580419750534,1.4072970228938199e-08
509 +9.2167982038649307e-05,1.0144912873875229e-08
510 +0.00013720301889054578,2.1770851658145502e-08
511 +0.00024109908399490914,6.699600090735019e-08
512 +0.00024953604768671305,7.9035101390167544e-08
513 +0.0002786947305531501,1.0949413655305063e-07
514 +0.00031356307872508379,1.0948031090264017e-07
515 +0.00036347617748557105,1.4560829507750637e-07
516 +0.00028418013691478933,1.1808619733218703e-07
517 +0.00019651677351467089,4.0922584691641731e-08
518 +0.00015480374373528515,3.147441077859336e-08
519 +9.9767488468437311e-05,1.1947487017712083e-08
520 +5.3942716794014619e-05,3.0235926423075614e-09
521 +6.6798384448663733e-05,5.3433772110564622e-09
522 +6.8811120021139527e-05,6.6738962041861856e-09
523 +9.5927974065554119e-05,1.3329994352340056e-08
524 +4.4957030521991276e-05,2.21467445799757e-09
525 +6.3046211284285646e-05,5.5583893966934978e-09
526 +6.4807417094471365e-05,5.9371173108810785e-09
527 +0.00020393336818934124,5.0444757246864561e-08
528 +0.00012777674242685883,1.7927402583077243e-08
529 +0.00022434274617913786,7.1038775356578831e-08
530 +0.00010761046818596612,1.4217311829263762e-08
531 +0.00012074768094130336,2.0303016978008509e-08
532 +8.8059720249858241e-05,8.7206987286114816e-09
533 +8.8942123799297097e-05,9.0319316572831234e-09
534 +5.9074126833432297e-05,3.7168024660702774e-09
535 +4.7384445517718311e-05,2.3105654583005383e-09
536 +7.4036922643909089e-05,7.6006573904340827e-09
537 +0.00012020443888694678,1.5652485722883417e-08
538 +0.00015799594436179324,2.7024368536414186e-08
539 +0.00014031254416606352,2.7011183180109491e-08
540 +0.00018868363074791268,4.2915179934367317e-08
541 +0.00019865370491991505,4.8698688722485426e-08
542 +0.00010621446436221265,1.4814342358464291e-08
543 +0.00017401078849255065,3.4866296100144379e-08
544 +0.0001243405219743388,1.6334692085644383e-08
545 +0.00012197209145347773,1.9828220485383867e-08
546 +0.00013103358365326406,2.1368711976944867e-08
547 +0.00013186167186474319,1.9031337003090894e-08
548 +0.00015590702616926361,3.3710001785141804e-08
549 +0.00012562781133946421,2.2394348999933687e-08
550 +8.3921458065598715e-05,9.7667138815061362e-09
551 +0.00014064935857427603,2.6362331350680753e-08
552 +0.00010761687396842157,1.5297678464135613e-08
553 +0.00019741866250421692,4.1854760544242421e-08
554 +0.00027378373903523908,8.8001057054266784e-08
555 +0.00035134213402086557,1.7986160717098448e-07
556 +0.00024433735633000263,8.6561948019660403e-08
557 +7.0489411816621354e-05,5.1467303990714623e-09
558 +8.179479436383305e-05,7.5627117004459417e-09
559 +0.00010018087344497,1.0162314924780352e-08
560 +8.0811910679015822e-05,9.3213984115784102e-09
561 +0.00013861548657423007,1.9981485296022737e-08
562 +0.00016510656985581435,3.4279840039069443e-08
563 +0.00010723328823377977,1.5531668608682217e-08
564 +0.0002243420498000281,6.1113798968424265e-08
565 +0.00011541552093981115,1.8182009711329769e-08
566 +0.00022905131373622716,7.1703716694469284e-08
567 +9.2920784012394405e-05,8.8331454609278132e-09
568 +9.3529897071483888e-05,1.2534239667189936e-08
569 +6.0802901026842321e-05,4.0033884931750619e-09
570 +7.3501975357161573e-05,7.7501241410965676e-09
571 +4.3908848872897749e-05,2.0860434947596473e-09
572 +4.6348728325011491e-05,3.1048730277725394e-09
573 +5.0959962119908406e-05,2.6062417135632586e-09
574 +6.0009972343208277e-05,4.5836767452789083e-09
575 +0.00013974620428245456,2.1253527019739667e-08
576 +6.3921908419632418e-05,4.3962115708853747e-09
577 +5.2776677362464022e-05,2.8474598947019454e-09
578 +4.188449103824819e-05,2.0767854989836254e-09
579 +0.00012685364840232802,1.9011614662031364e-08
580 +0.00011313611959068537,1.529559208162956e-08
581 +6.9509344006836663e-05,6.4583829977191499e-09
582 +5.2866849229971648e-05,3.9797615705706923e-09
583 +7.6985197115817628e-05,6.8270151469678458e-09
584 +6.3992759103413232e-05,5.1215079577221659e-09
585 +4.9832965467718474e-05,3.4871095135489759e-09
586 +6.4751026312580238e-05,5.8758577930821125e-09
587 +3.9313415589023394e-05,1.5803981809025436e-09
588 +6.0355366332614851e-05,5.3357944477562449e-09
589 +6.7370734179695446e-05,4.9462681192028452e-09
590 +9.3613560838076351e-05,9.1823319723036678e-09
591 +0.0001075541183850564,1.4081787130349336e-08
592 +0.00010740759957314411,1.6327529572602247e-08
593 +6.9166763930732009e-05,6.8515269874950786e-09
594 +5.8249670317693873e-05,4.0990429095676371e-09
595 +5.6772373042539206e-05,4.7071511628992743e-09
596 +5.2942146384608268e-05,4.0550088444825234e-09
597 +3.2088428730645849e-05,1.4674081618821739e-09
598 +4.6091585785383406e-05,2.6499525445106362e-09
599 +6.4096778977697333e-05,5.303327813381318e-09
600 +2.9117210871783992e-05,1.2412882989006059e-09
601 +3.2753127594009526e-05,1.3845324891217889e-09
602 +5.7003825891264038e-05,3.8663562121451553e-09
603 +8.5762975281476777e-05,9.3459130637099969e-09
604 +5.7226306878943857e-05,4.4718471615485692e-09
605 +7.7422749128040977e-05,7.6598848986927719e-09
606 +5.2894304407231957e-05,3.1526520429027896e-09
607 +5.0529930439647783e-05,2.6383022790587811e-09
608 +0.00010127763528258339,1.343676050901046e-08
609 +9.3123627001334624e-05,1.1416611320877186e-08
610 +3.9951625338739582e-05,1.679706834716997e-09
611 +6.4367162415305965e-05,4.3780528754743123e-09
612 +7.480836018524344e-05,7.5558372276486288e-09
613 +4.7436793165336759e-05,2.49089223481078e-09
614 +6.7950306711857529e-05,6.7925438500525766e-09
615 +6.4366867687933995e-05,4.3579162843926468e-09
616 +0.00020329904738034774,5.2494870303034169e-08
617 +9.6683829886558015e-05,1.2112881336173277e-08
618 +8.3407421364036541e-05,9.3637340466882062e-09
619 +0.00011006297513947636,1.4896899197606274e-08
620 +0.00011287811865459646,1.4544409739973714e-08
621 +6.586588079279091e-05,5.4180449788484991e-09
622 +0.00017438521336933451,4.1917358572442844e-08
623 +0.00013029037245243806,2.05931439258193e-08
624 +0.0001486467033989441,2.4662815850196143e-08
625 +0.00010844427960212587,1.7320907190745279e-08
626 +0.00010453558494252142,1.2561365175103357e-08
627 +9.1966402133610137e-05,1.161608949903341e-08
628 +8.3280445091604051e-05,9.140957862932406e-09
629 +7.9656764828575226e-05,8.8566245695282137e-09
630 +0.00011534542450081169,1.5400705739968845e-08
631 +0.00010556957351119053,1.1265335008505069e-08
632 +7.7876538066542749e-05,9.0187378218232219e-09
633 +7.8151204106886168e-05,7.2801934396409849e-09
634 +0.00014688182547236613,3.06762511883623e-08
635 +4.7145188772921716e-05,3.18177730864936e-09
636 +4.189386789970632e-05,2.1351922982128203e-09
637 +4.7972857689952041e-05,3.1790719311374809e-09
638 +8.974808454007467e-05,9.747249046086316e-09
639 +7.7551421859494349e-05,8.1349352238076747e-09
640 +4.5678452839826732e-05,2.976061185845508e-09
641 +4.080210074885964e-05,2.2456773550553263e-09
642 +6.5280377833728685e-05,4.7920230105190225e-09
643 +0.00011184346724055216,1.3456839244629886e-08
644 +6.7533704896338381e-05,5.469963742994573e-09
645 +6.7318717584697915e-05,6.4315565347013229e-09
646 +0.00010600841488998275,1.6834342543775204e-08
647 +0.00010762790711637929,1.3729216502925666e-08
648 +6.558949505552e-05,5.3037321789524411e-09
649 +7.2764529173998928e-05,5.727265536608209e-09
650 +6.7354672989144521e-05,5.4939612803728076e-09
651 +7.779629377942193e-05,8.6490557935875154e-09
652 +7.3874198072753719e-05,5.6644088163637459e-09
653 +0.00010837768165838098,1.1915804927320723e-08
654 +6.0369426734643672e-05,4.2762264117635786e-09
655 +0.00013922942487493842,2.2840375859183259e-08
656 +0.000167218133714899,3.0125476080726806e-08
657 +0.00012350694846637996,2.0851704058597754e-08
658 +0.00011885783076159735,1.7025356414490401e-08
659 +8.188164693435179e-05,9.4771229821060971e-09
660 +0.00012798887890996927,2.3254602786363717e-08
661 +9.8725432228865493e-05,1.3680445298787268e-08
662 +7.2630244680399071e-05,5.7734085408320903e-09
663 +6.9696263872589542e-05,7.2061521125147553e-09
664 +8.7147123001352346e-05,9.84885497692351e-09
665 +0.00014229160409547312,2.3440377319011293e-08
666 +0.00023428688273343599,8.2332547773165068e-08
667 +0.00012487617395842257,1.8490819273745602e-08
668 +0.00015193606905525493,2.7828076926152459e-08
669 +0.00012198736808164072,1.9891843958700136e-08
670 +0.00010972661426253134,1.3213976555009245e-08
671 +0.00021133200901037402,5.5700309777081451e-08
672 +0.0002047558131086883,4.572294162519115e-08
673 +0.00019416643114633297,5.4932525240346787e-08
674 +0.00014284255196937411,2.092490599139034e-08
675 +0.00019024485596636051,4.5935686173681923e-08
676 +0.00032796926871454503,1.1160718965883338e-07
677 +0.0001997971488700547,4.1434392604462105e-08
678 +0.00021174055291874589,5.2367902674420363e-08
679 +4.9109801148896457e-05,2.9984709987068386e-09
680 +5.1465152763234431e-05,2.8225062898655755e-09
681 +5.3064697567818693e-05,3.1330918852909078e-09
682 +6.7473267720244475e-05,5.2332255479239441e-09
683 +9.057639101218908e-05,1.1918966898180578e-08
684 +8.9258945171321599e-05,1.1943977440097293e-08
685 +0.00010492887495131604,1.3124315454013998e-08
686 +4.9112684642861853e-05,3.1660452373783831e-09
687 +4.9709619095021045e-05,3.1105325260162207e-09
688 +4.2070773244082569e-05,1.7754379305585799e-09
689 +2.944585573684734e-05,9.8591210821882129e-10
690 +8.6459931449748393e-05,7.7916112690066837e-09
691 +9.4682496179437082e-05,1.2720014228386134e-08
692 +8.3257608675326822e-05,8.7760163900061186e-09
693 +0.00028476727348376445,1.0645867026358942e-07
694 +0.0001956356910702846,5.5222930312829479e-08
695 +0.00051550719213189287,3.9289058351642356e-07
696 +0.00032458974609241758,1.3759550378288339e-07
697 +0.00035988783414105753,1.7590685360296539e-07
698 +0.00028034333901279707,1.1197681896127464e-07
699 +0.00013764877158545027,1.9185470678682373e-08
700 +8.8974189339830495e-05,1.1360784735206e-08
701 +0.00010731613949985225,1.5901224198362156e-08
702 +0.00018177301346486058,4.1255081144422364e-08
703 +0.00010902071081585859,1.7023016703516474e-08
704 +0.00012560863758974728,1.7755763359740039e-08
705 +4.22845070142196e-05,2.584034221908187e-09
706 +4.0522609779431704e-05,1.9612669617602655e-09
707 +3.9965730056042557e-05,2.0788109003076401e-09
708 +5.4785090035447107e-05,3.9540279735755524e-09
709 +8.9590626975038023e-05,9.5483373099363769e-09
710 +9.4043651796402517e-05,1.0501749881732725e-08
711 +9.9348290001157933e-05,1.046790665108278e-08
712 +7.2946728998487487e-05,7.5290552558135835e-09
713 +4.4669022944144349e-05,2.1060360013023598e-09
714 +5.9073672995945866e-05,5.0247362202530861e-09
715 +8.8750265640902954e-05,8.7650914172003014e-09
716 +5.2561329600974017e-05,3.1517133717031591e-09
717 +0.00012631586478892705,1.8400485758847522e-08
718 +0.00015488693964781661,3.0772305548717175e-08
719 +9.2870341000557839e-05,8.9615996610400207e-09
720 +0.00012126079485712305,2.1673785086735913e-08
721 +0.00013229465581686794,1.868247443382914e-08
722 +0.00012946053583617165,2.1683445785833162e-08
723 +7.4340971793922781e-05,7.9034563240537484e-09
724 +6.4476170490014844e-05,6.1468485907652383e-09
725 +7.8803793321275789e-05,7.4767731730179989e-09
726 +6.9405328285431625e-05,5.2298846443112341e-09
727 +0.00012765936073589026,2.2638628313732221e-08
728 +8.1658881688113886e-05,8.320180521566376e-09
729 +8.8058804690070277e-05,9.3059529467416907e-09
730 +0.00012889446492900684,2.0920077538340177e-08
731 +0.00013433761123528013,2.2912052800495134e-08
732 +0.00013043691817901074,2.1376416877854295e-08
733 +0.00014395781940240588,3.103230842394837e-08
734 +0.00023471253877285897,8.2603864415545668e-08
735 +0.00013986489557499531,1.9698110867492685e-08
736 +0.00020978685074560783,5.8213076316632229e-08
737 +0.00028089364948381921,8.1611156741356414e-08
738 +0.00013823353838375696,2.4726219155770014e-08
739 +9.7215384200523714e-05,1.3354547117633167e-08
740 +0.00010933478524627177,1.4751743323318446e-08
741 +5.0523742927069816e-05,2.8029067163200567e-09
742 +6.2655828760133805e-05,4.7457848206422558e-09
743 +6.2651570260396949e-05,4.0840903347980675e-09
744 +4.6272742381796838e-05,2.5305372467386773e-09
745 +5.9929812427344659e-05,4.5928780420282894e-09
746 +0.00010267268836937572,1.112306166790116e-08
747 +8.9879452545301537e-05,1.0417936989198786e-08
748 +8.84547030772318e-05,1.0597726853515574e-08
749 +0.00013608775194005234,1.9779364548461035e-08
750 +0.00012063291249028287,1.5766116679615238e-08
751 +0.0001790644298954457,4.782411351781526e-08
752 +0.00021652399921658969,4.7366556092388333e-08
753 +0.0002380407813817183,8.2086638009388973e-08
754 +0.00020472471773480295,4.5908663456854466e-08
755 +0.00040756593671565456,1.7446885165566302e-07
756 +0.00022442376201939159,6.3119409582875623e-08
757 +0.00022599836049762618,5.3160805848229053e-08
758 +7.51511484456728e-05,6.9333440429385705e-09
759 +0.00013063963876207049,2.0183571744262572e-08
760 +0.00011763737835232221,1.3926322133483797e-08
761 +6.9697910992771433e-05,7.1460213628819609e-09
762 +5.8334939010806558e-05,4.2330322419537149e-09
763 +6.1171207943934818e-05,3.8302539346632766e-09
764 +5.8932466909881144e-05,3.7401595883946704e-09
765 +7.8581855580221483e-05,7.4685442025181322e-09
766 +0.00010436943790576852,1.6312386504151011e-08
767 +6.2764891597877381e-05,4.9543571066541839e-09
768 +7.1247675584772604e-05,6.8876012084207479e-09
769 +5.7156730062230423e-05,4.608963872131909e-09
770 +5.4991495369501443e-05,4.0684813594201297e-09
771 +5.9169006475528009e-05,5.0614785717624777e-09
772 +8.5184232918184132e-05,7.8865964009891824e-09
773 +7.7273126242455851e-05,7.4723152880001358e-09
774 +0.00016167792815208437,3.4138819062097776e-08
775 +7.9437139658325003e-05,8.2814686668465501e-09
776 +6.3971898086811164e-05,5.2038625822793551e-09
777 +5.2331211998409527e-05,3.2062776829525259e-09
778 +5.6922434703218186e-05,4.2382476187946114e-09
779 +0.00015158574307398996,2.3301487107508983e-08
780 +0.00017737983086449965,4.3129916877915361e-08
781 +9.9530231145786828e-05,1.3071365504525317e-08
782 +9.2027240056979657e-05,9.1034051318017947e-09
783 +0.0001106505948914295,1.2674930967363935e-08
784 +0.00010213950235555786,1.52658665395394e-08
785 +6.5450126539330994e-05,5.4715449521346635e-09
786 +9.1332408928715785e-05,9.1923487965771192e-09
787 +4.0038510839869969e-05,2.0628636983988592e-09
788 +2.5912051296663018e-05,8.2870919935217508e-10
789 +5.5945682442924105e-05,3.1711596947926312e-09
790 +7.814814121065829e-05,6.1604251379116902e-09
791 +9.4357469204955276e-05,1.0375472777590104e-08
792 +0.00011062217815445768,1.7243695186763529e-08
793 +3.208149021847016e-05,1.4018542463095864e-09
794 +9.6075578511164609e-05,1.1226118358519695e-08
795 +0.00013749762105805927,2.5164150406921078e-08
796 +0.00012816498321195529,2.3273223831225576e-08
797 +0.00013435917838854988,2.1938831900582619e-08
798 +9.8450936161015307e-05,1.050999458443188e-08
799 +0.00015181526863881816,2.5143570701484535e-08
800 +0.00017898737113675617,3.7433098114759458e-08
801 +9.6478522928708467e-05,1.2505929017923378e-08
802 +8.1500116933645616e-05,7.5623764618309991e-09
803 +8.1340541657380072e-05,7.0048213617087877e-09
804 +5.3839127515279888e-05,3.4211097458083875e-09
805 +3.6698312638878904e-05,1.563976810037949e-09
806 +3.4337592127838068e-05,1.2504573772156771e-09
807 +5.593305964317953e-05,4.1112565056017484e-09
808 +8.3596139011387407e-05,8.5481675454545361e-09
809 +6.9779642759670179e-05,6.709316462881509e-09
810 +4.948764147268085e-05,3.186914684452465e-09
811 +4.5461230866174733e-05,2.2692475692558033e-09
812 +7.6945156192110843e-05,8.3545162445703152e-09
813 +3.8903634870242752e-05,1.9714299600118728e-09
814 +7.7427152562062758e-05,8.4942707837879781e-09
815 +7.0601973695023451e-05,5.2419316398590358e-09
816 +6.4592323653750889e-05,4.6364907652746512e-09
817 +5.3894001960819598e-05,4.2917817266036203e-09
818 +7.3933274203238591e-05,6.4353067707095225e-09
819 +5.7869298915998078e-05,4.6264680447657043e-09
820 +4.3331355767185462e-05,2.6753632766799798e-09
821 +7.6105863861759772e-05,7.0100313499902952e-09
822 +0.00010701939252275837,1.4766033649867914e-08
823 +0.00011660600030753683,2.0238178874017765e-08
824 +0.00010919201771716639,1.2528626888362412e-08
825 +0.00015619517821142265,2.4602494114982562e-08
826 +0.00016171055564375656,3.678275840578081e-08
827 +6.5596015256298463e-05,5.9512177202520736e-09
828 +7.0161379938845191e-05,5.6814339771026041e-09
829 +5.7478481696819138e-05,3.7957732993661417e-09
830 +5.349654303568748e-05,4.0174178449941566e-09
831 +0.00010243817016959667,1.113024800320703e-08
832 +9.1890524585910019e-05,8.8274681658282215e-09
833 +6.1566645614510949e-05,4.4370480249996256e-09
834 +6.373185542577804e-05,5.7900272202871261e-09
835 +8.3530028622196079e-05,8.4328129737028663e-09
836 +0.00023378352471906659,6.2025751157612793e-08
837 +0.00012807842638926404,2.2823480846603392e-08
838 +9.1475678913910226e-05,9.1566350487819377e-09
839 +6.8365753826617285e-05,6.8638802865521742e-09
840 +5.5394017019118582e-05,4.0605162087405383e-09
841 +0.00010554924755506586,1.4709288705857391e-08
842 +0.00014240906007841189,2.5643295330162754e-08
843 +0.00010476427728591741,1.1393495540633132e-08
844 +0.00011950079810167275,1.9438762578685074e-08
845 +7.9392598110217225e-05,8.4433367132673563e-09
846 +9.5216487393065758e-05,9.9133673234886674e-09
847 +9.3758541870851662e-05,9.0463827097914858e-09
848 +0.00014872610792636824,2.2744251860036421e-08
849 +9.0795455014957421e-05,9.2948552395715479e-09
850 +6.3014495406319907e-05,4.9060646228450668e-09
851 +6.0205463114518939e-05,4.4214503068290741e-09
852 +3.4144198010189954e-05,1.5994055895798168e-09
853 +3.0734383083943203e-05,1.1173061917418456e-09
854 +6.1026647843014885e-05,4.5597397481400899e-09
855 +6.3675592949135676e-05,5.4924411477988588e-09
856 +8.9411004614251935e-05,1.0081087144689623e-08
857 +5.8509550139471689e-05,4.9976889297275018e-09
858 +6.9355396948226258e-05,6.157609127105462e-09
859 +4.8268607571987383e-05,2.8887694020096634e-09
860 +9.135793211986026e-05,8.8601446024183942e-09
861 +0.0001014884356207272,1.2128104163003991e-08
862 +5.5118095223454152e-05,3.5853622540198405e-09
863 +7.0700718368172237e-05,5.7922398411093852e-09
864 +4.5985506975888734e-05,2.8701315412998557e-09
865 +9.4551909405429864e-05,9.2792639583282055e-09
866 +0.00018058633118228214,3.8268410209824944e-08
867 +0.00014252100213898121,2.511678083135466e-08
868 +0.00018847933306863257,4.6127605115425945e-08
869 +0.00018809755328826522,3.5800275503916683e-08
870 +8.9738092746495488e-05,8.7623139128368721e-09
871 +0.00020725414756673753,4.3918184004080014e-08
872 +0.00014330249847822025,2.0917436489908343e-08
873 +7.5469563847714252e-05,5.8527893432181325e-09
874 +4.1300622626414667e-05,2.2241346552074184e-09
875 +6.9335869849809572e-05,6.1600436687193836e-09
876 +5.3660809684360118e-05,2.8836289336732981e-09
877 +6.4949853593359452e-05,4.2508706811692686e-09
878 +0.00010987230489203239,1.6435439169250427e-08
879 +0.0001737572215580409,3.5344857842838037e-08
880 +0.00018816667228862958,3.7424666412971031e-08
881 +0.00017707026936647559,3.3684056818549264e-08
882 +0.00013440872470577172,2.629436221779022e-08
883 +0.00010292182283971691,1.5723106268139313e-08
884 +0.00011634911684620301,1.6642753435321767e-08
885 +0.00010864256699060384,1.7492679778952257e-08
886 +0.00015994720255553096,2.5664257518475822e-08
887 +5.0098478310771314e-05,2.6933116632887423e-09
888 +6.2882712575305062e-05,5.6574898596224651e-09
889 +6.9676122378315355e-05,6.6277140155906833e-09
890 +6.7973974948481506e-05,5.8119941454488514e-09
891 +6.5422297956576673e-05,6.3475354965744523e-09
892 +5.6702266413224516e-05,4.5846972148539813e-09
893 +3.5946521391886132e-05,1.7545840964670144e-09
894 +5.3178308099966998e-05,4.038895495960205e-09
895 +4.0794645747696244e-05,1.9919146025992606e-09
896 +3.5856819547543589e-05,1.3715330768046927e-09
897 +7.2043223989134926e-05,5.7497610103074001e-09
898 +6.2862151704774064e-05,5.1989402654605217e-09
899 +6.1319068974654629e-05,3.9635315481599015e-09
900 +6.6804876305607687e-05,4.6982493203200989e-09
901 +0.00011147867905138353,1.2456273892799956e-08
902 +0.00019403989727163754,5.1666881080245162e-08
903 +7.8618813237992015e-05,8.5627153155504551e-09
904 +0.00013054037527588118,2.4642282448873874e-08
905 +0.00011310094463929329,1.6576470772083267e-08
906 +0.0001414940860541537,2.0699040445590293e-08
907 +0.00012141228039800421,2.053453247615675e-08
908 +0.00017788306943762166,3.8891747023754513e-08
909 +0.00022416057912031219,7.1272342019251472e-08
910 +0.00037447406218428232,2.0814166846434899e-07
911 +0.00040769604484391453,1.6805719094115745e-07
912 +0.00022379382349073683,5.6369691470970117e-08
913 +0.00014411977616598736,2.9212667575237519e-08
914 +6.6779228144107629e-05,4.7532834874951002e-09
915 +6.8408593650866624e-05,4.7593743181601068e-09
916 +7.0085639692742208e-05,5.860077166325439e-09
917 +5.6182604710727488e-05,4.6887516367843108e-09
918 +9.1830744135253288e-05,1.0829165299140302e-08
919 +8.5311082526964399e-05,1.0154175017629443e-08
920 +6.898050542543285e-05,6.2045789823006127e-09
921 +0.00011428976621219035,1.9485678095779299e-08
922 +0.00014580601717361331,2.4183465804555712e-08
923 +0.00013954314820494376,1.9526957846091433e-08
924 +0.00011560195508325569,1.3719150610984509e-08
925 +0.00013247714440026961,1.7555770749147664e-08
926 +6.350700856508938e-05,5.1566195145144867e-09
927 +0.0001030622720420629,1.1510236149572528e-08
928 +0.00017621603890582857,4.2746024947870763e-08
929 +0.00012401606936941916,1.9113388835879914e-08
930 +0.00013379860629319308,2.6539404533778825e-08
931 +0.00013049625977191179,2.5133149328485401e-08
932 +9.9054561276951041e-05,1.1613254570690651e-08
933 +5.9340759790042335e-05,4.8702760510661583e-09
934 +5.4699407241457827e-05,3.8605293907963306e-09
935 +8.1437816196680392e-05,7.4922697897151987e-09
936 +9.9897156209182195e-05,1.4807061524184837e-08
937 +5.9448649540556138e-05,5.1304660814396296e-09
938 +0.00011904723346125827,2.090932508412002e-08
939 +0.00012664789226082769,1.8277586765974991e-08
940 +0.0001155325056470165,1.9822194921640277e-08
941 +0.00013265559604889258,2.5023258463418324e-08
942 +0.00010706385308102803,1.2751577370261368e-08
943 +0.00018578510150316999,4.8380480349985942e-08
944 +0.00012370284094762553,1.6786560276148029e-08
945 +0.00010308319715255286,1.1912925038125454e-08
946 +6.0958614527747064e-05,4.2606370457445646e-09
947 +0.00010006316346503617,1.0860488545261865e-08
948 +6.2022330057852357e-05,4.0767738174579386e-09
949 +7.5669397645725412e-05,8.0485231360965357e-09
950 +8.1332245772324706e-05,7.2078067997646369e-09
951 +5.2714928023244179e-05,3.1138670632464947e-09
952 +5.6238696516047122e-05,4.5979927335716787e-09
953 +6.783182559753338e-05,5.3786398949302339e-09
954 +9.2613329602136101e-05,1.1038772270625786e-08
955 +7.1724904686296817e-05,6.7156955331886014e-09
956 +8.426846924017318e-05,7.2358910934232303e-09
957 +6.3036542685031337e-05,5.1115534428980387e-09
958 +6.1990391919919188e-05,5.0118144991286704e-09
959 +3.163206807655739e-05,1.0681231722800211e-09
960 +4.7520120266802416e-05,2.5260129113414723e-09
961 +8.838977593466721e-05,9.0546514078982766e-09
962 +0.00012990129826418801,1.861326144939554e-08
963 +0.00021129752095539489,6.4646022458344664e-08
964 +8.4099358132748008e-05,1.0096567643820443e-08
965 +0.00010216219454674392,1.3133452365228043e-08
966 +0.0001675140633097825,3.7297933571005301e-08
967 +8.1979579279407071e-05,9.9901150965216864e-09
968 +4.9042378676771427e-05,3.3332128782519233e-09
969 +0.00011414918650631853,1.5817630966962682e-08
970 +0.00013663018486233301,1.9860772553203814e-08
971 +0.00014816654436249362,2.8242697967214286e-08
972 +0.00014935937288961212,2.885422658876883e-08
973 +0.00017025210658584738,3.2180813997753029e-08
974 +0.00019094849125115895,4.4593840208412011e-08
975 +0.00012128694948216941,1.7812042851458398e-08
976 +0.00020871203531288199,5.081737851219171e-08
977 +0.00012518381758953783,1.7123026159277974e-08
978 +0.00012690782556614135,1.7960797218703096e-08
979 +0.00010226766339445924,1.5383703910980347e-08
980 +8.3512516142863891e-05,9.2479514175498714e-09
981 +0.00028475902004809956,1.1498920624037052e-07
982 +0.00051811568936597976,3.7943918419910994e-07
983 +0.00062932956189699603,3.9878514041362057e-07
984 +0.00023428265818120972,7.1284487572938444e-08
985 +0.00026435617661171959,7.4147112208748866e-08
986 +0.00025194688868302492,6.8897709389380241e-08
987 +0.00027186792341996719,8.3979638193806272e-08
988 +0.00037969460149866216,2.0970346474762992e-07
989 +0.00045280031433559418,2.819187216613044e-07
990 +0.00017918139245830231,3.365263649554032e-08
991 +0.00016696724012510051,3.6255444817631592e-08
992 +0.00014282516717198019,2.4862679535948357e-08
993 +0.00011500764926288074,1.8146099646678203e-08
994 +6.4941872469764065e-05,5.1867384791198303e-09
995 +5.2536783158116679e-05,4.0069479161351669e-09
996 +9.400842143251463e-05,1.1217205191577887e-08
997 +5.078364613326376e-05,3.6000435878227675e-09
998 +6.8615861780206962e-05,4.9085333100369562e-09
999 +6.7088529900130779e-05,4.8986606585797381e-09
1000 +5.2434253737132732e-05,3.1008520464430083e-09
1001 +5.1905309145143951e-05,2.832819988023274e-09
1002 +3.4501647188050642e-05,1.592777346158051e-09
1003 +2.8784953630346508e-05,9.6450701786443346e-10
1004 +2.4690244978775021e-05,8.2165582238315928e-10
1005 +2.917040768164806e-05,1.2388913749925172e-09
1006 +4.4740906819261705e-05,2.9756132999010031e-09
1007 +5.0859242204942119e-05,3.4050028890466764e-09
1008 +7.6837012463212018e-05,7.7687067892651751e-09
1009 +0.00010799602566360464,1.4580542213608586e-08
1010 +8.4656534475625295e-05,8.8049086975256389e-09
1011 +0.00014191536253881199,2.5222620543795574e-08
1012 +7.8153298404373445e-05,7.8621859347691814e-09
1013 +7.9467621615710596e-05,6.579305272699331e-09
1014 +9.3918232237945093e-05,1.2049930003791774e-08
1015 +5.0416256535254709e-05,2.6362648984280633e-09
1016 +5.1760146785652988e-05,2.9335984487273419e-09
1017 +8.2279776472837324e-05,9.8920998485336004e-09
1018 +9.2193423766364694e-05,1.0146235390480456e-08
1019 +0.00021464509456978802,6.2586186487239121e-08
1020 +0.00023802575770767717,7.1798793556948207e-08
1021 +0.0002341292206515004,6.6403213617863585e-08
1022 +0.00048750738459877078,2.4001544154686849e-07
1023 +0.00019618426237651395,4.4434448923735556e-08
1024 +0.00028798370485833593,9.7807819753245333e-08
1025 +0.00042268409496652699,1.9289998374992494e-07
1026 +0.00023452279931721051,6.8169414818353457e-08
1027 +8.8516692460884657e-05,1.0925770874261479e-08
1028 +0.00012987132479302764,1.7607723520215216e-08
1029 +0.00014317032063813835,2.4464695659707362e-08
1030 +0.00014475879195913674,2.7695950483542879e-08
1031 +0.00014435296720933047,2.3659501644967588e-08
1032 +0.00016046185972952139,3.335235049947715e-08
1033 +0.00018437889745463948,4.4770251602898405e-08
1034 +0.00018046115692569342,4.0896506073729421e-08
1035 +0.00011595839813744405,1.5367806263503228e-08
1036 +9.4343103239260661e-05,1.062020320444891e-08
1037 +6.9444562384060919e-05,6.7909048620271719e-09
1038 +8.1229524033535618e-05,9.1657864167408077e-09
1039 +8.233621242025465e-05,7.7750029716448701e-09
1040 +0.00015041383937956391,2.7412275264004558e-08
1041 +0.0003195388193698206,1.2936823854516005e-07
1042 +0.00018725421308006236,5.1503004451622062e-08
1043 +0.00018998446923616943,3.7447741758045412e-08
1044 +8.3680340235185442e-05,9.7823808110383978e-09
1045 +4.1719037482477982e-05,2.1540057900370591e-09
1046 +7.6260988282284464e-05,8.3218341130215683e-09
1047 +9.1959898806728024e-05,9.0731523210954666e-09
1048 +0.00012809389221298144,1.7967955048211754e-08
1049 +0.00022844605547862355,7.1102013206298068e-08
1050 +0.00022605588077856186,7.4035380017287747e-08
1051 +0.00014619412794233469,2.1764732553340559e-08
1052 +5.7643448723010365e-05,3.8587594039059124e-09
1053 +2.8536083891169452e-05,9.7495700353796934e-10
1054 +5.5979047980746553e-05,3.3364333515240551e-09
1055 +4.9665742371831739e-05,3.4343257228636029e-09
1056 +4.1416974994554905e-05,2.038667297503592e-09
1057 +8.290096043292443e-05,7.0321335715967297e-09
1058 +7.7119129188154808e-05,8.455083832510609e-09
1059 +0.00011644084874194617,1.4670073148546089e-08
1060 +8.0391689890058868e-05,7.2336003764937584e-09
1061 +8.9717642905800328e-05,8.9235137532728334e-09
1062 +0.00013545398272323133,2.4171544648303377e-08
1063 +0.0001215737412124086,1.7619158222664978e-08
1064 +8.1072257766632284e-05,8.1005004161456693e-09
1065 +4.3734982856393337e-05,2.5565683358821581e-09
1066 +6.0792746472968192e-05,4.0431553645590861e-09
1067 +3.6684318938912698e-05,1.404102565070011e-09
1068 +1.6670899310058047e-05,3.6682632943806152e-10
1069 +1.4191213701674122e-05,2.1016031593300626e-10
1070 +3.460588892248732e-05,1.754980662608959e-09
1071 +5.0761105172019535e-05,3.6115495408944172e-09
1072 +6.6769450840061448e-05,4.8584184163906895e-09
1073 +8.4074817646507624e-05,9.735546855588178e-09
1074 +7.1901126655225982e-05,6.544551021276566e-09
1075 +7.6753610600952804e-05,8.7790185010278163e-09
1076 +9.2478862322590359e-05,1.0185192771786027e-08
1077 +0.00014940095605881935,2.6193792572874679e-08
1078 +9.0063991243898467e-05,1.1827455992377898e-08
1079 +6.2044549352309361e-05,5.4732619881513288e-09
1080 +8.2250424007490611e-05,7.0561759263363515e-09
1081 +6.2883635325046384e-05,5.6725002296790734e-09
1082 +0.00011799379685289703,2.0414839285847874e-08
1083 +5.4942743382434857e-05,3.5629045372988327e-09
1084 +0.00012539102740780764,1.6368766630086075e-08
1085 +8.001095716868287e-05,6.5609373373066272e-09
1086 +7.6134716229943924e-05,7.5450957912144533e-09
1087 +0.0001755136889302001,4.3177655417262271e-08
1088 +7.6312464317670206e-05,6.567499536713297e-09
1089 +7.6256494912413429e-05,7.3238730204915079e-09
1090 +6.8442521611726e-05,5.0222863979175403e-09
1091 +5.2855595105258489e-05,3.2392585747785441e-09
1092 +6.7570162674948224e-05,5.0511529378793605e-09
1093 +5.5810499376043951e-05,4.2812309393081467e-09
1094 +4.793886290250493e-05,3.3607649203025648e-09
1095 +5.6985627088901569e-05,3.5607543686282938e-09
1096 +5.4834439896813133e-05,4.4487182550889038e-09
1097 +0.00013333587352232565,2.6484594891009033e-08
1098 +0.00018742492565826925,4.4487418977639929e-08
1099 +0.00016386181909310222,3.6007431273441857e-08
1100 +6.0884039046307713e-05,5.4530764753634186e-09
1101 +4.9001497586182795e-05,3.3234783699735668e-09
1102 +5.0841487684100951e-05,3.750796361905376e-09
1103 +0.00016281701781670156,3.6762904926493577e-08
1104 +0.0001186425370253467,1.6751846146744885e-08
1105 +0.00016725707053599347,4.1164693185221922e-08
1106 +5.7779844692681243e-05,3.5689435165828353e-09
1107 +5.4896840530851447e-05,4.2189783462997086e-09
1108 +5.476417437607313e-05,4.0881960328732175e-09
1109 +3.6880813044078087e-05,1.6607294749348357e-09
1110 +2.8187372454415853e-05,9.3258945541781031e-10
1111 +4.888561108916203e-05,3.4693194584919884e-09
1112 +7.3996024320772678e-05,6.4542801939177486e-09
1113 +8.4816577279536127e-05,1.0477722204942186e-08
1114 +9.5084806004865877e-05,1.2025876962529244e-08
1115 +6.5506155409477516e-05,4.3515907064590573e-09
1116 +0.00016281190951739178,3.8658423082379156e-08
1117 +0.00018801863482480958,4.2908752537610889e-08
1118 +0.00013584822729420098,2.6197188690216526e-08
1119 +8.5228739748982317e-05,7.2923375909462536e-09
1120 +0.0001085170632393473,1.7152739003805373e-08
1121 +6.9354298243217517e-05,6.7296517526391358e-09
1122 +5.3939294106634656e-05,3.7256645073233074e-09
1123 +7.4561359613048032e-05,7.3440343309584839e-09
1124 +4.0533583505962874e-05,2.4215083869629281e-09
1125 +8.0075940777514669e-05,9.2248134875309669e-09
1126 +0.00014716339657063176,3.0619154094947325e-08
1127 +8.7954124960298313e-05,1.0258368332532466e-08
1128 +5.3250952236036164e-05,4.230821902424733e-09
1129 +4.5270045078190006e-05,2.1016119445532423e-09
1130 +5.5649263223716514e-05,3.1514328758140163e-09
1131 +5.8170225563771756e-05,3.5085016419854162e-09
1132 +8.1696198083366033e-05,9.8679015653968408e-09
1133 +9.2307997363909338e-05,1.0933480488068846e-08
1134 +0.00010796290402952993,1.2996273059086335e-08
1135 +0.00012530814992696342,1.8123219893044157e-08
1136 +0.00010724723058491519,1.439293225341452e-08
1137 +0.00014099365509045967,2.6466882498440065e-08
1138 +0.0001115079544378461,1.5148642502134509e-08
1139 +0.00011404710041418471,1.8443017219997373e-08
1140 +9.109772525104856e-05,9.2907567890026161e-09
1141 +0.00010059944138294978,1.4878928832178061e-08
1142 +4.3694336907709662e-05,2.7658623838947705e-09
1143 +4.9097068639443821e-05,3.3345499083481687e-09
1144 +3.5261292341980878e-05,1.7022391044785763e-09
1145 +6.4372363117365115e-05,6.03457187383837e-09
1146 +5.3582060951447959e-05,2.8751840160041731e-09
1147 +5.1231361937140623e-05,2.986534432877412e-09
1148 +3.0942015751020886e-05,1.248075978819715e-09
1149 +4.7718911190992972e-05,3.1679405303801786e-09
1150 +0.00010356344525859076,1.4055830291888439e-08
1151 +6.7565709491419616e-05,5.5780290290149677e-09
1152 +6.2905646923108082e-05,5.6314847857755358e-09
1153 +0.00010070594639619575,1.2900012273914617e-08
1154 +0.00010363309213570858,1.5743712819574458e-08
1155 +8.1119275767619874e-05,6.948757980236242e-09
1156 +0.00015932574697764617,2.712210827169513e-08
1157 +9.3675475709850797e-05,1.1351280303769854e-08
1158 +6.3702083414022076e-05,6.0209487701366855e-09
1159 +5.8127214258053595e-05,4.2113619191191458e-09
1160 +8.8491484285845452e-05,9.8200921089148853e-09
1161 +9.4065114274214889e-05,1.2561971146037123e-08
1162 +8.1427392060114427e-05,9.8282333826983035e-09
1163 +8.250536036943988e-05,7.6977403785807458e-09
1164 +3.3381719581933425e-05,1.5316716954326944e-09
1165 +6.9955931545242925e-05,5.8936575575223629e-09
1166 +9.4905836841759951e-05,1.1423568920035787e-08
1167 +0.0001436733799820171,2.1015793729533091e-08
1168 +5.1333112843422375e-05,3.8056171257621976e-09
1169 +5.2350028270462155e-05,3.7242405546412787e-09
1170 +9.2831429339106225e-05,9.1176386997445831e-09
1171 +0.00017482315304049708,3.439061790985846e-08
1172 +0.00029410737077394713,1.2490931273768223e-07
1173 +0.00024477612324624523,8.0525430466252528e-08
1174 +0.00016153667030001883,3.8125788264607089e-08
1175 +7.8011420706902362e-05,6.6127522503603851e-09
1176 +4.2913339801374715e-05,2.7179343585064596e-09
1177 +0.00010026331943581138,1.0931422705638407e-08
1178 +6.1416767464981414e-05,5.2484214495106338e-09
1179 +8.3491346248239055e-05,7.6086887886513175e-09
1180 +0.00015708141213310539,3.4118707900346417e-08
1181 +0.00019149425026252694,5.3480554381972728e-08
1182 +0.0001493406234728363,2.5532322168012036e-08
1183 +6.6548792056669317e-05,5.3396752730703312e-09
1184 +5.0005906710987148e-05,3.2895414628608779e-09
1185 +9.3870297838422593e-05,1.1738707368313538e-08
1186 +4.2166811858311104e-05,1.9092508248427385e-09
1187 +7.1200887154256642e-05,5.2291868418073849e-09
1188 +0.00023220089714553175,7.5423940735153403e-08
1189 +0.00015683544477975,3.3031034480173406e-08
1190 +0.00025506819785717379,9.5609563799069439e-08
1191 +0.00023679796175881193,5.963291349558077e-08
1192 +0.00013930767072675075,2.9063896919736285e-08
1193 +0.00015449081618204441,3.0203443445120765e-08
1194 +8.5069294249270696e-05,9.7100702649454917e-09
1195 +0.00013261306722713818,2.2980319769678282e-08
1196 +0.00010987790123207113,1.3845400956642658e-08
1197 +0.00013813398467454245,2.6590257234111083e-08
1198 +5.9568380604910398e-05,5.0829977924173462e-09
1199 +7.7657874127328008e-05,6.8596059114071317e-09
1200 +7.8526166106940756e-05,8.1181837263511463e-09
1201 +0.00012492445425400209,1.7819688024243221e-08
1202 +0.00012891487480186202,1.77459568153768e-08
1203 +0.00018161714884461398,4.4755749347459496e-08
1204 +0.00012134247540943834,1.8279751350226821e-08
1205 +0.00016116715152966806,3.2161140323645999e-08
1206 +0.00012420221317212637,1.8166094295892351e-08
1207 +0.00023506284304378728,7.8501041160462463e-08
1208 +0.00011075384324553185,1.6387034607359063e-08
1209 +7.7615144388815149e-05,8.8212735573009016e-09
1210 +7.8174244625415669e-05,6.9032114147956872e-09
1211 +9.173629480273095e-05,1.0667123237173323e-08
1212 +0.00015863403910199549,3.7195745118938916e-08
1213 +0.00015073877980563893,3.188046029504553e-08
1214 +8.6436775894088247e-05,9.7160225780728876e-09
1215 +6.4838559560970806e-05,5.0934761531259702e-09
1216 +4.7271626598458763e-05,2.9636982612213203e-09
1217 +9.9452355450648213e-05,1.1884796761643958e-08
1218 +8.9574957865188663e-05,1.0901643255366192e-08
1219 +9.802459678686596e-05,1.2011348551226583e-08
1220 +0.00011001887963996096,1.3729987143112402e-08
1221 +0.00010916283151053722,1.2273705526165902e-08
1222 +8.7118750435100645e-05,1.0952757731646745e-08
1223 +0.00011320790078312923,1.3244455849631464e-08
1224 +8.8754473413719059e-05,8.7183347821969952e-09
1225 +8.3290089238412975e-05,9.8094307700991384e-09
1226 +0.0002425200510635009,8.0728872742848298e-08
1227 +0.00013841308274172893,2.0817257258488895e-08
1228 +0.00015601501073938233,2.6137188130955514e-08
1229 +8.1899699553494935e-05,8.1776628957454054e-09
1230 +0.00013963806381775071,2.3909913663339244e-08
1231 +0.00018101715238261337,4.1519116097734758e-08
1232 +0.00013410402011517351,2.2466833363865232e-08
1233 +8.0367515028267956e-05,8.3247845881113922e-09
1234 +5.3161134641157633e-05,2.9531864476404345e-09
1235 +8.2998842275731712e-05,7.116455881647771e-09
1236 +7.8931567853987201e-05,7.5162201301761922e-09
1237 +0.00010944876287396953,1.4761081269791578e-08
1238 +0.00017569254544703744,3.2179840561627978e-08
1239 +0.00012677379092607651,1.8140811635722463e-08
1240 +7.727168816594781e-05,6.6208261287555528e-09
1241 +3.3544797520242564e-05,1.5340005063545105e-09
1242 +5.4480658532918775e-05,3.346811659698878e-09
1243 +0.00010144836810890697,1.5079386502713074e-08
1244 +0.00015128796988865973,3.0350657688067248e-08
1245 +0.00015153559084735558,2.7184276638895885e-08
1246 +0.00012786040720039622,2.0179594863083284e-08
1247 +0.00015079399386842566,3.0803588831930618e-08
1248 +0.00013169011819954372,1.8489701042175117e-08
1249 +0.00011459692322974282,1.4741992324867638e-08
1250 +0.00021382216306970454,4.7326370079542563e-08
1251 +9.2923048128781428e-05,1.1067224712981618e-08
1252 +0.00018852195024928026,5.1403813860164094e-08
1253 +0.00021171565455027457,6.0964223654988215e-08
1254 +0.00031778819430934981,1.4794488587148221e-07
1255 +0.00010073715268100199,1.0530817747444775e-08
1256 +6.3210417484099767e-05,5.3725396902223596e-09
1257 +9.9476750520922273e-05,1.3196258338866061e-08
1258 +5.615058794397547e-05,3.6393004470514425e-09
1259 +6.8629870157621681e-05,6.4486267999012608e-09
1260 +6.1997397127264554e-05,4.9400480973381141e-09
1261 +4.8745236652864285e-05,3.1658089406214927e-09
1262 +5.9229578858136878e-05,4.3929727852003339e-09
1263 +0.00013285837483783386,2.2366442022066127e-08
1264 +9.5066882257667138e-05,1.0358716682697154e-08
1265 +9.9268102540611756e-05,1.0952308910418747e-08
1266 +0.00016117210785560437,3.0445818673090809e-08
1267 +8.9375173721693352e-05,9.4134541481123239e-09
1268 +9.6698524803358595e-05,1.2333702376697377e-08
1269 +7.0854674313928056e-05,7.1431606393512686e-09
1270 +8.9398395648191184e-05,1.0779238396812908e-08
1271 +5.5194159037133818e-05,3.67321295739665e-09
1272 +4.6264660633261132e-05,2.4145568371843648e-09
1273 +8.6041004672135303e-05,9.7350084946513528e-09
1274 +5.8945184249713325e-05,4.02673889228224e-09
1275 +6.4008177820785428e-05,6.0916172390444325e-09
1276 +5.6009604551794657e-05,3.2850615164340041e-09
1277 +7.4107079636469416e-05,7.1424625787804811e-09
1278 +6.0243547735936853e-05,4.0830786034810667e-09
1279 +8.5671009316193772e-05,8.2427796293382193e-09
1280 +8.1826285008818641e-05,9.1831571995668228e-09
1281 +0.00010650442475286441,1.4842280685378102e-08
1282 +0.00010327469973126029,1.1696795235790611e-08
1283 +6.8710547174517187e-05,4.8358820978390385e-09
1284 +0.00018380009348203352,3.9279433225503245e-08
1285 +0.00019084656943143947,4.1938297479437754e-08
1286 +0.00023736191155719009,6.3436755969960191e-08
1287 +0.00021803610327692912,6.4898081512551157e-08
1288 +0.00054225844653855093,2.9842839137790761e-07
1289 +0.00052323297126153224,3.6643698141314964e-07
1290 +0.00085872076932238021,9.7707553723651682e-07
1291 +0.00058155535276262183,3.8500893777309818e-07
1292 +0.00039130431259762073,2.157293058571465e-07
1293 +0.00023572478396587392,7.8254693037584221e-08
1294 +0.0002296625258319085,6.025946642637658e-08
1295 +0.00010490222757715071,1.6093894735187475e-08
1296 +0.00015725402248090875,3.5659385848300488e-08
1297 +0.00011345899042451626,1.3839208854269387e-08
1298 +0.00010481268239361618,1.3614115374112229e-08
1299 +0.00022505051533244975,6.042452589337818e-08
1300 +0.00041399872775971447,2.5220262668429875e-07
1301 +0.00030571153189081222,1.1650890994273948e-07
1302 +0.00054888308375094022,4.0805186031410129e-07
1303 +0.00037666266413055127,1.7608245727435878e-07
1304 +0.00035714541329651941,1.6710853271763539e-07
1305 +0.00022736404395554819,7.147744717903642e-08
1306 +0.00015510785202359941,3.6032115648004016e-08
1307 +8.7669373525746985e-05,9.2271210442943582e-09
1308 +4.529630611922183e-05,2.3114682229340171e-09
1309 +6.2030873571325927e-05,4.2246146330873372e-09
1310 +8.2718817606614237e-05,8.2166181058315347e-09
1311 +9.8263076431361122e-05,1.2154370049342175e-08
1312 +8.3706940054991682e-05,7.5064103691802906e-09
1313 +9.2084634840128066e-05,1.0084625031194639e-08
1314 +6.676622079783995e-05,4.8879866576102059e-09
1315 +5.0643350978581718e-05,2.5842861819301101e-09
1316 +6.8612122245646629e-05,5.083046988129289e-09
1317 +7.1175602695927855e-05,6.0198136497454844e-09
1318 +4.1450879031098804e-05,2.0871272511284269e-09
1319 +5.2010429935527953e-05,3.4506690983216201e-09
1320 +3.8581282565558776e-05,1.6499783749304025e-09
1321 +3.8111306893396168e-05,1.8690877936714772e-09
1322 +5.9862680784486222e-05,4.590484384551243e-09
1323 +6.3594202212083871e-05,4.5134208213585013e-09
1324 +5.9641102544162886e-05,5.0039674604065468e-09
1325 +9.0897785833957525e-05,1.2045367010738693e-08
1326 +7.202418926690529e-05,7.3761978249399715e-09
1327 +6.4700254146000144e-05,4.8425165503022151e-09
1328 +0.00013042932931146657,1.9824084980760772e-08
1329 +6.3055078370424596e-05,5.53770051958064e-09
1330 +5.9620529723958886e-05,3.9207870455451824e-09
1331 +6.9688242096903981e-05,5.6099970662564608e-09
1332 +3.7000643087915234e-05,1.8798699010282972e-09
1333 +3.4458647680110276e-05,1.7593892621583465e-09
1334 +5.8088190402842862e-05,4.2159798459729007e-09
1335 +0.00011372648257504446,1.5339464576935708e-08
1336 +0.0001086799057440633,1.6599360919040202e-08
1337 +5.6491385153827036e-05,4.5028765327581077e-09
1338 +0.00012726515341765358,1.8687429111356363e-08
1339 +0.00012122189547090428,1.7061175887449408e-08
1340 +0.0001224254692220725,1.8301431783704864e-08
1341 +0.00013898904500293075,2.5953364182408106e-08
1342 +0.00019293271084349053,3.9612161781296963e-08
1343 +0.00019435939329486663,4.6395860528775037e-08
1344 +0.0001139171003996761,1.4199783962039034e-08
1345 +0.00012376795674587252,2.0178546584440136e-08
1346 +0.00018233730750388428,3.6839945697208393e-08
1347 +0.00012035182984736028,1.6807560501019601e-08
1348 +6.5655042617955694e-05,5.2770398431584803e-09
1349 +7.5353743275460272e-05,7.4574242705145976e-09
1350 +5.9418948417997992e-05,3.5457424432511183e-09
1351 +3.9091830919752751e-05,2.200500295310085e-09
1352 +6.7650755860259099e-05,6.3868631730997413e-09
1353 +7.8867834950981783e-05,6.638734523673228e-09
1354 +7.4567924980692551e-05,7.318355353202451e-09
1355 +7.2141330520537235e-05,7.0694348690992041e-09
1356 +0.00010682595835670832,1.6784972908619464e-08
1357 +8.2816668219535587e-05,9.2308081443956687e-09
1358 +0.00013812446586087838,2.250617456686499e-08
1359 +0.00010524570266753122,1.6398568681738602e-08
1360 +0.00015634652854502098,2.7842956540773815e-08
1361 +0.00011639119920432241,1.7073643633593135e-08
1362 +7.9464809411301327e-05,8.9718366881271045e-09
1363 +0.00025774711825510179,8.3741813790945688e-08
1364 +0.00018171568674980976,4.3779953027516739e-08
1365 +0.00011307390853352972,1.646031796892681e-08
1366 +0.00010602813631022852,1.6085693932210823e-08
1367 +0.00025752147893026765,6.8608435489821251e-08
1368 +0.00010431585086858201,1.4349888243996349e-08
1369 +8.7295103161945739e-05,7.8797065014086745e-09
1370 +8.1243921786822227e-05,8.1857486908385121e-09
1371 +9.5164726787144233e-05,1.0949791909364347e-08
1372 +8.8151181758811374e-05,1.0222856803588085e-08
1373 +9.269242127767587e-05,1.2686472372183228e-08
1374 +0.00019307022325985249,5.0879032334175977e-08
1375 +9.1102919043239443e-05,1.2315854460951411e-08
1376 +0.00014054418990395545,2.6452859344155942e-08
1377 +7.0387357828642953e-05,6.7122550789654656e-09
1378 +8.598482348359236e-05,9.4317256243063746e-09
1379 +5.8639878647205922e-05,4.3449872695588612e-09
1380 +9.1560499934833817e-05,1.0091201059683156e-08
1381 +0.00016625591074385501,4.0269209483987213e-08
1382 +0.00014421135831904964,2.4326816495801363e-08
1383 +0.00022671792829037177,7.2706248050156277e-08
1384 +0.00013598114459467117,2.4570702042526983e-08
1385 +0.00019311309108000695,3.9326098185329686e-08
1386 +0.00014071507412232224,2.6523894334402581e-08
1387 +0.00022900430971035639,5.8853233222180735e-08
1388 +0.00029723044044014057,9.984033454361568e-08
1389 +0.00025321232164085192,7.1114905545893727e-08
1390 +0.00036599170235508644,1.3996084324758252e-07
1391 +0.00035967593769390234,1.8733226359726011e-07
1392 +0.00030369246735926868,9.7168428524546147e-08
1393 +0.00018849759338920207,5.1483929817599929e-08
1394 +0.0001142338446835761,1.3831700080312587e-08
1395 +0.00013161053357623503,1.7960035917188042e-08
1396 +0.00012924094633904657,1.8306712839025876e-08
1397 +0.00024137982092080988,8.0966838080683443e-08
1398 +0.00017578520901613995,4.1314045879853442e-08
1399 +0.00033052803960336081,1.1914450493748651e-07
1400 +0.00045892684410426242,3.026844849377476e-07
1401 +0.00026039163149486791,9.3715636044971567e-08
1402 +0.00029457400800770992,9.3234182490839061e-08
1403 +0.00025601807234835631,6.6704148685898502e-08
1404 +0.00013417661177785286,2.3320713210878301e-08
1405 +8.5448775815804692e-05,9.2553033093185022e-09
1406 +0.00012447216077376302,1.8647941164430959e-08
1407 +8.0207426306181233e-05,8.739629786131285e-09
1408 +7.4255036149863132e-05,8.0397894101370043e-09
1409 +6.798245947406886e-05,4.7625047399882148e-09
1410 +0.00015934624146866975,3.2351925793369178e-08
1411 +0.00020285872832687045,6.1089614192562832e-08
1412 +7.3509482312681049e-05,6.3368376682134321e-09
1413 +6.0690847635198905e-05,5.1971477150168751e-09
1414 +6.732723878915406e-05,5.374909419284875e-09
1415 +9.1072340519346632e-05,1.0490168370979244e-08
1416 +7.0722640775916788e-05,7.1997388222966834e-09
1417 +0.00012406260387621561,1.604214262810344e-08
1418 +0.00013471762092073049,2.5377992374124058e-08
1419 +0.0001193277520963612,1.9214055723761113e-08
1420 +8.349983510239275e-05,8.5702011124926288e-09
1421 +0.00012666020813009019,2.3268806835644496e-08
1422 +0.00049981701418137347,3.4449349277651353e-07
1423 +0.00041683032441624954,2.1721790052777775e-07
1424 +0.00029493767176888937,1.1569563498499674e-07
1425 +0.00018695621061292635,3.9378854140290624e-08
1426 +0.00013466940938003949,2.4737245657471166e-08
1427 +0.00019406350312489026,5.3810908588342615e-08
1428 +0.0002227881955355263,6.5330772964522371e-08
1429 +0.00034920073291562758,1.3682403145126921e-07
1430 +0.00028587864693391848,8.997771483284829e-08
1431 +0.00012027250457292278,1.9548177762568123e-08
1432 +8.1558776696331322e-05,7.5137250783207446e-09
1433 +0.00011221459975182487,1.719719440032058e-08
1434 +4.7175517647160713e-05,2.5873479313672272e-09
1435 +3.7066283057178974e-05,1.5978000946379365e-09
1436 +7.9582993690567626e-05,6.9736273115971421e-09
1437 +8.6598054628086288e-05,1.0414971774552664e-08
1438 +9.0384127953739923e-05,9.4223510723874102e-09
1439 +4.6392762879493815e-05,2.7488284462708703e-09
1440 +6.8229746703054965e-05,5.8816390633335609e-09
1441 +6.1358581780857218e-05,5.0441552434044773e-09
1442 +8.9934248455027775e-05,1.1200507277254339e-08
1443 +8.6778208997211967e-05,7.9338505289444315e-09
1444 +6.8632373343398002e-05,5.1181927489052622e-09
1445 +4.190023888589368e-05,2.287228664583311e-09
1446 +4.6436437040288671e-05,2.6492177321182641e-09
1447 +3.6286785142252975e-05,1.6652913548665417e-09
1448 +5.7089624709379402e-05,3.3137681711691165e-09
1449 +5.1823796821938958e-05,3.4493959154161126e-09
1450 +4.2376815462558687e-05,1.9931260451629225e-09
1451 +0.00010927043982035592,1.1970904395071717e-08
1452 +0.0001079826888565442,1.2870645820024515e-08
1453 +7.3189984665199929e-05,7.5318225669621389e-09
1454 +7.9302461878534369e-05,7.5490997013151649e-09
1455 +4.7997866383181615e-05,3.2183086885081781e-09
1456 +7.4394530254516774e-05,6.9649805364147167e-09
1457 +2.645487597018105e-05,9.5194830439494861e-10
1458 +3.1377708292414738e-05,1.1153038353754731e-09
1459 +5.4924320608220234e-05,3.0568936290043744e-09
1460 +6.858033158440785e-05,5.6428900658365252e-09
1461 +8.5735271027035767e-05,7.8951583268465187e-09
1462 +0.00013737641908517193,2.7048845181227212e-08
1463 +0.0001016128424417786,1.2903462572609689e-08
1464 +0.00010622632228941985,1.2263337298653804e-08
1465 +0.00013890817570129876,2.4131913187359763e-08
1466 +0.00011283705735696581,1.4806319216988597e-08
1467 +0.00011014672766599298,1.5045745350669767e-08
1468 +8.8182644393530361e-05,1.072063372572039e-08
1469 +6.6329300357642425e-05,6.0315875771232968e-09
1470 +2.4689140265537751e-05,8.2611582788285839e-10
1471 +2.9209330197642074e-05,1.1718286663646253e-09
1472 +7.3757272527387517e-05,5.572534003632792e-09
1473 +7.2644595062198536e-05,5.9748193740331306e-09
1474 +0.00014736982493286855,3.2024295149981266e-08
1475 +0.00010660503578609766,1.3328646626989131e-08
1476 +0.00020415722327670843,4.9158148115929551e-08
1477 +0.00039088033350283166,1.890651736311721e-07
1478 +0.00018452947511755205,4.862093989109296e-08
1479 +0.00013848923034718877,2.2259823128845419e-08
1480 +0.00015433609562780305,2.84221177955221e-08
1481 +0.00014855964310025457,2.9128773298618666e-08
1482 +7.6354919767940611e-05,8.6121416198320755e-09
1483 +8.2601515845671914e-05,7.8771104050188014e-09
1484 +8.88102610629642e-05,1.1413510889522224e-08
1485 +9.8593000130324878e-05,1.4427195488050609e-08
1486 +8.2197925950974504e-05,9.9207012954173986e-09
1487 +0.00021241562942966275,5.6205431235284499e-08
1488 +0.00018316456298726456,4.8674120949846648e-08
1489 +0.00015432888051589659,3.2374952895067413e-08
1490 +0.00010685583721826502,1.342348665143037e-08
1491 +7.0012769853178676e-05,5.8381325205306376e-09
1492 +5.0680876730894734e-05,3.708943718621979e-09
1493 +3.4939138875537628e-05,1.3211351407303876e-09
1494 +3.7864575357529329e-05,2.0631296579016771e-09
1495 +6.3466881456829136e-05,4.115010716589453e-09
1496 +0.00014054033492135823,2.3387015051987227e-08
1497 +0.00017266734567897819,4.3011779643269319e-08
1498 +0.00032758973412527753,1.4666989854605829e-07
1499 +0.00025451986311191894,9.3283290923344179e-08
1500 +0.00021593241346005816,6.6276337249713792e-08
1501 +0.0001920853702757736,5.2993615394194996e-08
added datasets/fixtures/reference_r.json +275 −0
@@ -0,0 +1,275 @@
1 +{
2 + "versions": {
3 + "R": "R version 4.6.1 (2026-06-24)",
4 + "highfrequency": "1.0.3",
5 + "rugarch": "1.5.6"
6 + },
7 + "realized": [
8 + {
9 + "symbol": "SYN1",
10 + "session": "2024-11-25",
11 + "n_returns": 376,
12 + "rv": 0.00024637973969908694,
13 + "bpv": 0.00025302528836869474,
14 + "rsv": [
15 + 0.00011826488596639238,
16 + 0.00012811485373269454
17 + ],
18 + "rq": 6.1955475593533076e-08,
19 + "bns_jump_stat": -0.63686746412020079
20 + },
21 + {
22 + "symbol": "SYN1",
23 + "session": "2024-11-26",
24 + "n_returns": 380,
25 + "rv": 0.00025120155461075104,
26 + "bpv": 0.00025054486669860156,
27 + "rsv": [
28 + 0.00014267619680554289,
29 + 0.00010852535780520789
30 + ],
31 + "rq": 6.7253679376590466e-08,
32 + "bns_jump_stat": 0.068970742524895531
33 + },
34 + {
35 + "symbol": "SYN1",
36 + "session": "2024-11-27",
37 + "n_returns": 378,
38 + "rv": 0.0002390168957960943,
39 + "bpv": 0.00022840680183704593,
40 + "rsv": [
41 + 0.00013122649739655021,
42 + 0.00010779039839954402
43 + ],
44 + "rq": 5.6950640282455897e-08,
45 + "bns_jump_stat": 1.1638378388270785
46 + },
47 + {
48 + "symbol": "SYN1",
49 + "session": "2024-11-29",
50 + "n_returns": 202,
51 + "rv": 0.00012568246852596236,
52 + "bpv": 0.00012277463617564428,
53 + "rsv": [
54 + 6.122043330139223e-05,
55 + 6.446203522457004e-05
56 + ],
57 + "rq": 1.5743895380525133e-08,
58 + "bns_jump_stat": 0.41268306704483854
59 + },
60 + {
61 + "symbol": "SYN1",
62 + "session": "2024-12-02",
63 + "n_returns": 374,
64 + "rv": 0.00025663107389074444,
65 + "bpv": 0.00026185091449691135,
66 + "rsv": [
67 + 0.00013313693173621296,
68 + 0.00012349414215453134
69 + ],
70 + "rq": 5.8890476779010351e-08,
71 + "bns_jump_stat": -0.52149588902390398
72 + },
73 + {
74 + "symbol": "SYN2",
75 + "session": "2024-11-25",
76 + "n_returns": 379,
77 + "rv": 0.00082192359382040508,
78 + "bpv": 0.00077128792714542993,
79 + "rsv": [
80 + 0.00044988199402507862,
81 + 0.0003720415997953264
82 + ],
83 + "rq": 7.2168645678471738e-07,
84 + "bns_jump_stat": 1.610563286868119
85 + },
86 + {
87 + "symbol": "SYN2",
88 + "session": "2024-11-26",
89 + "n_returns": 372,
90 + "rv": 0.00083538319359307796,
91 + "bpv": 0.00079559175532029731,
92 + "rsv": [
93 + 0.00045959249810148073,
94 + 0.00037579069549159729
95 + ],
96 + "rq": 7.9965430681871144e-07,
97 + "bns_jump_stat": 1.2542860210850504
98 + },
99 + {
100 + "symbol": "SYN2",
101 + "session": "2024-11-27",
102 + "n_returns": 379,
103 + "rv": 0.00094331162341424076,
104 + "bpv": 0.00091513546495405808,
105 + "rsv": [
106 + 0.00048049767491522617,
107 + 0.00046281394849901556
108 + ],
109 + "rq": 8.6472512831618337e-07,
110 + "bns_jump_stat": 0.84552683387723016
111 + },
112 + {
113 + "symbol": "SYN2",
114 + "session": "2024-11-29",
115 + "n_returns": 204,
116 + "rv": 0.00041835614920297191,
117 + "bpv": 0.00041596105295539106,
118 + "rsv": [
119 + 0.00019707105657041914,
120 + 0.00022128509263255283
121 + ],
122 + "rq": 1.7220072106991806e-07,
123 + "bns_jump_stat": 0.10257694520744498
124 + },
125 + {
126 + "symbol": "SYN2",
127 + "session": "2024-12-02",
128 + "n_returns": 376,
129 + "rv": 0.00081343264911332375,
130 + "bpv": 0.00074702008065915127,
131 + "rsv": [
132 + 0.00040838597594895434,
133 + 0.00040504667316436957
134 + ],
135 + "rq": 6.1891158459595883e-07,
136 + "bns_jump_stat": 2.3533450016448088
137 + }
138 + ],
139 + "har_h1": {
140 + "coef": [
141 + 3.5722370546217632e-05,
142 + 0.70518726337650595,
143 + -0.0026533461235811935,
144 + -0.0053820721046231841
145 + ],
146 + "names": ["(Intercept)", "RV1", "RV5", "RV22"],
147 + "n": 1478,
148 + "ssr": 4.9066292970164608e-06
149 + },
150 + "har_h5": {
151 + "coef": [
152 + 7.303627566100136e-05,
153 + 0.4023751739951188,
154 + -0.012151755617208278,
155 + -0.010149362030271216
156 + ],
157 + "n": 1474,
158 + "ssr": 4.5531062852922072e-06
159 + },
160 + "harq_h1": {
161 + "coef": [
162 + 3.0480165047628301e-05,
163 + 0.75934012713345289,
164 + -0.0096384376195148974,
165 + -0.002776592386853348,
166 + -153.55046863809272
167 + ],
168 + "names": ["(Intercept)", "RV1", "RV5", "RV22", "RQ1"],
169 + "n": 1478,
170 + "ssr": 4.8947444550853927e-06
171 + },
172 + "garch": {
173 + "sGARCH.norm": {
174 + "coef": {
175 + "mu": -0.01822814352585278,
176 + "omega": 0.046968370528598521,
177 + "alpha1": 0.045332156957475216,
178 + "beta1": 0.89386846098192896
179 + },
180 + "se": {
181 + "mu": 0.015720112893335601,
182 + "omega": 0.020057089545485348,
183 + "alpha1": 0.012340636889580047,
184 + "beta1": 0.035421075697137025
185 + },
186 + "robust_se": {
187 + "mu": 0.017043974680386417,
188 + "omega": 0.020836549077324372,
189 + "alpha1": 0.014636746334251497,
190 + "beta1": 0.038358083830533872
191 + },
192 + "loglik": -3841.0200748070997,
193 + "converged": true,
194 + "forecast_h5": [0.94763507510028322, 0.93698781864383818, 0.92698790880058568, 0.91759598729646441, 0.90877508881615554]
195 + },
196 + "gjrGARCH.norm": {
197 + "coef": {
198 + "mu": -0.01921714832040566,
199 + "omega": 0.049606222107306731,
200 + "alpha1": 0.041772517207855783,
201 + "beta1": 0.88881536902228075,
202 + "gamma1": 0.010749578214706531
203 + },
204 + "se": {
205 + "mu": 0.015788877242223259,
206 + "omega": 0.020732037955024357,
207 + "alpha1": 0.012738012140778642,
208 + "beta1": 0.036358574231286772,
209 + "gamma1": 0.01681215666556346
210 + },
211 + "robust_se": {
212 + "mu": 0.016963187542588787,
213 + "omega": 0.021997526667836047,
214 + "alpha1": 0.012381109622775522,
215 + "beta1": 0.040044430330484673,
216 + "gamma1": 0.017230012922633861
217 + },
218 + "loglik": -3840.8034370254973,
219 + "converged": true,
220 + "forecast_h5": [0.97755196253582011, 0.96455837224266494, 0.95239685670965857, 0.94101413209524076, 0.93036032671251323]
221 + },
222 + "eGARCH.norm": {
223 + "coef": {
224 + "mu": -0.022966085734094945,
225 + "omega": -0.012779542213507692,
226 + "alpha1": -0.00076829518133545631,
227 + "beta1": 0.9532136736359611,
228 + "gamma1": 0.089834797367789293
229 + },
230 + "se": {
231 + "mu": 0.015731171060962931,
232 + "omega": 0.020613569207631303,
233 + "alpha1": 0.013206355990077282,
234 + "beta1": 0.073113474575883089,
235 + "gamma1": 0.060626191829447999
236 + },
237 + "robust_se": {
238 + "mu": 0.017146433037466612,
239 + "omega": 0.088337872440952633,
240 + "alpha1": 0.040033713535164918,
241 + "beta1": 0.31484565953594218,
242 + "gamma1": 0.25365796252326678
243 + },
244 + "loglik": -3840.6120305950508,
245 + "converged": true,
246 + "forecast_h5": [0.94230544276184092, 0.93293006812265378, 0.92408018148567717, 0.91572251144926264, 0.90782624332712947]
247 + },
248 + "sGARCH.std": {
249 + "coef": {
250 + "mu": -0.018816592659429972,
251 + "omega": 0.046191939728617612,
252 + "alpha1": 0.044962812250873993,
253 + "beta1": 0.89536963039369999,
254 + "shape": 99.999873765090996
255 + },
256 + "se": {
257 + "mu": 0.015733116019376509,
258 + "omega": 0.020181074534464737,
259 + "alpha1": 0.012481787204476544,
260 + "beta1": 0.035670675658710446,
261 + "shape": 68.929603216724544
262 + },
263 + "robust_se": {
264 + "mu": 0.017107427281700522,
265 + "omega": 0.02085183337489558,
266 + "alpha1": 0.014641888146575781,
267 + "beta1": 0.038396705016878786,
268 + "shape": 24.403762618119906
269 + },
270 + "loglik": -3841.7221654386312,
271 + "converged": true,
272 + "forecast_h5": [0.94772578579531741, 0.93736924284277667, 0.92763064951086072, 0.9184731342551381, 0.90986202556616935]
273 + }
274 + }
275 +}
modified datasets/fixtures/reference_values.json +676 −9
@@ -1,6 +1,579 @@
1 1 {
2 2 "xnys": {
3 − "error": "Parameter `start` receieved as '2000-01-01 00:00:00' although cannot be earlier than the first session of calendar 'XNYS' ('2000-01-03 00:00:00')."
3 + "n_sessions_2000_2026": 6790,
4 + "sessions_2024": [
5 + "2024-01-02",
6 + "2024-01-03",
7 + "2024-01-04",
8 + "2024-01-05",
9 + "2024-01-08",
10 + "2024-01-09",
11 + "2024-01-10",
12 + "2024-01-11",
13 + "2024-01-12",
14 + "2024-01-16",
15 + "2024-01-17",
16 + "2024-01-18",
17 + "2024-01-19",
18 + "2024-01-22",
19 + "2024-01-23",
20 + "2024-01-24",
21 + "2024-01-25",
22 + "2024-01-26",
23 + "2024-01-29",
24 + "2024-01-30",
25 + "2024-01-31",
26 + "2024-02-01",
27 + "2024-02-02",
28 + "2024-02-05",
29 + "2024-02-06",
30 + "2024-02-07",
31 + "2024-02-08",
32 + "2024-02-09",
33 + "2024-02-12",
34 + "2024-02-13",
35 + "2024-02-14",
36 + "2024-02-15",
37 + "2024-02-16",
38 + "2024-02-20",
39 + "2024-02-21",
40 + "2024-02-22",
41 + "2024-02-23",
42 + "2024-02-26",
43 + "2024-02-27",
44 + "2024-02-28",
45 + "2024-02-29",
46 + "2024-03-01",
47 + "2024-03-04",
48 + "2024-03-05",
49 + "2024-03-06",
50 + "2024-03-07",
51 + "2024-03-08",
52 + "2024-03-11",
53 + "2024-03-12",
54 + "2024-03-13",
55 + "2024-03-14",
56 + "2024-03-15",
57 + "2024-03-18",
58 + "2024-03-19",
59 + "2024-03-20",
60 + "2024-03-21",
61 + "2024-03-22",
62 + "2024-03-25",
63 + "2024-03-26",
64 + "2024-03-27",
65 + "2024-03-28",
66 + "2024-04-01",
67 + "2024-04-02",
68 + "2024-04-03",
69 + "2024-04-04",
70 + "2024-04-05",
71 + "2024-04-08",
72 + "2024-04-09",
73 + "2024-04-10",
74 + "2024-04-11",
75 + "2024-04-12",
76 + "2024-04-15",
77 + "2024-04-16",
78 + "2024-04-17",
79 + "2024-04-18",
80 + "2024-04-19",
81 + "2024-04-22",
82 + "2024-04-23",
83 + "2024-04-24",
84 + "2024-04-25",
85 + "2024-04-26",
86 + "2024-04-29",
87 + "2024-04-30",
88 + "2024-05-01",
89 + "2024-05-02",
90 + "2024-05-03",
91 + "2024-05-06",
92 + "2024-05-07",
93 + "2024-05-08",
94 + "2024-05-09",
95 + "2024-05-10",
96 + "2024-05-13",
97 + "2024-05-14",
98 + "2024-05-15",
99 + "2024-05-16",
100 + "2024-05-17",
101 + "2024-05-20",
102 + "2024-05-21",
103 + "2024-05-22",
104 + "2024-05-23",
105 + "2024-05-24",
106 + "2024-05-28",
107 + "2024-05-29",
108 + "2024-05-30",
109 + "2024-05-31",
110 + "2024-06-03",
111 + "2024-06-04",
112 + "2024-06-05",
113 + "2024-06-06",
114 + "2024-06-07",
115 + "2024-06-10",
116 + "2024-06-11",
117 + "2024-06-12",
118 + "2024-06-13",
119 + "2024-06-14",
120 + "2024-06-17",
121 + "2024-06-18",
122 + "2024-06-20",
123 + "2024-06-21",
124 + "2024-06-24",
125 + "2024-06-25",
126 + "2024-06-26",
127 + "2024-06-27",
128 + "2024-06-28",
129 + "2024-07-01",
130 + "2024-07-02",
131 + "2024-07-03",
132 + "2024-07-05",
133 + "2024-07-08",
134 + "2024-07-09",
135 + "2024-07-10",
136 + "2024-07-11",
137 + "2024-07-12",
138 + "2024-07-15",
139 + "2024-07-16",
140 + "2024-07-17",
141 + "2024-07-18",
142 + "2024-07-19",
143 + "2024-07-22",
144 + "2024-07-23",
145 + "2024-07-24",
146 + "2024-07-25",
147 + "2024-07-26",
148 + "2024-07-29",
149 + "2024-07-30",
150 + "2024-07-31",
151 + "2024-08-01",
152 + "2024-08-02",
153 + "2024-08-05",
154 + "2024-08-06",
155 + "2024-08-07",
156 + "2024-08-08",
157 + "2024-08-09",
158 + "2024-08-12",
159 + "2024-08-13",
160 + "2024-08-14",
161 + "2024-08-15",
162 + "2024-08-16",
163 + "2024-08-19",
164 + "2024-08-20",
165 + "2024-08-21",
166 + "2024-08-22",
167 + "2024-08-23",
168 + "2024-08-26",
169 + "2024-08-27",
170 + "2024-08-28",
171 + "2024-08-29",
172 + "2024-08-30",
173 + "2024-09-03",
174 + "2024-09-04",
175 + "2024-09-05",
176 + "2024-09-06",
177 + "2024-09-09",
178 + "2024-09-10",
179 + "2024-09-11",
180 + "2024-09-12",
181 + "2024-09-13",
182 + "2024-09-16",
183 + "2024-09-17",
184 + "2024-09-18",
185 + "2024-09-19",
186 + "2024-09-20",
187 + "2024-09-23",
188 + "2024-09-24",
189 + "2024-09-25",
190 + "2024-09-26",
191 + "2024-09-27",
192 + "2024-09-30",
193 + "2024-10-01",
194 + "2024-10-02",
195 + "2024-10-03",
196 + "2024-10-04",
197 + "2024-10-07",
198 + "2024-10-08",
199 + "2024-10-09",
200 + "2024-10-10",
201 + "2024-10-11",
202 + "2024-10-14",
203 + "2024-10-15",
204 + "2024-10-16",
205 + "2024-10-17",
206 + "2024-10-18",
207 + "2024-10-21",
208 + "2024-10-22",
209 + "2024-10-23",
210 + "2024-10-24",
211 + "2024-10-25",
212 + "2024-10-28",
213 + "2024-10-29",
214 + "2024-10-30",
215 + "2024-10-31",
216 + "2024-11-01",
217 + "2024-11-04",
218 + "2024-11-05",
219 + "2024-11-06",
220 + "2024-11-07",
221 + "2024-11-08",
222 + "2024-11-11",
223 + "2024-11-12",
224 + "2024-11-13",
225 + "2024-11-14",
226 + "2024-11-15",
227 + "2024-11-18",
228 + "2024-11-19",
229 + "2024-11-20",
230 + "2024-11-21",
231 + "2024-11-22",
232 + "2024-11-25",
233 + "2024-11-26",
234 + "2024-11-27",
235 + "2024-11-29",
236 + "2024-12-02",
237 + "2024-12-03",
238 + "2024-12-04",
239 + "2024-12-05",
240 + "2024-12-06",
241 + "2024-12-09",
242 + "2024-12-10",
243 + "2024-12-11",
244 + "2024-12-12",
245 + "2024-12-13",
246 + "2024-12-16",
247 + "2024-12-17",
248 + "2024-12-18",
249 + "2024-12-19",
250 + "2024-12-20",
251 + "2024-12-23",
252 + "2024-12-24",
253 + "2024-12-26",
254 + "2024-12-27",
255 + "2024-12-30",
256 + "2024-12-31"
257 + ],
258 + "early_closes_2000_2026": [
259 + "2000-07-03",
260 + "2000-11-24",
261 + "2001-07-03",
262 + "2001-11-23",
263 + "2001-12-24",
264 + "2002-07-05",
265 + "2002-11-29",
266 + "2002-12-24",
267 + "2003-07-03",
268 + "2003-11-28",
269 + "2003-12-24",
270 + "2003-12-26",
271 + "2004-11-26",
272 + "2005-11-25",
273 + "2006-07-03",
274 + "2006-11-24",
275 + "2007-07-03",
276 + "2007-11-23",
277 + "2007-12-24",
278 + "2008-07-03",
279 + "2008-11-28",
280 + "2008-12-24",
281 + "2009-11-27",
282 + "2009-12-24",
283 + "2010-11-26",
284 + "2011-11-25",
285 + "2012-07-03",
286 + "2012-11-23",
287 + "2012-12-24",
288 + "2013-07-03",
289 + "2013-11-29",
290 + "2013-12-24",
291 + "2014-07-03",
292 + "2014-11-28",
293 + "2014-12-24",
294 + "2015-11-27",
295 + "2015-12-24",
296 + "2016-11-25",
297 + "2017-07-03",
298 + "2017-11-24",
299 + "2018-07-03",
300 + "2018-11-23",
301 + "2018-12-24",
302 + "2019-07-03",
303 + "2019-11-29",
304 + "2019-12-24",
305 + "2020-11-27",
306 + "2020-12-24",
307 + "2021-11-26",
308 + "2022-11-25",
309 + "2023-07-03",
310 + "2023-11-24",
311 + "2024-07-03",
312 + "2024-11-29",
313 + "2024-12-24",
314 + "2025-07-03",
315 + "2025-11-28",
316 + "2025-12-24",
317 + "2026-11-27",
318 + "2026-12-24"
319 + ],
320 + "holidays_2000_2026": [
321 + "2000-01-17",
322 + "2000-02-21",
323 + "2000-04-21",
324 + "2000-05-29",
325 + "2000-07-04",
326 + "2000-09-04",
327 + "2000-11-23",
328 + "2000-12-25",
329 + "2001-01-01",
330 + "2001-01-15",
331 + "2001-02-19",
332 + "2001-04-13",
333 + "2001-05-28",
334 + "2001-07-04",
335 + "2001-09-03",
336 + "2001-09-11",
337 + "2001-09-12",
338 + "2001-09-13",
339 + "2001-09-14",
340 + "2001-11-22",
341 + "2001-12-25",
342 + "2002-01-01",
343 + "2002-01-21",
344 + "2002-02-18",
345 + "2002-03-29",
346 + "2002-05-27",
347 + "2002-07-04",
348 + "2002-09-02",
349 + "2002-11-28",
350 + "2002-12-25",
351 + "2003-01-01",
352 + "2003-01-20",
353 + "2003-02-17",
354 + "2003-04-18",
355 + "2003-05-26",
356 + "2003-07-04",
357 + "2003-09-01",
358 + "2003-11-27",
359 + "2003-12-25",
360 + "2004-01-01",
361 + "2004-01-19",
362 + "2004-02-16",
363 + "2004-04-09",
364 + "2004-05-31",
365 + "2004-06-11",
366 + "2004-07-05",
367 + "2004-09-06",
368 + "2004-11-25",
369 + "2004-12-24",
370 + "2005-01-17",
371 + "2005-02-21",
372 + "2005-03-25",
373 + "2005-05-30",
374 + "2005-07-04",
375 + "2005-09-05",
376 + "2005-11-24",
377 + "2005-12-26",
378 + "2006-01-02",
379 + "2006-01-16",
380 + "2006-02-20",
381 + "2006-04-14",
382 + "2006-05-29",
383 + "2006-07-04",
384 + "2006-09-04",
385 + "2006-11-23",
386 + "2006-12-25",
387 + "2007-01-01",
388 + "2007-01-02",
389 + "2007-01-15",
390 + "2007-02-19",
391 + "2007-04-06",
392 + "2007-05-28",
393 + "2007-07-04",
394 + "2007-09-03",
395 + "2007-11-22",
396 + "2007-12-25",
397 + "2008-01-01",
398 + "2008-01-21",
399 + "2008-02-18",
400 + "2008-03-21",
401 + "2008-05-26",
402 + "2008-07-04",
403 + "2008-09-01",
404 + "2008-11-27",
405 + "2008-12-25",
406 + "2009-01-01",
407 + "2009-01-19",
408 + "2009-02-16",
409 + "2009-04-10",
410 + "2009-05-25",
411 + "2009-07-03",
412 + "2009-09-07",
413 + "2009-11-26",
414 + "2009-12-25",
415 + "2010-01-01",
416 + "2010-01-18",
417 + "2010-02-15",
418 + "2010-04-02",
419 + "2010-05-31",
420 + "2010-07-05",
421 + "2010-09-06",
422 + "2010-11-25",
423 + "2010-12-24",
424 + "2011-01-17",
425 + "2011-02-21",
426 + "2011-04-22",
427 + "2011-05-30",
428 + "2011-07-04",
429 + "2011-09-05",
430 + "2011-11-24",
431 + "2011-12-26",
432 + "2012-01-02",
433 + "2012-01-16",
434 + "2012-02-20",
435 + "2012-04-06",
436 + "2012-05-28",
437 + "2012-07-04",
438 + "2012-09-03",
439 + "2012-10-29",
440 + "2012-10-30",
441 + "2012-11-22",
442 + "2012-12-25",
443 + "2013-01-01",
444 + "2013-01-21",
445 + "2013-02-18",
446 + "2013-03-29",
447 + "2013-05-27",
448 + "2013-07-04",
449 + "2013-09-02",
450 + "2013-11-28",
451 + "2013-12-25",
452 + "2014-01-01",
453 + "2014-01-20",
454 + "2014-02-17",
455 + "2014-04-18",
456 + "2014-05-26",
457 + "2014-07-04",
458 + "2014-09-01",
459 + "2014-11-27",
460 + "2014-12-25",
461 + "2015-01-01",
462 + "2015-01-19",
463 + "2015-02-16",
464 + "2015-04-03",
465 + "2015-05-25",
466 + "2015-07-03",
467 + "2015-09-07",
468 + "2015-11-26",
469 + "2015-12-25",
470 + "2016-01-01",
471 + "2016-01-18",
472 + "2016-02-15",
473 + "2016-03-25",
474 + "2016-05-30",
475 + "2016-07-04",
476 + "2016-09-05",
477 + "2016-11-24",
478 + "2016-12-26",
479 + "2017-01-02",
480 + "2017-01-16",
481 + "2017-02-20",
482 + "2017-04-14",
483 + "2017-05-29",
484 + "2017-07-04",
485 + "2017-09-04",
486 + "2017-11-23",
487 + "2017-12-25",
488 + "2018-01-01",
489 + "2018-01-15",
490 + "2018-02-19",
491 + "2018-03-30",
492 + "2018-05-28",
493 + "2018-07-04",
494 + "2018-09-03",
495 + "2018-11-22",
496 + "2018-12-05",
497 + "2018-12-25",
498 + "2019-01-01",
499 + "2019-01-21",
500 + "2019-02-18",
501 + "2019-04-19",
502 + "2019-05-27",
503 + "2019-07-04",
504 + "2019-09-02",
505 + "2019-11-28",
506 + "2019-12-25",
507 + "2020-01-01",
508 + "2020-01-20",
509 + "2020-02-17",
510 + "2020-04-10",
511 + "2020-05-25",
512 + "2020-07-03",
513 + "2020-09-07",
514 + "2020-11-26",
515 + "2020-12-25",
516 + "2021-01-01",
517 + "2021-01-18",
518 + "2021-02-15",
519 + "2021-04-02",
520 + "2021-05-31",
521 + "2021-07-05",
522 + "2021-09-06",
523 + "2021-11-25",
524 + "2021-12-24",
525 + "2022-01-17",
526 + "2022-02-21",
527 + "2022-04-15",
528 + "2022-05-30",
529 + "2022-06-20",
530 + "2022-07-04",
531 + "2022-09-05",
532 + "2022-11-24",
533 + "2022-12-26",
534 + "2023-01-02",
535 + "2023-01-16",
536 + "2023-02-20",
537 + "2023-04-07",
538 + "2023-05-29",
539 + "2023-06-19",
540 + "2023-07-04",
541 + "2023-09-04",
542 + "2023-11-23",
543 + "2023-12-25",
544 + "2024-01-01",
545 + "2024-01-15",
546 + "2024-02-19",
547 + "2024-03-29",
548 + "2024-05-27",
549 + "2024-06-19",
550 + "2024-07-04",
551 + "2024-09-02",
552 + "2024-11-28",
553 + "2024-12-25",
554 + "2025-01-01",
555 + "2025-01-09",
556 + "2025-01-20",
557 + "2025-02-17",
558 + "2025-04-18",
559 + "2025-05-26",
560 + "2025-06-19",
561 + "2025-07-04",
562 + "2025-09-01",
563 + "2025-11-27",
564 + "2025-12-25",
565 + "2026-01-01",
566 + "2026-01-19",
567 + "2026-02-16",
568 + "2026-04-03",
569 + "2026-05-25",
570 + "2026-06-19",
571 + "2026-07-03",
572 + "2026-09-07",
573 + "2026-11-26",
574 + "2026-12-25"
575 + ],
576 + "exchange_calendars_version": "4.13.2"
4 577 },
5 578 "ols": {
6 579 "params": [
@@ -168,10 +741,10 @@
168 741 "converged": true,
169 742 "forecast_h5": [
170 743 0.9428008577891447,
171 − 0.9349887823049752,
172 − 0.9276816634654835,
173 − 0.9206952073863107,
174 − 0.9139209540830693
744 + 0.9350967040941869,
745 + 0.9279209834507949,
746 + 0.9203740696879242,
747 + 0.9136275610313748
175 748 ]
176 749 },
177 750 "egarch.t": {
@@ -195,11 +768,105 @@
195 768 "converged": true,
196 769 "forecast_h5": [
197 770 0.9422973309992873,
198 − 0.9345334516475253,
199 − 0.9275624591259901,
200 − 0.9204890251862488,
201 − 0.9130849041786623
771 + 0.9347854822088925,
772 + 0.9267087660109804,
773 + 0.9193443167679186,
774 + 0.9129057243623206
202 775 ]
203 776 }
777 + },
778 + "har": {
779 + "h1": {
780 + "params": [
781 + 3.572237054621749e-05,
782 + 0.705187263376507,
783 + -0.0026533461235812503,
784 + -0.005382072104623131
785 + ],
786 + "hac_bse": [
787 + 5.025808125371488e-06,
788 + 0.03771149347978252,
789 + 0.04088782859024564,
790 + 0.05679993577399188
791 + ],
792 + "hac_lags": 7,
793 + "n": 1478,
794 + "ssr": 4.9066292970164625e-06,
795 + "rsquared": 0.4939090998347373
796 + },
797 + "h5": {
798 + "params": [
799 + 7.303627566100124e-05,
800 + 0.40237517399511974,
801 + -0.012151755617208201,
802 + -0.010149362030271447
803 + ],
804 + "hac_bse": [
805 + 8.862600633978347e-06,
806 + 0.042107670404322194,
807 + 0.058769867344117446,
808 + 0.09751138359952202
809 + ],
810 + "hac_lags": 7,
811 + "n": 1474,
812 + "ssr": 4.553106285292198e-06,
813 + "rsquared": 0.2470427244436465
814 + },
815 + "h22": {
816 + "params": [
817 + 0.0001079682069563529,
818 + 0.10933613277708529,
819 + -0.0015594242826553265,
820 + -0.02513758766905899
821 + ],
822 + "hac_bse": [
823 + 1.0735092262683719e-05,
824 + 0.019568145492281423,
825 + 0.03970034224388717,
826 + 0.0982148382834958
827 + ],
828 + "hac_lags": 21,
829 + "n": 1457,
830 + "ssr": 2.1253086279812884e-06,
831 + "rsquared": 0.047604184294901764
832 + },
833 + "log_h1": {
834 + "params": [
835 + -2.773144648710696,
836 + 0.6956416417576977,
837 + 0.01608375548941232,
838 + -0.0123652588421852
839 + ],
840 + "hac_bse": [
841 + 0.3583623660089911,
842 + 0.027231971275931997,
843 + 0.03648579501915967,
844 + 0.04777402944192476
845 + ],
846 + "hac_lags": 7,
847 + "n": 1478,
848 + "ssr": 253.84378776319585,
849 + "rsquared": 0.4939008420788008
850 + },
851 + "harq_h1": {
852 + "params": [
853 + 3.048016504762969e-05,
854 + 0.7593401271334446,
855 + -0.009638437619492339,
856 + -0.0027765923868793563,
857 + -153.55046863809284
858 + ],
859 + "hac_bse": [
860 + 6.591629821411091e-06,
861 + 0.04571371552002667,
862 + 0.04075106926582767,
863 + 0.057820223931294774,
864 + 126.5397411975311
865 + ],
866 + "hac_lags": 7,
867 + "n": 1478,
868 + "ssr": 4.894744455085396e-06,
869 + "rsquared": 0.4951349536718862
870 + }
204 871 }
205 872 }
\ No newline at end of file
modified docs/PROGRESS.md +29 −0
@@ -120,3 +120,32 @@ Executed:
120 120 compilation of the bundle is measured separately in E7 (toolchain-less nodes).
121 121
122 122 Gate evidence: accuracy tests and the measured break-even table above; no claim beyond the tested shapes.
123 +
124 +## Phase 4 — Econometrics, Tier A (2026-11-02, 16:30–17:40 ET) — GATE PASSED
125 +Plan: HAR family, block bootstrap, R references (highfrequency, rugarch), Monte Carlo validation, gradient checks,
126 +registry completion, Python/CLI exposure.
127 +
128 +Executed:
129 +- `estimators/har.{hpp,cpp}`: HAR-RV / log-HAR / HAR-X / HARQ (causal lags, average or single targets, HAC with
130 + ≥ h−1 lags), `har_rolling` (causal re-estimation + QLIKE/MSE), `har_batch` (GPU sufficient statistics, FP64 solve).
131 + `statistics/bootstrap.{hpp,cpp}`: stationary / circular block / iid, deterministic streams, scalar and row variants.
132 +- R references (`scripts/reference_r.R` → `datasets/fixtures/reference_r.json`, highfrequency 1.0.3, rugarch 1.5.6):
133 + RV/BPV/RSV±/RQ equal to 1e−10 after two documented conventions (highfrequency `rQuar` uses (M+1)/3; `rBPCov` with
134 + makeReturns=FALSE applies no M/(M−1) factor); `HARmodel` h=1 coefficients 1e−8 and h=5 (average target) 1e−6; HARQ
135 + equal once the regressor is (√RQ_t − √mean RQ)·RV_t as in highfrequency; rugarch sGARCH/gjrGARCH/eGARCH/sGARCH-std
136 + log-likelihoods within 2e−4 and parameters within 5 % (eGARCH alpha1/gamma1 swap documented; ν at the bound for
137 + Gaussian data in both packages).
138 +- statsmodels references (`make_fixtures.py`): HAR h=1/5/22, log-HAR, HARQ with HAC → coefficients 1e−9, SE 1e−8.
139 +- Calendar: the exchange_calendars comparison was previously **not running** (API error swallowed into a WARN) — fixed;
140 + the exact comparison 2000-01-03…2026-12-31 (6 790 sessions, 254 weekday holidays, 60 early closes) revealed three
141 + historical one-offs (early closes 2002-07-05 and 2003-12-26; full day 2002-07-03), now encoded. All sets equal.
142 +- Monte Carlo (`tests/simulation`, printed to the test log): GARCH(1,1) n=2000, R=120: bias μ −0.0004, ω +0.0033,
143 + α −0.0020, β −0.0026; RMSE 0.019/0.009/0.014/0.019; 95 % QMLE coverage 0.950/0.942/0.900/0.933; 0 failures.
144 + HAR h=5 HAC coverage 0.895/0.945/0.910/0.905 (R=200, T=1200). RV RMSE vs √(2/M)·IV: 5.48e−5 vs 5.66e−5 (M=39),
145 + 1.85e−5 vs 1.79e−5 (390), 5.78e−6 vs 5.66e−6 (3 900). Stationary-bootstrap mean coverage 0.89 (R=100). Numerical
146 + NLL gradients agree across step sizes 1e−4/1e−5/1e−6.
147 +- Python: `raid.har_fit/har_rolling/har_batch/bootstrap` (pytest 9/9, HAR+HAC equal to statsmodels); CLI `raid
148 + estimate har <bars> [--horizon] [--log] [--harq] [--window --step]`.
149 +- Full suite: `ctest` all green (see summary in RESEARCH_STATUS).
150 +
151 +Gate evidence: reference tables (R + Python), Monte Carlo logs, registry entries with tolerances.
modified docs/methods/registry.md +12 −8
@@ -9,10 +9,10 @@ reference comparison pending · 🧭 experimental · ✖ not implemented. "Toler
9 9 | `calendar.xnys` | NYSE trading days 2000–2026 (rules + special closures), early closes 13:00, DST America/New_York | dates | exchange_calendars 4.13 XNYS | exact set equality (sessions, holidays, early closes 2000–2026) | ✅ | n/a | ✅ |
10 10 | `bars.validate` | OHLC consistency, positivity, grid alignment, session membership, coverage vs 391/211, price jumps > 25 % | BarSeries | FinData `/market/sessions` semantics | counts | ✅ | n/a | ✅ (synthetic) |
11 11 | `bars.aggregate` | bins anchored at the session open (09:30 regular / 04:00 extended), the 16:00 closing print is its own bin, no empty bins, OHLC/sum | BarSeries | FinData derived 5m | exact OHLCV: extended policy 280/280 bars (AAPL 2024-11-25…29); regular policy differs only in the closing bin (FinData adds 16:01–16:04) | ✅ | n/a | ✅ (live 2026-11-02) |
12 −| `realized.rv` | Σ r² | returns CSR | highfrequency `rCov` (univariate) / numpy | 1e−12 rel (numpy) | ✅ | Phase 3 | ✅ |
13 −| `realized.bpv` | μ₁⁻²·M/(M−1)·Σ|r_j||r_{j−1}| (finite-sample factor optional) | returns CSR | highfrequency `rBPCov` (makeReturns=FALSE, scaled) | 1e−12 rel (numpy); R comparison Phase 4 | ✅ | Phase 3 | ✅ |
14 −| `realized.rsv` | Σ r² 1{r<0}, Σ r² 1{r>0} | returns CSR | highfrequency `rSVar` | 1e−12 rel | ✅ | Phase 3 | ✅ |
15 −| `realized.rq` | (M/3) Σ r⁴ | returns CSR | highfrequency `rQuar` | 1e−12 rel | ✅ | Phase 3 | ✅ |
12 +| `realized.rv` | Σ r² | returns CSR | highfrequency `rCov` 1e−10, numpy 1e−12 | 1e−10 | ✅ | ✅ 1e−6 | ✅ |
13 +| `realized.bpv` | μ₁⁻²·[M/(M−1)]·Σ|r_j||r_{j−1}| (factor on by default; highfrequency `rBPCov(makeReturns=FALSE)` applies none → compared with factor off) | returns CSR | highfrequency 1e−10, numpy 1e−12 | 1e−10 | ✅ | ✅ 1e−6 | ✅ |
14 +| `realized.rsv` | Σ r² 1{r<0}, Σ r² 1{r>0} | returns CSR | highfrequency `rSVar` 1e−10 | 1e−10 | ✅ | ✅ 1e−6 | ✅ |
15 +| `realized.rq` | (M/3) Σ r⁴ (BPQ 2016; M = number of returns) — highfrequency `rQuar` uses (M+1)/3 (number of prices): compared after conversion | returns CSR | highfrequency `rQuar` 1e−10 (converted), numpy 1e−12 | 1e−10 | ✅ | ✅ | ✅ |
16 16 | `realized.jump` | max(RV − BPV, 0) (proxy, no test statistic) | — | ABD 2007 | — | ✅ | — | ✅ |
17 17 | `realized.tripv` | μ_{4/3}⁻³·M/(M−2)·Σ Π|r|^{4/3} | returns CSR | highfrequency `rTPQuar` (differs: quarticity) — definition from BNS 2004 | 1e−12 (self) | ✅ | — | 🧪 |
18 18 | `realized.rcov` | Σ r_j r_j' on synchronized returns; corr from diag | T×N returns | highfrequency `rCov` | Phase 4 | ✅ | Phase 3 | 🧪 |
@@ -23,13 +23,17 @@ reference comparison pending · 🧭 experimental · ✖ not implemented. "Toler
23 23 | `cov.cluster` | one-way CGM with G/(G−1)·(n−1)/(n−k) | cluster ids | statsmodels cluster (default correction) | 1e−9 | ✅ | — | ✅ |
24 24 | `inference.t` | two-sided p from t(df_resid) (regularised incomplete beta); df ≤ 0 → normal | — | scipy.stats.t | 1e−12 | ✅ | — | ✅ |
25 25 | `ols.rolling` | window-by-window QR; step parameter | X, y | statsmodels RollingOLS | self-consistency test; Phase 4 vs statsmodels | ✅ | Phase 3 | 🧪 |
26 −| `har.*` | HAR-RV, log-HAR, HAR-X, HARQ (BPQ 2016): RV_{t+h} regressed on RV_t, mean(RV_{t−4..t}), mean(RV_{t−21..t}) [, √RQ_t·RV_t]; causal lags; h ∈ {1,5,22} with overlapping targets → HAC(h−1 lags minimum) | daily RV panel | highfrequency `HARmodel`, statsmodels | Phase 4 | Phase 4 | Phase 4 | ✖ (Phase 4) |
27 −| `garch.garch.gaussian` | σ²_t = ω + α ε²_{t−1} + β σ²_{t−1}; σ²_0 = sample variance of ε; constraints ω>0, α,β≥0, α+β<1 | returns | arch 8.0 `arch_model(vol="GARCH", rescale=False)` (backcast initialisation ≠ ours), rugarch (Phase 4) | loglik 5e−4 rel; params 5 % rel + 0.01 abs; forecasts 5 % | ✅ | likelihood batch Phase 3 | ✅ |
26 +| `har.rv.h{1,5,22}` | y_{t+h} = (1/h)Σ_{j=1..h} RV_{t+j} on [1, RV_t, mean RV_{t−4..t}, mean RV_{t−21..t}]; causal; HAC lags = max(h−1, ⌊4(n/100)^{2/9}⌋) | daily RV | highfrequency `HARmodel` (h=1 coef 1e−8, h=5 average target 1e−6), statsmodels HAC 1e−9 | 1e−8 | ✅ | ✅ batched sufficient stats 1e−4 (Metal) | ✅ |
27 +| `har.logrv` | same on log RV; forecast exp(ŷ) without smearing (factor reported) | daily RV | statsmodels 1e−9 | 1e−9 | ✅ | — | ✅ |
28 +| `har.rv.harq` | + β_Q (√RQ_t − √mean RQ)·RV_t exactly as highfrequency `HARmodel(type="HARQ")` (demeaning optional) | daily RV, RQ | highfrequency 1e−6, statsmodels 1e−9 | 1e−6 | ✅ | — | ✅ |
29 +| `har.rolling` | rolling/expanding refits, origin-ahead forecasts, MSE/QLIKE (Patton 2011) | daily RV | causality test (future perturbation leaves forecasts unchanged) | exact | ✅ | — | ✅ |
30 +| `garch.garch.gaussian` | σ²_t = ω + α ε²_{t−1} + β σ²_{t−1}; σ²_0 = sample variance of ε; constraints ω>0, α,β≥0, α+β<1 | returns | arch 8.0 (loglik 5e−4, params 5 %), rugarch 1.5.6 `ugarchfit(sGARCH)` (loglik 2e−4, params 5 %) | as stated | ✅ | ✅ batched NLL 2e−5 | ✅ |
28 31 | `garch.gjr.*` | + γ 1{ε<0} ε²; α+γ ≥ 0; α+β+γ/2 < 1 | returns | arch GJR (o=1) | same | ✅ | — | ✅ |
29 −| `garch.egarch.*` | ln σ²_t = ω + α(|z|−E|z|) + γ z + β ln σ²_{t−1}; |β|<1; h>1 forecasts by simulation (20 000 paths, seeded) | returns | arch EGARCH | same (params); forecasts h>1 not compared | ✅ | — | ✅ |
32 +| `garch.egarch.*` | ln σ²_t = ω + α(|z|−E|z|) + γ z + β ln σ²_{t−1}; |β|<1; h>1 forecasts by simulation (20 000 paths, seeded). **rugarch maps alpha1 ↔ RAID γ (sign) and gamma1 ↔ RAID α (magnitude)** | returns | arch EGARCH, rugarch eGARCH (loglik 2e−4, mapped params 5 %) | same | ✅ | ✅ | ✅ |
30 33 | `garch.*.student_t` | standardized t, ν ∈ (2.05, 500) (arch bounds); E|z| via lgamma | returns | arch dist="t" | same; ν skipped when > 100 (unidentified) | ✅ | — | ✅ |
31 34 | `garch.cov` | QMLE sandwich H⁻¹ OPG H⁻¹ (Bollerslev–Wooldridge 1992), Hessian, OPG — numerical derivatives | — | arch robust/classic | Phase 4 (SE comparison) | ✅ | — | 🧪 |
32 −| `bootstrap.stationary` / `circular` | Politis–Romano 1994 / circular block; replica generation + statistic | series | arch.bootstrap | Phase 4 | Phase 4 | Phase 3/4 | ✖ |
35 +| `bootstrap.stationary` / `circular` / `iid` | Politis–Romano 1994 (geometric blocks, mean length b or n^{1/3}) / circular blocks / iid (comparison only); replica r ← Rng(seed, r); percentile CI, SE, bias; `bootstrap_rows` for regressions; `bootstrap_rv` | series | theory: AR(1) long-run SE (block SE within 35 %, > 1.6× iid SE); MC coverage 0.89 (R = 100) | as stated | ✅ | ⏳ (GPU replicas, E5) | ✅ |
36 +| `simulation.*` | Monte Carlo: GARCH(1,1) n=2000 R=120 — coverage 0.90–0.95, |bias| ≤ 0.003, no failures; HAR h=5 HAC coverage 0.895–0.945 (R=200, T=1200, pseudo-true from T=200 000); RV RMSE within 10 % of √(2/M)·IV; NLL finite-difference gradients stable across h | — | `tests/simulation` | — | ✅ | — | ✅ |
33 37
34 38 Conventions that differ from references and are **documented, not hidden**:
35 39 1. GARCH initial variance: RAID uses the sample variance of ε; `arch` uses a backcast (exponentially weighted) and
modified include/raid/estimators/har.hpp +3 −2
@@ -2,7 +2,7 @@
2 2 // HAR-RV (Corsi 2009): y_{t+h} = β0 + βd RV_t + βw RV^{(5)}_t + βm RV^{(22)}_t + ε, RV^{(k)}_t = (1/k) Σ_{j=0}^{k−1} RV_{t−j}
3 3 // log-HAR: same with log RV on both sides (forecast = exp(ŷ) × smearing optional, not applied by default)
4 4 // HAR-X: + user covariates X_t (already aligned at t)
5 −// HARQ (Bollerslev–Patton–Quaedvlieg 2016): βd → (βd + βq √RQ_t): term βq · √RQ_t · RV_t added
5 +// HARQ (Bollerslev–Patton–Quaedvlieg 2016): βd → (βd + βq √RQ_t): term βq · (√RQ_t − mean √RQ) · RV_t added (demeaning optional)
6 6 // Target for horizon h: y_{t+h} = (1/h) Σ_{j=1}^{h} RV_{t+j} (average over the next h days, "overlapping" when h > 1)
7 7 // or the single-day RV_{t+h} (`target = single`). Overlapping targets induce MA(h−1) errors → HAC with ≥ h−1 lags.
8 8 #pragma once
@@ -26,12 +26,13 @@ struct HarSpec {
26 26 HarTarget target{HarTarget::average};
27 27 bool log{false}; // log-HAR
28 28 bool harq{false}; // add √RQ_t · RV_t
29 + bool harq_demean_sqrt_rq{true}; // use (√RQ_t − √(mean RQ)) · RV_t exactly as highfrequency::HARmodel(type="HARQ"); the mean is over the sample passed to the fit (estimation window), never the future
29 30 stats::CovOptions cov{stats::CovType::hac_bartlett, -1, false, {}, true}; // hac_lags −1 → max(h−1, ⌊4(n/100)^{2/9}⌋)
30 31 std::string model_key() const { return std::string(log ? "har.logrv" : "har.rv") + (harq ? ".harq" : "") + ".h" + std::to_string(horizon); }
31 32 };
32 33
33 34 /// Builds the aligned design (y, X) from a daily RV series (and optional RQ and exogenous columns X_t, aligned at t).
34 −struct HarDesign { Eigen::MatrixXd X; Eigen::VectorXd y; std::vector<std::string> names; usize first_t{0}; usize n{0}; };
35 +struct HarDesign { Eigen::MatrixXd X; Eigen::VectorXd y; std::vector<std::string> names; usize first_t{0}; usize n{0}; f64 sqrt_rq_mean{0}; };
35 36 HarDesign har_design(std::span<const f64> rv, const HarSpec& spec, std::span<const f64> rq = {}, const Eigen::MatrixXd& exog = Eigen::MatrixXd(), const std::vector<std::string>& exog_names = {});
36 37
37 38 /// Fit one HAR on one series (CPU QR + robust covariance). Estimate.extra contains fitted/residual summaries.
added include/raid/statistics/bootstrap.hpp +55 −0
@@ -0,0 +1,55 @@
1 +// Block bootstrap for dependent data (registry keys bootstrap.*):
2 +// stationary (Politis & Romano 1994): blocks start at uniform random indices, lengths ~ Geometric(p = 1/mean_block),
3 +// wrapping circularly; expected block length = mean_block.
4 +// circular block (Politis & Romano 1992): fixed block length b, start indices uniform on [0, n), wrap around.
5 +// iid (for comparison only; not valid for dependent data — flagged in the registry).
6 +// Index generation is deterministic given (seed, replica id): replica r uses Rng(seed, r), so replicas can be generated
7 +// in parallel (CPU threads) or on the GPU with the same streams.
8 +#pragma once
9 +#include <vector>
10 +#include <span>
11 +#include <functional>
12 +#include "raid/core/types.hpp"
13 +#include "raid/core/rng.hpp"
14 +#include "raid/core/plan.hpp"
15 +#include "raid/core/estimate.hpp"
16 +
17 +namespace raid::stats {
18 +
19 +enum class BootstrapScheme { stationary, circular_block, iid };
20 +
21 +struct BootstrapOptions {
22 + BootstrapScheme scheme{BootstrapScheme::stationary};
23 + f64 mean_block{0}; // 0 → n^{1/3} (rule of thumb; the paper reports the value used)
24 + usize replicas{999};
25 + u64 seed{20261102};
26 + unsigned threads{0};
27 + f64 ci_level{0.95};
28 +};
29 +
30 +/// Index vector of one replica (length n).
31 +std::vector<u32> bootstrap_indices(usize n, const BootstrapOptions& o, usize replica);
32 +
33 +struct BootstrapResult {
34 + std::vector<f64> statistics; // one per replica (NaN if the statistic failed)
35 + f64 point{0}; // statistic on the original sample
36 + f64 se{0}; // bootstrap standard error
37 + f64 ci_lo{0}, ci_hi{0}; // percentile CI
38 + f64 bias{0}; // mean(stat*) − point
39 + usize failures{0};
40 + f64 block_length{0};
41 + f64 seconds{0};
42 +};
43 +
44 +/// Generic scalar statistic bootstrap: stat(x_resampled) evaluated for each replica.
45 +BootstrapResult bootstrap(std::span<const f64> x, const std::function<f64(std::span<const f64>)>& stat, const BootstrapOptions& o);
46 +
47 +/// Multivariate: statistic returns a vector (e.g. regression coefficients); rows of (y, X) are resampled jointly.
48 +struct BootstrapVecResult { std::vector<std::vector<f64>> statistics; std::vector<f64> point, se, ci_lo, ci_hi; usize failures{0}; f64 block_length{0}; f64 seconds{0}; };
49 +BootstrapVecResult bootstrap_rows(usize n, const std::function<std::vector<f64>(std::span<const u32>)>& stat_of_indices, const BootstrapOptions& o);
50 +
51 +/// Realized-variance bootstrap: for each replica, resample intraday returns within a session by blocks and recompute
52 +/// RV (Gonçalves & Meddahi 2009 use the iid wild bootstrap for RV; we use block schemes to respect dependence).
53 +BootstrapResult bootstrap_rv(std::span<const f64> intraday_returns, const BootstrapOptions& o);
54 +
55 +} // namespace raid::stats
modified python/raid/__init__.py +2 −1
@@ -18,7 +18,8 @@ except ImportError: # pragma: no cover
18 18 from . import findata # noqa: E402
19 19 from .api import ( # noqa: E402
20 20 devices, ols, realized_measures, garch_fit, validate_bars, calendar_sessions, Backend, available_backends,
21 + har_fit, har_rolling, har_batch, bootstrap,
21 22 )
22 23
23 24 __all__ = ["__version__", "HAS_CORE", "devices", "ols", "realized_measures", "garch_fit", "validate_bars",
24 − "calendar_sessions", "Backend", "available_backends", "findata"]
25 + "calendar_sessions", "Backend", "available_backends", "findata", "har_fit", "har_rolling", "har_batch", "bootstrap"]
modified python/raid/api.py +20 −0
@@ -76,3 +76,23 @@ def bars_to_intraday_returns(timestamps_us, close, kind: str = "log") -> dict[st
76 76 """Session-aware intraday log/arithmetic returns from (bar open timestamp, close) arrays; returns CSR layout."""
77 77 t = np.ascontiguousarray(timestamps_us, dtype=np.int64)
78 78 return _core().intraday_returns(t, _f64(close), kind)
79 +
80 +
81 +def har_fit(rv, lags=(1, 5, 22), horizon: int = 1, log: bool = False, harq: bool = False, rq=None, cov: str = "hac", hac_lags: int = -1, target: str = "average") -> dict[str, Any]:
82 + """HAR-RV / log-HAR / HARQ on a daily RV series with HAC (Newey–West) inference by default; returns Estimate + forecast_next."""
83 + return _core().har_fit(_f64(rv), list(lags), int(horizon), bool(log), bool(harq), None if rq is None else _f64(rq), cov, int(hac_lags), target)
84 +
85 +
86 +def har_rolling(rv, lags=(1, 5, 22), horizon: int = 1, log: bool = False, window: int = 1000, step: int = 1, harq: bool = False, rq=None) -> dict[str, Any]:
87 + """Causal rolling re-estimation with origin-ahead forecasts; returns forecasts, actuals, MSE and QLIKE."""
88 + return _core().har_rolling(_f64(rv), list(lags), int(horizon), bool(log), int(window), int(step), bool(harq), None if rq is None else _f64(rq))
89 +
90 +
91 +def har_batch(rv_concat, offsets, lags=(1, 5, 22), horizon: int = 1, log: bool = False, backend: str | Backend = Backend.auto) -> dict[str, Any]:
92 + """Batched HAR over a CSR panel of daily RV series (sufficient statistics on the selected backend, FP64 solve)."""
93 + return _core().har_batch(_f64(rv_concat), np.ascontiguousarray(offsets, dtype=np.int64), list(lags), int(horizon), bool(log), str(Backend(backend).value))
94 +
95 +
96 +def bootstrap(x, stat: str = "mean", scheme: str = "stationary", mean_block: float = 0.0, replicas: int = 999, seed: int = 20261102, level: float = 0.95) -> dict[str, Any]:
97 + """Stationary / circular block / iid bootstrap of mean, realized variance (sum of squares) or variance."""
98 + return _core().bootstrap(_f64(x), stat, scheme, float(mean_block), int(replicas), int(seed), float(level))
modified python/tests/test_api.py +23 −0
@@ -58,3 +58,26 @@ def test_validate_bars_counts_missing():
58 58 p = 100 + np.cumsum(np.random.default_rng(1).normal(0, 0.01, size=t.size))
59 59 q = raid.validate_bars(t, p, p + 0.01, p - 0.01, p, np.full(t.size, 100.0))
60 60 assert q["n_sessions"] == 1 and q["missing_regular_bars"] == 3 and not q["has_errors"]
61 +
62 +
63 +def test_har_fit_matches_statsmodels_hac():
64 + sm = pytest.importorskip("statsmodels.api")
65 + rng = np.random.default_rng(8); T = 800; lv = np.empty(T); lv[0] = np.log(1e-4)
66 + for t in range(1, T): lv[t] = 0.3 * np.log(1e-4) + 0.7 * lv[t - 1] + 0.4 * rng.standard_normal()
67 + rv = np.exp(lv); e = raid.har_fit(rv, horizon=1)
68 + rows = []; ys = []
69 + for t in range(21, T - 1):
70 + rows.append([1.0, rv[t], rv[t - 4:t + 1].mean(), rv[t - 21:t + 1].mean()]); ys.append(rv[t + 1])
71 + X = np.array(rows); y = np.array(ys); L = max(0, int(np.floor(4 * (len(y) / 100) ** (2 / 9))))
72 + f = sm.OLS(y, X).fit(cov_type="HAC", cov_kwds={"maxlags": L, "use_correction": False})
73 + np.testing.assert_allclose(e["coefficients"], f.params, rtol=1e-9); np.testing.assert_allclose(e["inference"]["std_errors"], f.bse, rtol=1e-8)
74 + assert e["forecast_next"] > 0
75 + r = raid.har_rolling(rv, horizon=5, window=400, step=20); assert r["n_fits"] > 10 and r["qlike"] >= 0
76 + b = raid.har_batch(np.concatenate([rv, rv * 2]), np.array([0, T, 2 * T]), backend="auto"); assert len(b["fits"]) == 2 and b["fits"][1]["ok"]
77 +
78 +
79 +def test_bootstrap_block_vs_iid():
80 + rng = np.random.default_rng(2); n = 1500; x = np.empty(n); x[0] = 0
81 + for t in range(1, n): x[t] = 0.7 * x[t - 1] + rng.standard_normal()
82 + blk = raid.bootstrap(x, "mean", "stationary", mean_block=20, replicas=399); iid = raid.bootstrap(x, "mean", "iid", replicas=399)
83 + assert blk["se"] > 1.5 * iid["se"] and blk["failures"] == 0 and blk["ci_lo"] < blk["point"] < blk["ci_hi"]
modified scripts/make_fixtures.py +27 −4
@@ -53,11 +53,11 @@ print("wrote", len(df), "bars for", df.symbol.nunique(), "symbols;", df.groupby(
53 53 ref = {}
54 54 try:
55 55 import exchange_calendars as xc
56 − cal = xc.get_calendar("XNYS", start="2000-01-01", end="2026-12-31")
57 − sess = cal.sessions_in_range("2000-01-01", "2026-12-31")
56 + cal = xc.get_calendar("XNYS", start="2000-01-03", end="2026-12-31")
57 + sess = cal.sessions_in_range("2000-01-03", "2026-12-31")
58 58 ref["xnys"] = {"n_sessions_2000_2026": int(len(sess)), "sessions_2024": [str(d.date()) for d in cal.sessions_in_range("2024-01-01", "2024-12-31")],
59 − "early_closes_2000_2026": [str(d.date()) for d in cal.early_closes.sessions_in_range("2000-01-01", "2026-12-31")] if hasattr(cal, "early_closes") else None,
60 − "holidays_2000_2026": [str(d.date()) for d in pd.bdate_range("2000-01-01", "2026-12-31") if d not in sess],
59 + "early_closes_2000_2026": [str(d.date()) for d in cal.early_closes if "2000-01-03" <= str(d.date()) <= "2026-12-31"],
60 + "holidays_2000_2026": [str(d.date()) for d in pd.bdate_range("2000-01-03", "2026-12-31") if d not in sess],
61 61 "exchange_calendars_version": xc.__version__}
62 62 except Exception as e:
63 63 ref["xnys"] = {"error": str(e)}
@@ -108,3 +108,26 @@ with open(os.path.join(out_dir, "synthetic_bars_page.arrow"), "wb") as fh:
108 108 w.write_table(tbl)
109 109 pq.write_table(tbl, os.path.join(out_dir, "synthetic_bars_page.parquet"))
110 110 print("wrote synthetic_bars_page.arrow/.parquet", tbl.num_rows, "rows")
111 +
112 +# --- HAR reference: simulated daily RV (log-AR(1)), HAR-RV h=1 and h=5 (average target) with HAC, log-HAR, HARQ -----
113 +g = np.random.default_rng(40); T = 1500; lv = np.empty(T); lv[0] = np.log(1e-4)
114 +for t in range(1, T): lv[t] = 0.3 * np.log(1e-4) + 0.7 * lv[t - 1] + 0.4 * g.standard_normal()
115 +rv = np.exp(lv); rq = rv ** 2 * (1 + 0.5 * g.random(T))
116 +np.savetxt(os.path.join(out_dir, "har_rv.csv"), np.column_stack([rv, rq]), delimiter=",", header="rv,rq", comments="", fmt="%.17g")
117 +def har_design(x, lags=(1, 5, 22), h=1, log=False, harq=None, target="average"):
118 + z = np.log(x) if log else x; L = max(lags); rows = []; ys = []
119 + sqrt_rq_mean = np.sqrt(np.mean(np.maximum(harq, 0.0))) if harq is not None else 0.0
120 + for t in range(L - 1, len(x) - h):
121 + row = [1.0] + [z[t - l + 1:t + 1].mean() for l in lags]
122 + if harq is not None: row.append((np.sqrt(max(harq[t], 0.0)) - sqrt_rq_mean) * x[t])
123 + if target == "average": yv = x[t + 1:t + h + 1].mean(); yv = np.log(yv) if log else yv
124 + else: yv = z[t + h]
125 + rows.append(row); ys.append(yv)
126 + return np.array(rows), np.array(ys)
127 +har = {}
128 +for name, kw in [("h1", dict(h=1)), ("h5", dict(h=5)), ("h22", dict(h=22)), ("log_h1", dict(h=1, log=True)), ("harq_h1", dict(h=1, harq=rq))]:
129 + X, y = har_design(rv, **kw); n = len(y); h = kw["h"]; L = max(h - 1, int(np.floor(4 * (n / 100) ** (2 / 9))))
130 + f = sm.OLS(y, X).fit(cov_type="HAC", cov_kwds={"maxlags": L, "use_correction": False})
131 + har[name] = {"params": f.params.tolist(), "hac_bse": f.bse.tolist(), "hac_lags": L, "n": n, "ssr": float(f.ssr), "rsquared": float(f.rsquared)}
132 +ref["har"] = har; json.dump(ref, open(os.path.join(out_dir, "reference_values.json"), "w"), indent=1)
133 +print("HAR references:", {k: v["n"] for k, v in har.items()})
added scripts/reference_r.R +50 −0
@@ -0,0 +1,50 @@
1 +#!/usr/bin/env Rscript
2 +# Reference values from R: highfrequency (realized measures, HARmodel) and rugarch (GARCH family) on the committed
3 +# synthetic fixtures. Output: datasets/fixtures/reference_r.json. Versions are recorded in the JSON.
4 +suppressPackageStartupMessages({ library(highfrequency); library(rugarch); library(xts); library(jsonlite) })
5 +root <- normalizePath(file.path(dirname(sub("--file=", "", grep("--file=", commandArgs(), value = TRUE)[1])), ".."))
6 +fx <- file.path(root, "datasets", "fixtures")
7 +out <- list(versions = list(R = R.version.string, highfrequency = as.character(packageVersion("highfrequency")), rugarch = as.character(packageVersion("rugarch"))))
8 +
9 +# ---- realized measures per session on the synthetic 1-minute bars (regular session, log returns) -------------------
10 +bars <- read.csv(file.path(fx, "synthetic_bars_1m.csv"), stringsAsFactors = FALSE)
11 +bars$ts <- as.POSIXct(bars$timestamp_utc, format = "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")
12 +bars$et <- format(bars$ts, tz = "America/New_York", format = "%H:%M")
13 +bars$sess <- as.Date(format(bars$ts, tz = "America/New_York", format = "%Y-%m-%d"))
14 +early <- as.Date("2024-11-29")
15 +rm <- list()
16 +for (sym in unique(bars$symbol)) {
17 + b <- bars[bars$symbol == sym, ]
18 + for (d in as.character(unique(b$sess))) {
19 + s <- b[b$sess == as.Date(d), ]; close_min <- if (as.Date(d) == early) "13:00" else "16:00"
20 + s <- s[s$et >= "09:30" & s$et <= close_min, ]
21 + p <- xts(s$close, order.by = s$ts); r <- diff(log(p))[-1]
22 + rm[[paste(sym, d)]] <- list(symbol = sym, session = d, n_returns = length(r),
23 + rv = as.numeric(rCov(r, makeReturns = FALSE)), bpv = as.numeric(rBPCov(r, makeReturns = FALSE)),
24 + rsv = as.list(as.numeric(rSVar(r, makeReturns = FALSE))), rq = as.numeric(rQuar(r, makeReturns = FALSE)),
25 + bns_jump_stat = tryCatch(as.numeric(BNSjumpTest(r, makeReturns = FALSE)$ztest), error = function(e) NA))
26 + }
27 +}
28 +out$realized <- unname(rm)
29 +
30 +# ---- HARmodel on the daily RV fixture -----------------------------------------------------------------------------
31 +h <- read.csv(file.path(fx, "har_rv.csv")); dates <- seq(as.Date("2018-01-01"), by = "day", length.out = nrow(h))
32 +rvx <- xts(h$rv, order.by = dates)
33 +hm <- HARmodel(rvx, periods = c(1, 5, 22), RVest = c("rCov"), type = "HAR", h = 1, transform = NULL, inputType = "RM")
34 +out$har_h1 <- list(coef = as.list(unname(coef(hm))), names = names(coef(hm)), n = length(hm$residuals), ssr = sum(hm$residuals^2))
35 +hm5 <- HARmodel(rvx, periods = c(1, 5, 22), RVest = c("rCov"), type = "HAR", h = 5, transform = NULL, inputType = "RM")
36 +out$har_h5 <- list(coef = as.list(unname(coef(hm5))), n = length(hm5$residuals), ssr = sum(hm5$residuals^2))
37 +hq <- HARmodel(xts(cbind(h$rv, h$rq), order.by = dates), periods = c(1, 5, 22), periodsQ = c(1), RVest = c("rCov", "rQuar"), type = "HARQ", h = 1, transform = NULL, inputType = "RM")
38 +out$harq_h1 <- list(coef = as.list(unname(coef(hq))), names = names(coef(hq)), n = length(hq$residuals), ssr = sum(hq$residuals^2))
39 +
40 +# ---- rugarch on the simulated GARCH returns ------------------------------------------------------------------------
41 +r <- read.csv(file.path(fx, "garch_returns.csv"))$r
42 +fit_one <- function(model, dist) {
43 + spec <- ugarchspec(variance.model = list(model = model, garchOrder = c(1, 1)), mean.model = list(armaOrder = c(0, 0), include.mean = TRUE), distribution.model = dist)
44 + f <- ugarchfit(spec, r, solver = "hybrid")
45 + list(coef = as.list(coef(f)), se = as.list(f@fit$matcoef[, 2]), robust_se = as.list(f@fit$robust.matcoef[, 2]), loglik = as.numeric(likelihood(f)), converged = f@fit$convergence == 0,
46 + forecast_h5 = as.numeric(sigma(ugarchforecast(f, n.ahead = 5)))^2)
47 +}
48 +out$garch <- list(sGARCH.norm = fit_one("sGARCH", "norm"), gjrGARCH.norm = fit_one("gjrGARCH", "norm"), eGARCH.norm = fit_one("eGARCH", "norm"), sGARCH.std = fit_one("sGARCH", "std"))
49 +write(toJSON(out, auto_unbox = TRUE, digits = 17, pretty = TRUE), file.path(fx, "reference_r.json"))
50 +cat("wrote reference_r.json\n")
modified src/estimators/har.cpp +7 −3
@@ -15,17 +15,20 @@ HarDesign har_design(std::span<const f64> rv, const HarSpec& spec, std::span<con
15 15 if (spec.harq) RAID_REQUIRE(rq.size() == T, invalid_argument, "harq: RQ series required with the same length");
16 16 const usize nex = exog.size() ? static_cast<usize>(exog.cols()) : 0; if (nex) RAID_REQUIRE(static_cast<usize>(exog.rows()) == T, invalid_argument, "har-x: exog rows must equal T");
17 17 std::vector<f64> z(T); for (usize t = 0; t < T; ++t) z[t] = spec.log ? std::log(rv[t]) : rv[t];
18 + f64 sqrt_rq_mean = 0.0;
19 + if (spec.harq && spec.harq_demean_sqrt_rq) { f64 s = 0; for (usize t = 0; t < T; ++t) s += std::max(rq[t], 0.0); sqrt_rq_mean = std::sqrt(s / static_cast<f64>(T)); } // √(mean RQ) over the sample, as highfrequency::HARmodel
18 20 // prefix sums for the window means (FP64, Neumaier)
19 21 std::vector<f64> cs(T + 1, 0.0); { f64 s = 0, c = 0; for (usize t = 0; t < T; ++t) { const f64 v = z[t], tt = s + v; if (std::abs(s) >= std::abs(v)) c += (s - tt) + v; else c += (v - tt) + s; s = tt; cs[t + 1] = s + c; } }
20 22 auto wmean = [&](usize t, usize k) { f64 s = 0; for (usize j = 0; j < k; ++j) s += z[t - j]; return s / static_cast<f64>(k); }; // direct sum (exact enough, k ≤ 22)
21 23 const usize first = maxlag - 1, last = T - 1 - h; // origins t with full lags and a full target
22 24 HarDesign d; d.first_t = first; d.n = last - first + 1; const usize k = 1 + spec.lags.size() + (spec.harq ? 1 : 0) + nex;
23 25 d.X.resize(static_cast<Eigen::Index>(d.n), static_cast<Eigen::Index>(k)); d.y.resize(static_cast<Eigen::Index>(d.n));
24 − d.names.push_back("const"); for (usize l : spec.lags) d.names.push_back((spec.log ? "logrv_" : "rv_") + std::to_string(l)); if (spec.harq) d.names.push_back("sqrt_rq_x_rv"); for (usize j = 0; j < nex; ++j) d.names.push_back(j < exog_names.size() ? exog_names[j] : "x" + std::to_string(j));
26 + d.names.push_back("const"); for (usize l : spec.lags) d.names.push_back((spec.log ? "logrv_" : "rv_") + std::to_string(l)); if (spec.harq) d.names.push_back(spec.harq_demean_sqrt_rq ? "sqrt_rq_dm_x_rv" : "sqrt_rq_x_rv");
27 + d.sqrt_rq_mean = sqrt_rq_mean; for (usize j = 0; j < nex; ++j) d.names.push_back(j < exog_names.size() ? exog_names[j] : "x" + std::to_string(j));
25 28 for (usize t = first; t <= last; ++t) {
26 29 const Eigen::Index i = static_cast<Eigen::Index>(t - first); Eigen::Index c = 0; d.X(i, c++) = 1.0;
27 30 for (usize l : spec.lags) d.X(i, c++) = wmean(t, l);
28 − if (spec.harq) d.X(i, c++) = std::sqrt(std::max(rq[t], 0.0)) * rv[t];
31 + if (spec.harq) d.X(i, c++) = (std::sqrt(std::max(rq[t], 0.0)) - sqrt_rq_mean) * rv[t];
29 32 for (usize j = 0; j < nex; ++j) d.X(i, c++) = exog(static_cast<Eigen::Index>(t), static_cast<Eigen::Index>(j));
30 33 if (spec.target == HarTarget::single) d.y[i] = z[t + h]; else { f64 s = 0; for (usize j = 1; j <= h; ++j) s += spec.log ? rv[t + j] : z[t + j]; s /= static_cast<f64>(h); d.y[i] = spec.log ? std::log(s) : s; }
31 34 }
@@ -39,6 +42,7 @@ Estimate har_fit(std::span<const f64> rv, const HarSpec& spec, std::span<const f
39 42 auto r = ols(d.X, d.y, o); Estimate e = r.estimate; e.model = spec.model_key();
40 43 e.extra["horizon"] = spec.horizon; e.extra["target"] = spec.target == HarTarget::average ? "average" : "single"; e.extra["lags"] = spec.lags; e.extra["first_origin"] = d.first_t; e.extra["log"] = spec.log; e.extra["harq"] = spec.harq;
41 44 if (spec.log) { f64 s = 0; for (Eigen::Index i = 0; i < r.residuals.size(); ++i) s += std::exp(r.residuals[i]); e.extra["smearing"] = s / static_cast<f64>(r.residuals.size()); }
45 + if (spec.harq) e.extra["sqrt_rq_mean"] = d.sqrt_rq_mean;
42 46 return e;
43 47 }
44 48
@@ -46,7 +50,7 @@ f64 har_forecast(const Estimate& fit, std::span<const f64> rv, const HarSpec& sp
46 50 const usize T = rv.size(); const usize maxlag = *std::max_element(spec.lags.begin(), spec.lags.end()); RAID_REQUIRE(T >= maxlag, insufficient_samples, "har_forecast: not enough history");
47 51 const usize t = T - 1; f64 yhat = fit.coefficients[0]; usize c = 1;
48 52 for (usize l : spec.lags) { f64 s = 0; for (usize j = 0; j < l; ++j) s += spec.log ? std::log(rv[t - j]) : rv[t - j]; yhat += fit.coefficients[c++] * s / static_cast<f64>(l); }
49 − if (spec.harq) { RAID_REQUIRE(rq.size() == T, invalid_argument, "harq forecast needs RQ"); yhat += fit.coefficients[c++] * std::sqrt(std::max(rq[t], 0.0)) * rv[t]; }
53 + if (spec.harq) { RAID_REQUIRE(rq.size() == T, invalid_argument, "harq forecast needs RQ"); const f64 dm = fit.extra.value("sqrt_rq_mean", 0.0); yhat += fit.coefficients[c++] * (std::sqrt(std::max(rq[t], 0.0)) - dm) * rv[t]; }
50 54 for (Eigen::Index j = 0; j < exog_last.size(); ++j) yhat += fit.coefficients[c++] * exog_last[j];
51 55 return spec.log ? std::exp(yhat) : yhat;
52 56 }
added src/statistics/bootstrap.cpp +48 −0
@@ -0,0 +1,48 @@
1 +#include "raid/statistics/bootstrap.hpp"
2 +#include "raid/core/error.hpp"
3 +#include "raid/core/thread_pool.hpp"
4 +#include "raid/statistics/reductions.hpp"
5 +#include <algorithm>
6 +#include <chrono>
7 +#include <cmath>
8 +
9 +namespace raid::stats {
10 +
11 +namespace {
12 +f64 block_len(usize n, const BootstrapOptions& o) { return o.mean_block > 0 ? o.mean_block : std::max(1.0, std::round(std::cbrt(static_cast<f64>(n)))); }
13 +f64 quantile(std::vector<f64> v, f64 q) { v.erase(std::remove_if(v.begin(), v.end(), [](f64 x) { return !std::isfinite(x); }), v.end()); if (v.empty()) return std::numeric_limits<f64>::quiet_NaN(); std::sort(v.begin(), v.end()); const f64 pos = q * static_cast<f64>(v.size() - 1); const usize i = static_cast<usize>(pos); const f64 fr = pos - static_cast<f64>(i); return i + 1 < v.size() ? v[i] * (1 - fr) + v[i + 1] * fr : v[i]; }
14 +}
15 +
16 +std::vector<u32> bootstrap_indices(usize n, const BootstrapOptions& o, usize replica) {
17 + RAID_REQUIRE(n >= 2, insufficient_samples, "bootstrap: n >= 2");
18 + Rng rng(o.seed, 1000003ULL + replica); std::vector<u32> idx(n); const f64 b = block_len(n, o);
19 + if (o.scheme == BootstrapScheme::iid) { for (usize i = 0; i < n; ++i) idx[i] = static_cast<u32>(rng.below(n)); return idx; }
20 + usize i = 0;
21 + if (o.scheme == BootstrapScheme::circular_block) { const usize bl = std::max<usize>(1, static_cast<usize>(std::llround(b))); while (i < n) { const usize start = rng.below(n); for (usize j = 0; j < bl && i < n; ++j) idx[i++] = static_cast<u32>((start + j) % n); } return idx; }
22 + const f64 p = 1.0 / b; // stationary
23 + while (i < n) { const usize start = rng.below(n); const usize len = static_cast<usize>(rng.geometric(p)); for (usize j = 0; j < len && i < n; ++j) idx[i++] = static_cast<u32>((start + j) % n); }
24 + return idx;
25 +}
26 +
27 +BootstrapResult bootstrap(std::span<const f64> x, const std::function<f64(std::span<const f64>)>& stat, const BootstrapOptions& o) {
28 + const auto t0 = std::chrono::steady_clock::now(); BootstrapResult r; const usize n = x.size(); r.block_length = block_len(n, o); r.point = stat(x); r.statistics.assign(o.replicas, std::numeric_limits<f64>::quiet_NaN());
29 + ThreadPool pool(o.threads);
30 + pool.parallel_for(o.replicas, [&](usize b0, usize b1) { std::vector<f64> xs(n); for (usize b = b0; b < b1; ++b) { auto idx = bootstrap_indices(n, o, b); for (usize i = 0; i < n; ++i) xs[i] = x[idx[i]]; try { r.statistics[b] = stat(xs); } catch (...) { r.statistics[b] = std::numeric_limits<f64>::quiet_NaN(); } } });
31 + std::vector<f64> ok; for (f64 v : r.statistics) if (std::isfinite(v)) ok.push_back(v); else ++r.failures;
32 + if (ok.size() >= 2) { Welford w; for (f64 v : ok) w.add(v); r.se = std::sqrt(w.variance()); r.bias = w.mean - r.point; const f64 a = (1 - o.ci_level) / 2; r.ci_lo = quantile(ok, a); r.ci_hi = quantile(ok, 1 - a); }
33 + r.seconds = std::chrono::duration<f64>(std::chrono::steady_clock::now() - t0).count(); return r;
34 +}
35 +
36 +BootstrapVecResult bootstrap_rows(usize n, const std::function<std::vector<f64>(std::span<const u32>)>& stat, const BootstrapOptions& o) {
37 + const auto t0 = std::chrono::steady_clock::now(); BootstrapVecResult r; r.block_length = block_len(n, o);
38 + std::vector<u32> id(n); for (usize i = 0; i < n; ++i) id[i] = static_cast<u32>(i); r.point = stat(id); const usize k = r.point.size();
39 + r.statistics.assign(o.replicas, std::vector<f64>(k, std::numeric_limits<f64>::quiet_NaN())); ThreadPool pool(o.threads);
40 + pool.parallel_for(o.replicas, [&](usize b0, usize b1) { for (usize b = b0; b < b1; ++b) { auto idx = bootstrap_indices(n, o, b); try { auto s = stat(idx); if (s.size() == k) r.statistics[b] = s; } catch (...) {} } });
41 + r.se.assign(k, 0); r.ci_lo.assign(k, 0); r.ci_hi.assign(k, 0); const f64 a = (1 - o.ci_level) / 2;
42 + for (usize j = 0; j < k; ++j) { std::vector<f64> col; for (auto& s : r.statistics) if (std::isfinite(s[j])) col.push_back(s[j]); if (j == 0) r.failures = o.replicas - col.size(); if (col.size() >= 2) { Welford w; for (f64 v : col) w.add(v); r.se[j] = std::sqrt(w.variance()); r.ci_lo[j] = quantile(col, a); r.ci_hi[j] = quantile(col, 1 - a); } }
43 + r.seconds = std::chrono::duration<f64>(std::chrono::steady_clock::now() - t0).count(); return r;
44 +}
45 +
46 +BootstrapResult bootstrap_rv(std::span<const f64> r, const BootstrapOptions& o) { return bootstrap(r, [](std::span<const f64> x) { return sum_squares(x); }, o); }
47 +
48 +} // namespace raid::stats
added tests/reference/test_har_reference.cpp +37 −0
@@ -0,0 +1,37 @@
1 +#include <catch2/catch_test_macros.hpp>
2 +#include <catch2/matchers/catch_matchers_floating_point.hpp>
3 +#include <nlohmann/json.hpp>
4 +#include <fstream>
5 +#include "raid/estimators/har.hpp"
6 +#include "raid/core/rng.hpp"
7 +using namespace raid; using json = nlohmann::json; using Catch::Matchers::WithinRel; using Catch::Matchers::WithinAbs;
8 +
9 +static void load_rv(std::vector<double>& rv, std::vector<double>& rq) { std::ifstream f(std::string(RAID_SOURCE_DIR) + "/datasets/fixtures/har_rv.csv"); REQUIRE(f.good()); std::string line; std::getline(f, line); while (std::getline(f, line)) { auto c = line.find(','); rv.push_back(std::stod(line.substr(0, c))); rq.push_back(std::stod(line.substr(c + 1))); } }
10 +
11 +TEST_CASE("HAR-RV / log-HAR / HARQ with HAC match statsmodels on the fixture", "[reference][har]") {
12 + std::ifstream f(std::string(RAID_SOURCE_DIR) + "/datasets/fixtures/reference_values.json"); json ref; f >> ref; auto har = ref["har"];
13 + std::vector<double> rv, rq; load_rv(rv, rq);
14 + struct C { const char* key; int h; bool log; bool harq; }; const C cases[] = {{"h1", 1, false, false}, {"h5", 5, false, false}, {"h22", 22, false, false}, {"log_h1", 1, true, false}, {"harq_h1", 1, false, true}};
15 + for (auto& c : cases) {
16 + est::HarSpec s; s.horizon = c.h; s.log = c.log; s.harq = c.harq; auto e = est::har_fit(rv, s, c.harq ? std::span<const double>(rq) : std::span<const double>());
17 + INFO(c.key); REQUIRE(e.ok()); auto r = har[c.key]; REQUIRE(e.n_obs == r["n"].get<usize>());
18 + for (usize j = 0; j < e.coefficients.size(); ++j) { CHECK_THAT(e.coefficients[j], WithinRel(r["params"][j].get<double>(), 1e-9)); CHECK_THAT(e.inference->std_errors[j], WithinRel(r["hac_bse"][j].get<double>(), 1e-8)); }
19 + CHECK(e.inference->covariance_type == "hac_bartlett(" + std::to_string(r["hac_lags"].get<int>()) + ")"); CHECK_THAT(e.loss, WithinRel(r["ssr"].get<double>(), 1e-9));
20 + }
21 +}
22 +TEST_CASE("HAR batched (sufficient statistics, auto backend) equals per-series QR fits", "[har]") {
23 + std::vector<double> rv, rq; load_rv(rv, rq); const usize S = 6; std::vector<double> cat; std::vector<i64> off = {0};
24 + Rng r(5); for (usize s = 0; s < S; ++s) { for (double v : rv) cat.push_back(v * (1 + 0.1 * r.normal()) * (s + 1)); off.push_back(static_cast<i64>(cat.size())); }
25 + est::HarSpec spec; spec.horizon = 1; spec.cov.type = stats::CovType::classical;
26 + for (auto bk : {Backend::cpu, Backend::automatic}) { ExecutionPlan p; p.backend = bk; auto b = est::har_batch(cat, off, spec, p); REQUIRE(b.fits.size() == S);
27 + for (usize s = 0; s < S; ++s) { auto single = est::har_fit(std::span<const double>(cat).subspan(static_cast<usize>(off[s]), static_cast<usize>(off[s + 1] - off[s])), spec); REQUIRE(b.fits[s].ok());
28 + for (usize j = 0; j < 4; ++j) { INFO("backend " << to_string(bk) << " s=" << s << " j=" << j); CHECK_THAT(b.fits[s].coefficients[j], WithinAbs(single.coefficients[j], bk == Backend::cpu ? 1e-9 : 1e-4 * std::max(1.0, std::abs(single.coefficients[j])))); } } }
29 +}
30 +TEST_CASE("HAR rolling forecasts are causal and losses are finite", "[har]") {
31 + std::vector<double> rv, rq; load_rv(rv, rq); est::HarSpec s; s.horizon = 5; auto roll = est::har_rolling(rv, s, 500, 10);
32 + CHECK(roll.n_fits > 50); for (usize i = 0; i < roll.origin.size(); ++i) { CHECK(roll.forecast[i] > 0); double a = 0; for (int j = 1; j <= 5; ++j) a += rv[roll.origin[i] + j]; CHECK_THAT(roll.actual[i], WithinRel(a / 5.0, 1e-12)); }
33 + auto l = est::forecast_loss(roll.actual, roll.forecast); CHECK(l.n == roll.actual.size()); CHECK(std::isfinite(l.qlike)); CHECK(l.qlike >= 0);
34 + // the forecast at origin t uses only rv[0..t]: refitting with the future perturbed must not change it
35 + std::vector<double> rv2 = rv; for (usize t = roll.origin[0] + 1; t < rv2.size(); ++t) rv2[t] *= 3.0; auto roll2 = est::har_rolling(rv2, s, 500, 10); CHECK_THAT(roll2.forecast[0], WithinRel(roll.forecast[0], 1e-12));
36 + est::HarSpec lg; lg.log = true; auto e = est::har_fit(rv, lg); CHECK(e.extra.contains("smearing")); CHECK(est::har_forecast(e, rv, lg) > 0);
37 +}
added tests/reference/test_r_reference.cpp +55 −0
@@ -0,0 +1,55 @@
1 +// RAID vs R (highfrequency 1.0.3, rugarch 1.5.6) on the committed fixtures — values from scripts/reference_r.R.
2 +#include <catch2/catch_test_macros.hpp>
3 +#include <catch2/matchers/catch_matchers_floating_point.hpp>
4 +#include <nlohmann/json.hpp>
5 +#include <fstream>
6 +#include "raid/data/io.hpp"
7 +#include "raid/data/returns.hpp"
8 +#include "raid/estimators/realized.hpp"
9 +#include "raid/estimators/har.hpp"
10 +#include "raid/models/garch.hpp"
11 +using namespace raid; using json = nlohmann::json; using Catch::Matchers::WithinRel; using Catch::Matchers::WithinAbs;
12 +
13 +static json load() { std::ifstream f(std::string(RAID_SOURCE_DIR) + "/datasets/fixtures/reference_r.json"); REQUIRE(f.good()); json j; f >> j; return j; }
14 +
15 +TEST_CASE("Realized measures match highfrequency (rCov, rBPCov, rSVar, rQuar)", "[reference][r][realized]") {
16 + auto R = load(); auto bars = data::read_bars_csv(std::string(RAID_SOURCE_DIR) + "/datasets/fixtures/synthetic_bars_1m.csv"); MarketCalendar cal;
17 + for (auto& e : R["realized"]) {
18 + const std::string sym = e["symbol"], sess = e["session"]; auto b = bars.at(sym); b.normalize(); auto reg = b.filter_session(cal, SessionPolicy::regular); auto ir = data::intraday_returns(reg);
19 + usize k = 0; while (k < ir.session_dates.size() && ir.session_dates[k].iso() != sess) ++k; REQUIRE(k < ir.session_dates.size());
20 + est::RealizedOptions o; o.plan.backend = Backend::cpu; o.bpv_finite_sample = false; auto m = est::realized_measures(ir, o); // highfrequency's rBPCov with makeReturns=FALSE applies no M/(M−1) factor
21 + INFO(sym << " " << sess); CHECK(m.n_returns[k] == e["n_returns"].get<usize>());
22 + CHECK_THAT(m.rv[k], WithinRel(e["rv"].get<double>(), 1e-10)); CHECK_THAT(m.bpv[k], WithinRel(e["bpv"].get<double>(), 1e-10));
23 + CHECK_THAT(m.rsv_neg[k], WithinRel(e["rsv"][0].get<double>(), 1e-10)); CHECK_THAT(m.rsv_pos[k], WithinRel(e["rsv"][1].get<double>(), 1e-10));
24 + // highfrequency::rQuar uses N = (number of returns + 1)/3 (number of prices); RAID uses M/3 (BPQ 2016, BNS 2002): convert
25 + const double M = static_cast<double>(m.n_returns[k]); CHECK_THAT(m.rq[k] * (M + 1.0) / M, WithinRel(e["rq"].get<double>(), 1e-10));
26 + }
27 +}
28 +TEST_CASE("HAR-RV coefficients match highfrequency::HARmodel (h = 1)", "[reference][r][har]") {
29 + auto R = load(); std::vector<double> rv, rq; { std::ifstream f(std::string(RAID_SOURCE_DIR) + "/datasets/fixtures/har_rv.csv"); std::string line; std::getline(f, line); while (std::getline(f, line)) { auto c = line.find(','); rv.push_back(std::stod(line.substr(0, c))); rq.push_back(std::stod(line.substr(c + 1))); } }
30 + est::HarSpec s; s.horizon = 1; auto e = est::har_fit(rv, s); auto h1 = R["har_h1"];
31 + CHECK(e.n_obs == h1["n"].get<usize>()); for (int j = 0; j < 4; ++j) CHECK_THAT(e.coefficients[j], WithinRel(h1["coef"][j].get<double>(), 1e-8)); CHECK_THAT(e.loss, WithinRel(h1["ssr"].get<double>(), 1e-8));
32 + // h = 5: highfrequency uses the h-day *average* RV as the dependent variable (same as our HarTarget::average)
33 + s.horizon = 5; auto e5 = est::har_fit(rv, s); auto h5 = R["har_h5"]; INFO("n ours " << e5.n_obs << " R " << h5["n"].get<usize>());
34 + if (e5.n_obs == h5["n"].get<usize>()) { for (int j = 0; j < 4; ++j) CHECK_THAT(e5.coefficients[j], WithinRel(h5["coef"][j].get<double>(), 1e-6)); }
35 + else WARN("HARmodel h=5 sample size differs (" + std::to_string(h5["n"].get<usize>()) + " vs " + std::to_string(e5.n_obs) + "): alignment convention documented in the registry");
36 + // HARQ: highfrequency's RQ1 term is sqrt(RQ_t) * RV_t (BPQ 2016); coefficient scale must agree
37 + est::HarSpec q; q.harq = true; auto eq = est::har_fit(rv, q, rq); auto hq = R["harq_h1"]; INFO("harq n ours " << eq.n_obs << " R " << hq["n"].get<usize>());
38 + if (eq.n_obs == hq["n"].get<usize>()) for (int j = 0; j < 5; ++j) CHECK_THAT(eq.coefficients[j], WithinRel(hq["coef"][j].get<double>(), 1e-6));
39 +}
40 +TEST_CASE("GARCH family matches rugarch within tolerance (parameter mapping documented)", "[reference][r][garch]") {
41 + auto R = load(); std::vector<double> r; { std::ifstream f(std::string(RAID_SOURCE_DIR) + "/datasets/fixtures/garch_returns.csv"); std::string line; std::getline(f, line); while (std::getline(f, line)) r.push_back(std::stod(line)); }
42 + using namespace models;
43 + auto check = [&](const char* key, GarchModel m, GarchDist d, std::vector<std::pair<int, const char*>> map) {
44 + GarchFitOptions o; o.model = m; o.dist = d; auto fit = garch_fit(r, o); INFO(key); REQUIRE(fit.ok()); auto g = R["garch"][key];
45 + // rugarch initialises σ² with the sample variance (as RAID) → log-likelihoods should agree to 1e-4 relative
46 + CHECK_THAT(-fit.loss, WithinRel(g["loglik"].get<double>(), 2e-4));
47 + for (auto& [j, name] : map) { const double ours = fit.coefficients[static_cast<usize>(j)], theirs = g["coef"][name].get<double>(); INFO(name << " ours " << ours << " rugarch " << theirs); CHECK((std::abs(ours - theirs) <= 0.05 * std::abs(theirs) + 0.01)); }
48 + return fit; };
49 + check("sGARCH.norm", GarchModel::garch, GarchDist::gaussian, {{0, "mu"}, {1, "omega"}, {2, "alpha1"}, {3, "beta1"}});
50 + check("gjrGARCH.norm", GarchModel::gjr, GarchDist::gaussian, {{0, "mu"}, {1, "omega"}, {2, "alpha1"}, {3, "gamma1"}, {4, "beta1"}});
51 + // rugarch eGARCH: log σ² = ω + α z + γ(|z| − E|z|) + β log σ² ⇒ rugarch alpha1 = RAID gamma (sign), rugarch gamma1 = RAID alpha (magnitude)
52 + check("eGARCH.norm", GarchModel::egarch, GarchDist::gaussian, {{0, "mu"}, {1, "omega"}, {2, "gamma1"}, {3, "alpha1"}, {4, "beta1"}});
53 + auto t = check("sGARCH.std", GarchModel::garch, GarchDist::student_t, {{0, "mu"}, {1, "omega"}, {2, "alpha1"}, {3, "beta1"}});
54 + CHECK(t.coefficients.back() > 30.0); // rugarch shape → 100 (its upper bound); RAID ν → its own upper bound (500): Gaussian data, ν unidentified
55 +}
modified tests/reference/test_reference_values.cpp +2 −2
@@ -33,7 +33,7 @@ TEST_CASE("OLS and robust standard errors match statsmodels", "[reference][ols]"
33 33
34 34 TEST_CASE("XNYS calendar matches exchange_calendars", "[reference][calendar]") {
35 35 auto ref = load_ref()["xnys"]; if (ref.contains("error")) { WARN("exchange_calendars unavailable when fixtures were generated: " + ref["error"].get<std::string>()); return; }
36 − MarketCalendar cal; std::set<std::string> ours; for (auto d : cal.sessions(Date::from_ymd(2000, 1, 1), Date::from_ymd(2026, 12, 31))) ours.insert(d.iso());
36 + MarketCalendar cal; std::set<std::string> ours; for (auto d : cal.sessions(Date::from_ymd(2000, 1, 3), Date::from_ymd(2026, 12, 31))) ours.insert(d.iso());
37 37 CHECK(ours.size() == ref["n_sessions_2000_2026"].get<usize>());
38 38 std::set<std::string> theirs2024; for (auto& s : ref["sessions_2024"]) theirs2024.insert(s.get<std::string>());
39 39 std::set<std::string> ours2024; for (auto d : cal.sessions(Date::from_ymd(2024, 1, 1), Date::from_ymd(2024, 12, 31))) ours2024.insert(d.iso());
@@ -41,7 +41,7 @@ TEST_CASE("XNYS calendar matches exchange_calendars", "[reference][calendar]") {
41 41 usize mismatches = 0; for (auto& h : ref["holidays_2000_2026"]) if (ours.count(h.get<std::string>())) { ++mismatches; UNSCOPED_INFO("RAID trades on " << h.get<std::string>() << " but exchange_calendars does not"); }
42 42 CHECK(mismatches == 0);
43 43 if (!ref["early_closes_2000_2026"].is_null()) { usize bad = 0; for (auto& e : ref["early_closes_2000_2026"]) { Date d = date_from_iso(e.get<std::string>()); if (!cal.is_early_close(d)) { ++bad; UNSCOPED_INFO("missing early close " << e.get<std::string>()); } } CHECK(bad == 0);
44 − usize extra = 0; for (auto d : cal.sessions(Date::from_ymd(2000, 1, 1), Date::from_ymd(2026, 12, 31))) if (cal.is_early_close(d)) { bool found = false; for (auto& e : ref["early_closes_2000_2026"]) if (e.get<std::string>() == d.iso()) found = true; if (!found) { ++extra; UNSCOPED_INFO("extra early close " << d.iso()); } } CHECK(extra == 0); }
44 + usize extra = 0; for (auto d : cal.sessions(Date::from_ymd(2000, 1, 3), Date::from_ymd(2026, 12, 31))) if (cal.is_early_close(d)) { bool found = false; for (auto& e : ref["early_closes_2000_2026"]) if (e.get<std::string>() == d.iso()) found = true; if (!found) { ++extra; UNSCOPED_INFO("extra early close " << d.iso()); } } CHECK(extra == 0); }
45 45 }
46 46
47 47 TEST_CASE("Realized measures match the fixture truth (numpy)", "[reference][realized]") {
added tests/simulation/test_monte_carlo.cpp +57 −0
@@ -0,0 +1,57 @@
1 +// Monte Carlo evaluation (charter §7): bias, RMSE, empirical coverage of 95 % intervals, convergence/failure rates.
2 +// Sizes are kept small enough for CI (seconds); the full study with more replications runs in E5 (Phase 6).
3 +#include <catch2/catch_test_macros.hpp>
4 +#include <catch2/matchers/catch_matchers_floating_point.hpp>
5 +#include "raid/models/garch.hpp"
6 +#include "raid/estimators/har.hpp"
7 +#include "raid/estimators/ols.hpp"
8 +#include "raid/estimators/realized.hpp"
9 +#include "raid/statistics/bootstrap.hpp"
10 +#include "raid/statistics/reductions.hpp"
11 +#include "raid/core/rng.hpp"
12 +#include "raid/core/thread_pool.hpp"
13 +#include <cmath>
14 +#include <atomic>
15 +using namespace raid; using Catch::Matchers::WithinAbs;
16 +
17 +TEST_CASE("GARCH(1,1) QML: bias, RMSE, coverage of QMLE 95% intervals (R = 120, n = 2000)", "[simulation][garch]") {
18 + const int R = 120; const usize n = 2000; const double mu = 0.0, omega = 0.02, alpha = 0.08, beta = 0.90;
19 + std::vector<std::vector<double>> est(R, std::vector<double>(4)); std::vector<std::vector<double>> se(R, std::vector<double>(4)); std::atomic<int> failures{0};
20 + ThreadPool::global().parallel_for(R, [&](usize a, usize b) { for (usize rep = a; rep < b; ++rep) { Rng rng(777, rep); std::vector<double> r(n); double s2 = omega / (1 - alpha - beta), e = 0;
21 + for (usize t = 0; t < n; ++t) { s2 = omega + alpha * e * e + beta * s2; e = std::sqrt(s2) * rng.normal(); r[t] = mu + e; }
22 + models::GarchFitOptions o; auto f = models::garch_fit(r, o); if (!f.ok()) { ++failures; est[rep][0] = NAN; continue; } for (int j = 0; j < 4; ++j) { est[rep][j] = f.coefficients[j]; se[rep][j] = f.inference->std_errors[j]; } } });
23 + const double truth[4] = {mu, omega, alpha, beta}; const char* names[4] = {"mu", "omega", "alpha", "beta"};
24 + int ok = 0; for (int rep = 0; rep < R; ++rep) if (std::isfinite(est[rep][0])) ++ok;
25 + CHECK(failures.load() <= R / 20);
26 + for (int j = 0; j < 4; ++j) { double bias = 0, mse = 0; int cover = 0, cnt = 0; for (int rep = 0; rep < R; ++rep) { if (!std::isfinite(est[rep][0])) continue; const double d = est[rep][j] - truth[j]; bias += d; mse += d * d; if (std::abs(d) <= 1.96 * se[rep][j]) ++cover; ++cnt; }
27 + bias /= cnt; const double rmse = std::sqrt(mse / cnt), cov = static_cast<double>(cover) / cnt;
28 + std::fprintf(stderr, "[mc] garch %-5s bias=%+.4f rmse=%.4f coverage95=%.3f (n=%zu, R=%d, failures=%d)\n", names[j], bias, rmse, cov, n, R, failures.load());
29 + INFO(names[j]); CHECK(std::abs(bias) < 2.5 * rmse / std::sqrt(static_cast<double>(cnt)) + 0.02); // no bias beyond MC noise + 0.02 (β is known to be slightly downward biased in finite samples)
30 + CHECK(cov >= 0.85); CHECK(cov <= 0.995); }
31 +}
32 +TEST_CASE("HAR-RV with HAC: coverage of 95% intervals under an AR(1) log-RV DGP with overlapping h = 5 targets (R = 200)", "[simulation][har]") {
33 + const int R = 200; const usize T = 1200;
34 + // DGP: log RV_t = c + φ log RV_{t-1} + σ ε_t. The HAR population coefficients are not analytical for an AR(1) in logs;
35 + // we instead check coverage of the *pseudo-true* value obtained from one very long sample (T = 200 000), which is the
36 + // relevant target for inference on a misspecified-but-well-defined projection.
37 + auto simulate = [](usize n, u64 seed) { Rng g(4242, seed); std::vector<double> rv(n); double lv = std::log(1e-4); for (usize t = 0; t < n; ++t) { lv = 0.3 * std::log(1e-4) + 0.7 * lv + 0.4 * g.normal(); rv[t] = std::exp(lv); } return rv; };
38 + est::HarSpec spec; spec.horizon = 5; auto big = simulate(200000, 999); auto pseudo = est::har_fit(big, spec);
39 + std::vector<int> cover(4, 0); std::atomic<int> cnt{0}; std::mutex m;
40 + ThreadPool::global().parallel_for(R, [&](usize a, usize b) { for (usize rep = a; rep < b; ++rep) { auto rv = simulate(T, rep); auto f = est::har_fit(rv, spec); std::lock_guard<std::mutex> lk(m); ++cnt; for (int j = 0; j < 4; ++j) if (std::abs(f.coefficients[j] - pseudo.coefficients[j]) <= 1.96 * f.inference->std_errors[j]) ++cover[j]; } });
41 + for (int j = 0; j < 4; ++j) { const double c = static_cast<double>(cover[j]) / cnt; std::fprintf(stderr, "[mc] har h=5 coef %d coverage95(HAC)=%.3f (T=%zu, R=%d)\n", j, c, T, R); CHECK(c >= 0.85); }
42 +}
43 +TEST_CASE("Realized variance converges to integrated variance as M grows; semivariances sum to RV", "[simulation][realized]") {
44 + const double iv = 2.5e-4; for (usize M : {39ul, 390ul, 3900ul}) { double rmse = 0; const int R = 200; for (int rep = 0; rep < R; ++rep) { Rng g(5, static_cast<u64>(M) * 1000 + rep); std::vector<double> r(M); for (auto& v : r) v = std::sqrt(iv / M) * g.normal(); std::vector<i64> off = {0, static_cast<i64>(M)}; est::RealizedOptions o; o.plan.backend = Backend::cpu; auto m = est::realized_measures_batch(backend::Batch{r, off}, o); rmse += (m.rv[0] - iv) * (m.rv[0] - iv); CHECK_THAT(m.rsv_neg[0] + m.rsv_pos[0], WithinAbs(m.rv[0], 1e-18)); }
45 + rmse = std::sqrt(rmse / R); const double theory = iv * std::sqrt(2.0 / M); std::fprintf(stderr, "[mc] RV rmse M=%zu: %.3e (theory √(2/M)·IV = %.3e)\n", M, rmse, theory); CHECK_THAT(rmse, WithinAbs(theory, 0.3 * theory)); }
46 +}
47 +TEST_CASE("Numerical gradient of the GARCH NLL is stable across step sizes (finite-difference check)", "[simulation][garch]") {
48 + Rng g(3); const usize n = 1500; std::vector<double> r(n); double s2 = 0.2, e = 0; for (usize t = 0; t < n; ++t) { s2 = 0.02 + 0.08 * e * e + 0.9 * s2; e = std::sqrt(s2) * g.normal(); r[t] = e; }
49 + std::vector<double> th = {0.0, 0.02, 0.08, 0.9}; auto f = [&](const std::vector<double>& t) { return models::garch_nll(r, t, models::GarchModel::garch, models::GarchDist::gaussian); };
50 + for (usize j = 0; j < 4; ++j) { double gs[3]; int i = 0; for (double h : {1e-4, 1e-5, 1e-6}) { auto a = th, b = th; a[j] += h; b[j] -= h; gs[i++] = (f(a) - f(b)) / (2 * h); } INFO("param " << j << " grads " << gs[0] << " " << gs[1] << " " << gs[2]); CHECK(std::abs(gs[0] - gs[1]) <= 1e-3 * std::max(1.0, std::abs(gs[1]))); CHECK(std::abs(gs[1] - gs[2]) <= 1e-2 * std::max(1.0, std::abs(gs[1]))); }
51 +}
52 +TEST_CASE("Stationary bootstrap CI for the mean of an AR(1): empirical coverage (R = 100)", "[simulation][bootstrap]") {
53 + const int R = 100; std::atomic<int> cover{0};
54 + ThreadPool::global().parallel_for(R, [&](usize a, usize b) { for (usize rep = a; rep < b; ++rep) { Rng g(12, rep); const usize n = 800; std::vector<double> x(n); x[0] = 0; for (usize t = 1; t < n; ++t) x[t] = 0.5 * x[t - 1] + g.normal();
55 + stats::BootstrapOptions o; o.replicas = 299; o.mean_block = 10; o.seed = 100 + rep; o.threads = 1; auto bs = stats::bootstrap(x, [](std::span<const double> v) { return stats::mean<double>(v); }, o); if (bs.ci_lo <= 0.0 && 0.0 <= bs.ci_hi) ++cover; } });
56 + const double c = cover.load() / static_cast<double>(R); std::fprintf(stderr, "[mc] stationary bootstrap mean AR(1) coverage95=%.2f\n", c); CHECK(c >= 0.82);
57 +}
added tests/unit/test_bootstrap.cpp +32 −0
@@ -0,0 +1,32 @@
1 +#include <catch2/catch_test_macros.hpp>
2 +#include <catch2/matchers/catch_matchers_floating_point.hpp>
3 +#include "raid/statistics/bootstrap.hpp"
4 +#include "raid/statistics/reductions.hpp"
5 +#include "raid/core/rng.hpp"
6 +#include <cmath>
7 +#include <set>
8 +using namespace raid; using namespace raid::stats; using Catch::Matchers::WithinAbs;
9 +
10 +TEST_CASE("Bootstrap indices: valid, deterministic per (seed, replica), block structure", "[bootstrap]") {
11 + BootstrapOptions o; o.scheme = BootstrapScheme::circular_block; o.mean_block = 5; auto a = bootstrap_indices(100, o, 3), b = bootstrap_indices(100, o, 3), c = bootstrap_indices(100, o, 4);
12 + CHECK(a == b); CHECK(a != c); for (u32 i : a) CHECK(i < 100);
13 + usize runs = 0; for (usize i = 1; i < a.size(); ++i) if (a[i] != (a[i - 1] + 1) % 100) ++runs; CHECK(runs <= 21); // ≤ 20 blocks + wrap
14 + o.scheme = BootstrapScheme::stationary; o.mean_block = 10; auto s = bootstrap_indices(10000, o, 0); usize starts = 1; for (usize i = 1; i < s.size(); ++i) if (s[i] != (s[i - 1] + 1) % 10000) ++starts;
15 + CHECK_THAT(10000.0 / static_cast<double>(starts), WithinAbs(10.0, 2.5)); // mean block length ≈ 10
16 +}
17 +TEST_CASE("Block bootstrap SE of the mean of an AR(1) exceeds the iid SE", "[bootstrap]") {
18 + Rng r(77); const usize n = 2000; std::vector<f64> x(n); x[0] = 0; for (usize t = 1; t < n; ++t) x[t] = 0.7 * x[t - 1] + r.normal();
19 + auto m = [](std::span<const f64> v) { return mean(v); };
20 + BootstrapOptions bo; bo.replicas = 499; bo.scheme = BootstrapScheme::stationary; bo.mean_block = 20; auto blk = bootstrap(x, m, bo);
21 + bo.scheme = BootstrapScheme::iid; auto iid = bootstrap(x, m, bo);
22 + const double true_se = std::sqrt((1.0 / (1 - 0.49)) / (1 - 0.7) / (1 - 0.7) / n); // long-run variance of AR(1): σ²/(1−φ)² with σ²_x = 1/(1−φ²)
23 + CHECK(blk.se > 1.6 * iid.se); CHECK_THAT(blk.se, WithinAbs(true_se, 0.35 * true_se)); CHECK(blk.failures == 0); CHECK(blk.ci_lo < blk.point); CHECK(blk.ci_hi > blk.point);
24 +}
25 +TEST_CASE("bootstrap_rows resamples (y,X) jointly and is reproducible", "[bootstrap]") {
26 + BootstrapOptions o; o.replicas = 50; auto st = [](std::span<const u32> idx) { double s = 0; for (u32 i : idx) s += i; return std::vector<f64>{s / static_cast<double>(idx.size()), static_cast<double>(idx[0])}; };
27 + auto a = bootstrap_rows(500, st, o), b = bootstrap_rows(500, st, o); CHECK(a.statistics == b.statistics); CHECK(a.point[0] == 249.5); CHECK(a.se[0] > 0);
28 +}
29 +TEST_CASE("bootstrap_rv on iid returns brackets the true integrated variance", "[bootstrap]") {
30 + Rng r(5); std::vector<f64> ret(390); for (auto& v : ret) v = 1e-3 * r.normal(); BootstrapOptions o; o.replicas = 399; o.mean_block = 5; auto b = bootstrap_rv(ret, o);
31 + const double iv = 390 * 1e-6; CHECK(b.ci_lo < iv); CHECK(b.ci_hi > iv); CHECK_THAT(b.point, WithinAbs(sum_squares(std::span<const f64>(ret)), 1e-18));
32 +}
33
Menu

Theme