diff --git a/CHANGELOG.md b/CHANGELOG.md index a0b8b3e7..6f8af820 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 deviation (~0.3% unbalanced); TWFE `hetero` has no public unclustered surface (auto-cluster-at-unit convention), so its scenario locks iid — which also pins the D4 full-K rescale on an UNBALANCED panel for the first time. +- **`ImputationDiD` covariate-path R parity anchor.** The no-covariate staggered panel was + the only `didimputation` R anchor; the covariate branch (first-stage imputation model + `y ~ x | unit + time` on the untreated sample, R `first_stage = ~ 0 + x | unit + time` + == diff-diff `covariates=["x"]`) now has its own golden: a time-varying, unit-correlated + covariate panel appended to `generate_didimputation_golden.R` (the base scenario's RNG + draws precede the new block, so the committed base panel and golden values reproduce + byte-identically) and a `TestImputationDiDCovariateParityR` class pinning overall + + per-horizon event-study ATT and SE. Observed agreement on the reference platform: + SE ~2e-10 (the covariate-augmented untreated `v_it` projection + clustering machinery), + ATT ~2e-7; asserted at abs=1e-6/1e-7 for cross-platform robustness. - **`CallawaySantAnna` ipw R-parity yardsticks folded into the golden fixture + no-covariate ipw structural-parity decision recorded.** `csdid_golden_values.json` regenerated (R 4.5.2, did 2.5.1, DRDID 1.3.0): all pre-existing data and result blocks reproduced byte-identically; diff --git a/TODO.md b/TODO.md index a47cacd3..e6b390e4 100644 --- a/TODO.md +++ b/TODO.md @@ -62,7 +62,6 @@ generic sparse-FE, QR+SVD rank-detection redundancy, `check_finite` bypass — m |-------|----------|--------|--------|----------| | SE-audit CI-lock — remaining "fiddly bits" after the second coverage batch landed (that batch pinned C2 `dof_hc2_bm`/`dof_per_coef` via CI-inversion, C3 LOO `df`, C4 estimatr HC1/CR1 intercept SE, C5 Yatchew `p`/`sigma2_lin`/`sigma2_diff`, and the G2 fixest cluster-SE band). Still deferred, each needing a golden regeneration, new computation, or a documented-deviation call — **(a) G2 hetero/cluster is DONE (2026-07-07)**: the unbalanced/heteroskedastic-DGP regen landed, the DiD-path hetero AND cluster CR1 SEs are machine-precision-locked (the plain-OLS CR1 matches fixest exactly — the DOF-convention deviation is absorbed-FE-only), and the TWFE cluster band-pin is retained for the documented non-nested-FE ssc deviation (tracked under "Needs external reference"); TWFE has no public unclustered-hetero surface (auto-cluster convention). Remaining: **(b) PlaceboTests `boundary_gap`** — a permutation randomization-inference margin NOT computed anywhere in code (a new feature + result field, not a coverage lock); **(c) StackedDiD intercept SEs** (`se_cr1/cr2_intercept`, C1) — MEASURED to diverge ~0.3% from R: a nuisance-parameter reference-cell/parameterization gap, NOT machine-precision lockable (the event-study interaction SEs already match ~2e-13; surfacing it would add an unasserted, R-divergent public field); **(d) estimatr `classical` intercept SE** — same documented `O(1/n)` projection/DOF deviation as the slope (reference-only, excluded from parity). Plus the tolerance-tightenings C6-C8. | `benchmarks/R/generate_fixest_did_twfe_golden.R`, `tests/test_fixest_did_twfe_parity.py`, `tests/test_methodology_stacked_did.py`, `tests/test_methodology_placebo.py` | SE-audit | Mid | Low | | Render `docs/methodology/REPORTING.md` and `REGISTRY.md` as in-site Sphinx pages so cross-refs can use `:doc:` instead of off-site `blob/main` URLs (stable-docs readers can otherwise land on a different revision than their package version). Two paths: (a) add `myst-parser` to `conf.py` + docs extras and link with `:doc:`, or (b) convert both to `.rst`. **Note:** REGISTRY.md is ~4.5k lines of LaTeX-heavy markdown — high risk under the `-W` (warnings-as-errors) Sphinx build; budget multiple rounds. | `docs/conf.py`, `docs/api/business_report.rst`, `docs/api/diagnostic_report.rst`, tutorials 18 & 19 | follow-up | Mid | Low | -| `ImputationDiD` covariate-path variance lacks a dedicated parity anchor — only the no-covariate staggered panel is R-parity'd, though the covariate path shares the same validated projection code. Add a small dense-design **hand-calc** for the covariate projection (no external tooling), or a covariate (time-varying X) R `didimputation` golden asserting overall/ES SE parity (the golden variant needs local R). | `tests/test_methodology_imputation.py`, `benchmarks/R/generate_didimputation_golden.R` | imputation-validation | Mid | Low | | Add true half-sample BRR replicate-weight regressions per estimator family (current tests use Fay-like 0.5/1.5 perturbations; `test_survey_phase6.py` covers true BRR at the helper level). | `tests/test_replicate_weight_expansion.py` | #253 | Mid | Low | | Port the CI `` extraction into the reviewer-eval harness so `docs/tutorials/*.ipynb` cases (currently guarded out of `verify-corpus`/`run`) can be reviewed with CI-equivalent context. | `tools/reviewer-eval/adapters/ci_prompt.py` | local-review | Mid | Low | diff --git a/benchmarks/R/generate_didimputation_golden.R b/benchmarks/R/generate_didimputation_golden.R index 12bda55d..ce24701f 100644 --- a/benchmarks/R/generate_didimputation_golden.R +++ b/benchmarks/R/generate_didimputation_golden.R @@ -111,3 +111,68 @@ golden <- list( golden_path <- file.path("benchmarks", "data", "didimputation_golden.json") write_json(golden, golden_path, auto_unbox = TRUE, pretty = TRUE, digits = 12) message(sprintf("Wrote golden: %s", golden_path)) + +# ---- Covariate scenario (time-varying X in the first stage) ---- +# Appended AFTER the base scenario so the base panel's RNG draws (and the +# committed base CSV/JSON values) are unchanged on regeneration. Validates +# the covariate branch of the untreated v_it projection: the first-stage +# imputation model becomes y ~ x | unit + time on the untreated sample +# (fixest-style first_stage formula), matching diff-diff's +# ImputationDiD(covariates=["x"]). +rows_x <- list() +uid <- 0L +for (g in cohorts) { + for (j in seq_len(n_per_cohort)) { + c_i <- rnorm(1) + for (t in seq_len(n_periods)) { + beta_t <- 0.5 * t + x_it <- 0.4 * c_i + 0.2 * t + rnorm(1) # time-varying, unit-correlated + u <- 0.2 * rnorm(1) + treated <- (g > 0L) && (t >= g) + eff <- if (treated) tau_h(t - g) else 0.0 + y <- c_i + beta_t + 0.7 * x_it + eff + u + rows_x[[length(rows_x) + 1L]] <- list( + unit = uid, time = t, first_treat = g, y = y, x = x_it + ) + } + uid <- uid + 1L + } +} +panel_x <- rbindlist(rows_x) +panel_x[, unit := as.integer(unit)] +panel_x[, time := as.integer(time)] +panel_x[, first_treat := as.integer(first_treat)] + +panel_x_path <- file.path("benchmarks", "data", "didimputation_covariate_panel.csv") +fwrite(panel_x, panel_x_path) +message(sprintf("Wrote covariate panel: %s (%d rows)", panel_x_path, nrow(panel_x))) + +overall_x <- did_imputation( + data = panel_x, yname = "y", gname = "first_treat", + tname = "time", idname = "unit", cluster_var = "unit", + first_stage = ~ 0 + x | unit + time +) +overall_x_att <- as.numeric(overall_x$estimate[1]) +overall_x_se <- as.numeric(overall_x$std.error[1]) +message(sprintf("Covariate overall ATT = %.8f (SE %.8f)", overall_x_att, overall_x_se)) + +es_x <- did_imputation( + data = panel_x, yname = "y", gname = "first_treat", + tname = "time", idname = "unit", horizon = TRUE, cluster_var = "unit", + first_stage = ~ 0 + x | unit + time +) +es_x_h <- as.integer(gsub("tau", "", es_x$term)) +ord_x <- order(es_x_h) +es_x_h <- es_x_h[ord_x] +es_x_att <- as.numeric(es_x$estimate)[ord_x] +es_x_se <- as.numeric(es_x$std.error)[ord_x] + +golden$covariate <- list( + panel = "didimputation_covariate_panel.csv", + first_stage = "~ 0 + x | unit + time", + overall = list(att = overall_x_att, se = overall_x_se), + event_study = list(horizons = es_x_h, att = es_x_att, se = es_x_se) +) + +write_json(golden, golden_path, auto_unbox = TRUE, pretty = TRUE, digits = 12) +message(sprintf("Re-wrote golden with covariate block: %s", golden_path)) diff --git a/benchmarks/data/didimputation_covariate_panel.csv b/benchmarks/data/didimputation_covariate_panel.csv new file mode 100644 index 00000000..b648b1ae --- /dev/null +++ b/benchmarks/data/didimputation_covariate_panel.csv @@ -0,0 +1,1441 @@ +unit,time,first_treat,y,x +0,1,0,0.916637917159021,-0.314180081120697 +0,2,0,2.56286500577515,0.453622917979211 +0,3,0,2.35346562755312,0.484367702934239 +0,4,0,2.92213917942097,0.829670003456661 +0,5,0,4.13554130628202,1.0340738395403 +0,6,0,6.29530496288675,3.30845303043141 +0,7,0,5.16071209134459,1.18859170871245 +0,8,0,7.00355305906536,2.70916202778843 +1,1,0,0.060736814157767,-0.589749568195653 +1,2,0,1.36717728415399,0.465538735255254 +1,3,0,0.625415042234754,-1.08475646611045 +1,4,0,2.23554888418162,0.54579306716949 +1,5,0,2.460590553044,0.814966652672288 +1,6,0,4.38655547365466,2.13021221711237 +1,7,0,3.59499334633597,0.73859289835159 +1,8,0,4.91322544322345,1.54579110750612 +2,1,0,1.15407254499496,0.921826394227717 +2,2,0,0.905582656829566,-0.149759989196374 +2,3,0,1.2384869461555,-0.481361901201417 +2,4,0,2.90886574933724,1.52034192767204 +2,5,0,2.30320752765786,-0.110502497494246 +2,6,0,4.56144414467086,1.94421271897583 +2,7,0,5.21552104742918,2.67002361571248 +2,8,0,5.04971289534335,1.20862087676842 +3,1,0,2.06916468013281,0.560981039803129 +3,2,0,2.44331361238152,1.04502916202473 +3,3,0,3.00308404397665,0.306295776109231 +3,4,0,3.72609767214691,1.41329000554019 +3,5,0,4.05953259173001,0.941580984801662 +3,6,0,5.97415268802187,2.37950878733554 +3,7,0,5.03744480405518,0.625372909792205 +3,8,0,6.62344975803601,1.79258731550545 +4,1,0,0.148180732457669,0.648812108851374 +4,2,0,-0.213259842876069,-0.699008550998819 +4,3,0,1.15020607089858,0.639577438907564 +4,4,0,1.2682253445202,0.417310106103394 +4,5,0,1.37109223064759,-0.510851657945107 +4,6,0,3.24176495303321,1.61866748939434 +4,7,0,2.95811751143471,0.478224946719185 +4,8,0,4.13017307422084,1.23863905137876 +5,1,0,0.292360314913489,1.26131379094472 +5,2,0,1.41339691257897,1.03718244085683 +5,3,0,-0.527805256549059,-1.79489842474907 +5,4,0,2.15831003247241,1.33420006892926 +5,5,0,2.05980684631196,0.744227723374339 +5,6,0,1.92579695667354,0.0330547347885459 +5,7,0,2.86266535602995,0.0717166449424315 +5,8,0,4.65994097864301,2.00945149277826 +6,1,0,0.0392491142870833,-0.76926506554883 +6,2,0,1.2140702690756,-0.288900679388953 +6,3,0,2.63703586703473,1.16112904241062 +6,4,0,2.74212327447449,0.821807547244571 +6,5,0,3.32237960084087,0.868193066182272 +6,6,0,4.80643347027017,2.46607439545997 +6,7,0,3.61065182397154,0.0382440442757743 +6,8,0,4.77690481443203,1.12262764861407 +7,1,0,0.237804702016606,-0.4833553480436 +7,2,0,1.86874615681518,1.18541207154058 +7,3,0,2.17756678365016,0.887653916356577 +7,4,0,1.76487586313433,-0.367833477319943 +7,5,0,4.02423474049052,1.70763260313663 +7,6,0,4.03941678153389,1.48489805003844 +7,7,0,3.81791569972087,0.536613559087766 +7,8,0,5.23312247294456,1.5354108778989 +8,1,0,-0.949122083283032,-0.649706351040232 +8,2,0,0.320688509849689,0.239546947902139 +8,3,0,0.492899679003386,0.0952035276747728 +8,4,0,1.13206256222425,-0.0510946473907541 +8,5,0,0.255703730014357,-1.90556111408269 +8,6,0,2.13109352477989,-0.312404580579439 +8,7,0,3.45927173489399,1.19110854535897 +8,8,0,2.75466476100011,-0.821228611080846 +9,1,0,1.28539549929842,0.355579955968461 +9,2,0,1.9261859610581,0.0418715790453732 +9,3,0,3.42549312873865,1.60807639406971 +9,4,0,3.57039903166324,1.40093601317914 +9,5,0,3.9268491641811,0.875438951683417 +9,6,0,3.84052409259815,0.356605582427723 +9,7,0,5.3934404917645,1.61892983324727 +9,8,0,5.19025184389259,0.747911155323161 +10,1,0,1.2287779773617,-0.933451328464907 +10,2,0,3.47847296770552,0.789251243187332 +10,3,0,3.96333838498069,1.43034164054133 +10,4,0,4.96873478668546,1.71785655003318 +10,5,0,4.74637374335522,1.08577448590004 +10,6,0,6.82184862066187,3.08158999999399 +10,7,0,7.21435769968738,2.8874986038136 +10,8,0,7.08345708901915,1.85437816946995 +11,1,0,-0.751947007828895,-1.17261946178967 +11,2,0,1.79591297889017,2.32412886888065 +11,3,0,0.498769017251795,-0.32246686893447 +11,4,0,2.52456520434499,1.13085415195063 +11,5,0,3.78712318722877,2.50939895997114 +11,6,0,2.68685187519995,0.236420034191502 +11,7,0,3.56142421150243,0.829854608562444 +11,8,0,6.51691954222238,4.10730068081828 +12,1,0,1.99442771103866,2.1218970134075 +12,2,0,1.06156314135626,0.410618063121991 +12,3,0,2.08694637227902,1.42834846967699 +12,4,0,2.28482241226319,0.876376000139394 +12,5,0,1.97533767087841,-0.0756938395571591 +12,6,0,4.3523102928937,2.49367278812219 +12,7,0,4.67504134876586,1.79484777916139 +12,8,0,5.25490416937196,2.25036506881818 +13,1,0,0.107881300931475,1.23966420359739 +13,2,0,0.284484151031758,0.720477768782496 +13,3,0,0.00798908070747025,-0.11270733042434 +13,4,0,1.54944776788256,0.880066573114407 +13,5,0,2.98966087817364,2.23757561407409 +13,6,0,0.676064173296669,-0.96069147662976 +13,7,0,3.76332941501468,2.60641465671556 +13,8,0,2.98868814885124,0.361138925048651 +14,1,0,2.61014268655168,1.62538018380321 +14,2,0,2.95015260689616,0.976820372071417 +14,3,0,3.0193432083049,0.966169436913541 +14,4,0,3.9292709094723,1.49402071599908 +14,5,0,2.71095170459324,-1.29974111262971 +14,6,0,5.33735336512537,1.96245995620534 +14,7,0,4.37362888079314,0.0196202767665064 +14,8,0,6.94148377281532,2.86517112254816 +15,1,0,2.91228553473491,2.36136829982071 +15,2,0,2.00928508021464,0.481195758566773 +15,3,0,3.62845900651125,1.82513329276327 +15,4,0,3.2505931052588,0.888164374495798 +15,5,0,4.41975696494916,1.50787889204628 +15,6,0,5.28031063444125,2.20851544120704 +15,7,0,4.29738479249302,0.277657884970504 +15,8,0,5.18502611283142,0.711980032860935 +16,1,0,0.928350458078708,0.261561621291543 +16,2,0,1.40716586974087,0.66194239148371 +16,3,0,2.46220823705205,0.354889186920743 +16,4,0,3.77385624161806,1.5410056707697 +16,5,0,4.95959036805769,2.7608485457328 +16,6,0,5.20797649487453,2.44478133769543 +16,7,0,4.83831208003146,1.30738144750152 +16,8,0,6.07928907747243,2.03776463772821 +17,1,0,0.0587782844745082,0.355939963970843 +17,2,0,2.60865019107481,2.60681823240597 +17,3,0,0.823159866279096,-0.200149887201898 +17,4,0,0.858358150417453,-0.490145371965756 +17,5,0,2.65221935578617,0.595507493511097 +17,6,0,3.52762650113172,1.7034917311082 +17,7,0,3.48547311291553,1.05367117263702 +17,8,0,3.85807449042788,0.248635558529419 +18,1,0,1.24898902670361,0.0520205510908526 +18,2,0,0.899508794779183,-0.854042136582146 +18,3,0,2.80940512391286,1.23554041659563 +18,4,0,2.85661640288558,0.808987060361567 +18,5,0,3.87968253838821,1.29626823954997 +18,6,0,5.60184449762816,2.96616130293286 +18,7,0,6.35350913449392,3.48495863688483 +18,8,0,4.7081082554545,0.633329179071945 +19,1,0,-0.331464744471831,-1.93471218489366 +19,2,0,1.87727056361296,0.723984936160208 +19,3,0,1.2375439525773,-0.920076515181229 +19,4,0,3.26955812795632,1.76094090555263 +19,5,0,3.56487056441061,1.43850582415417 +19,6,0,4.05421943973195,1.6171311182421 +19,7,0,2.84638559577742,-1.06635765977703 +19,8,0,5.71217712046705,2.76097764009649 +20,1,0,0.750985773879828,0.522234082650842 +20,2,0,0.0328195837629789,-0.834440788410198 +20,3,0,1.57077234336136,0.0160753955125104 +20,4,0,2.42288938348509,1.04875061451099 +20,5,0,3.17531707453767,1.07841788650132 +20,6,0,3.36174483557202,0.770998247264735 +20,7,0,4.32558997030735,1.35665116939199 +20,8,0,4.92352935815357,1.19172820272279 +21,1,0,1.07087093880881,1.08205153107202 +21,2,0,1.11135609924719,0.681253152367991 +21,3,0,0.727340741692125,-0.432596077842857 +21,4,0,3.09807871921209,1.77345375117639 +21,5,0,2.51492405550887,0.0131150447719841 +21,6,0,2.4226772544275,0.171439298252612 +21,7,0,2.60909723676771,-0.467485576381485 +21,8,0,4.90481561318527,1.68050695564185 +22,1,0,0.769839682005284,-0.169786815957596 +22,2,0,2.64685907344311,1.73020069817991 +22,3,0,2.07613227579083,0.0247884981586201 +22,4,0,1.99978899666523,-0.341852306079693 +22,5,0,1.92131692656641,-1.22820354038316 +22,6,0,3.07392187745443,-0.683577009044645 +22,7,0,5.45987243772604,2.65863980600121 +22,8,0,4.64759515410679,0.786500552300332 +23,1,0,0.923204753405426,1.27476157480843 +23,2,0,0.155254850637236,-0.168158685069146 +23,3,0,0.740127698862003,-0.116061305404245 +23,4,0,1.31886659592027,0.0227109876332338 +23,5,0,2.56566757477101,0.616529699229748 +23,6,0,2.11444573557542,-0.45059677500846 +23,7,0,3.63552757985299,1.37357174229392 +23,8,0,4.11383876019314,0.876723830811662 +24,1,0,1.21231286753219,0.993355353313093 +24,2,0,0.213178330290255,-1.06972237044594 +24,3,0,3.16582124029377,2.68457594213002 +24,4,0,3.78374892366367,2.3094298870803 +24,5,0,3.70145171469298,1.65319947582892 +24,6,0,4.60179211224503,2.16867566911857 +24,7,0,4.79128019597848,2.15539344752181 +24,8,0,4.68766186263072,0.753607200654083 +25,1,0,-0.525188602833364,-0.470440913566006 +25,2,0,-0.468139281483392,-0.561312753354569 +25,3,0,2.71888938739771,2.70978262217919 +25,4,0,0.51242225853361,-0.482676063119712 +25,5,0,2.60447071863123,1.55184168538658 +25,6,0,1.87306311789073,0.0410588047972691 +25,7,0,3.20849437002075,1.26512128261698 +25,8,0,4.3159802886255,1.84871153032746 +26,1,0,1.89523024580561,1.56642179813552 +26,2,0,1.92266320410935,0.635649153400058 +26,3,0,2.13602074067175,0.466269714342238 +26,4,0,2.62275090430568,0.360346629889624 +26,5,0,3.13871446748855,0.450970697927333 +26,6,0,6.25659297589181,3.34069020889668 +26,7,0,5.06866362512048,1.48388005900291 +26,8,0,6.53805588989008,2.72992998448842 +27,1,0,-0.909009735837668,-1.01515845119973 +27,2,0,0.948366139525984,0.114372338859199 +27,3,0,1.36732725532215,-0.0722784438378925 +27,4,0,2.02430668914776,0.403900178906645 +27,5,0,2.92346826805837,1.03993153133383 +27,6,0,3.14305095884531,0.666694557419 +27,7,0,2.39643642317941,-0.949336893754336 +27,8,0,5.23332250186493,2.29326272094584 +28,1,0,0.689898559272774,1.44115664977765 +28,2,0,0.332650151936043,-0.105393912530523 +28,3,0,0.310005391551213,-1.20996014980836 +28,4,0,2.34882510857894,1.63523083482908 +28,5,0,2.29413591892019,0.466775481997969 +28,6,0,4.25456690598858,2.93006585478741 +28,7,0,3.46723584619455,0.929820969584674 +28,8,0,4.95282200125304,1.93221912596671 +29,1,0,0.436856112791161,-0.576825371345429 +29,2,0,2.10748891516596,1.36129187817395 +29,3,0,2.15576097768419,0.709465274417991 +29,4,0,3.36698505774563,1.67041355706404 +29,5,0,3.98787379789576,1.59566567664575 +29,6,0,4.95006107641729,2.58108744417274 +29,7,0,4.82803066262371,1.6902053581852 +29,8,0,7.02155565131921,4.28507487736871 +30,1,0,2.7651572654463,1.11410763034515 +30,2,0,3.27641452730544,1.15146315918333 +30,3,0,3.39756026589209,0.785268736801266 +30,4,0,4.0154553337337,0.847385993656322 +30,5,0,5.19601363220315,2.52253391330587 +30,6,0,7.09852215848576,3.5555413613499 +30,7,0,6.53726763572121,2.19348383828443 +30,8,0,6.07928105369672,0.928720928465489 +31,1,0,-1.76722264649771,-0.718758710907413 +31,2,0,-0.828003356619801,-0.385467573478606 +31,3,0,0.284069988022046,0.427153497397801 +31,4,0,0.187107701321012,-0.708105898520951 +31,5,0,1.26757229744836,0.0247499177004489 +31,6,0,2.75053820442032,1.49905350433308 +31,7,0,2.49960122638735,0.397763238949527 +31,8,0,2.42187384694473,-0.272022237270414 +32,1,0,-1.15245275212522,0.750589656679178 +32,2,0,-1.27441495035224,0.205125198562003 +32,3,0,-0.240490362364409,1.08893326787296 +32,4,0,-2.14000489958084,-2.38726580827405 +32,5,0,0.602730779375023,0.615302749636275 +32,6,0,1.84740823147271,1.26652464607309 +32,7,0,1.96660628573529,1.35010221584596 +32,8,0,1.755599970324,0.17871662621522 +33,1,0,0.324834861152505,0.23157669149428 +33,2,0,0.197242259737903,-0.456211386991513 +33,3,0,0.172727165394189,-1.18896363231797 +33,4,0,1.27147361628441,-0.402867178903508 +33,5,0,2.94436344521555,1.58553489871244 +33,6,0,2.86682364764382,0.675042055744808 +33,7,0,4.09675701184151,1.51018356692385 +33,8,0,3.21188488747641,-0.136885484026403 +34,1,0,2.002256196218,0.724630435658797 +34,2,0,1.86399114584488,0.177672944907817 +34,3,0,1.97241187019639,-0.71202592581981 +34,4,0,4.40950539915069,1.52685924446017 +34,5,0,5.08524542546687,2.64058075261155 +34,6,0,5.23758465889089,1.61259559438393 +34,7,0,6.01794319654456,2.13062134536187 +34,8,0,6.06988019354906,1.51668759021939 +35,1,0,-0.72698699876182,-0.963160685438996 +35,2,0,1.46846797643584,0.969675230924812 +35,3,0,1.95694092937751,1.53850494146537 +35,4,0,2.93389735990612,1.36080928925832 +35,5,0,2.72500007903872,0.651181415928849 +35,6,0,2.9268972251839,0.379699615434762 +35,7,0,4.78645124380607,2.28074642216547 +35,8,0,4.66003395194506,1.47048388817626 +36,1,0,0.312848394805084,-0.535270638926956 +36,2,0,1.42675816397103,0.636269846526573 +36,3,0,2.4276588345627,0.191066091440828 +36,4,0,2.99705347365545,1.16690931112869 +36,5,0,4.29577320106674,2.40301266088587 +36,6,0,4.56452029409963,1.42558650983029 +36,7,0,5.68808811384778,2.56181716622658 +36,8,0,5.51725712506154,1.98905497181967 +37,1,0,0.577389711203356,0.584298683110889 +37,2,0,0.743014925231118,0.278365453344141 +37,3,0,0.390729449416654,-0.59731174333923 +37,4,0,1.3913522917422,-0.173726909056631 +37,5,0,1.84546746858902,0.0183474131356972 +37,6,0,3.43722744762337,1.3678287481138 +37,7,0,3.51858408578511,1.15540138523817 +37,8,0,2.79593879276119,-0.582983050640114 +38,1,0,1.81476955570103,0.975510162212377 +38,2,0,2.03212680521697,0.586464372153111 +38,3,0,1.85016972193856,-0.0458669124266896 +38,4,0,2.94971562857268,0.471319230982678 +38,5,0,4.327287919651,1.49184112374779 +38,6,0,4.36454361880572,0.812082503302403 +38,7,0,4.79206692303695,0.954520881780435 +38,8,0,6.67355878880122,2.72333420880917 +39,1,0,1.01652123090225,0.105066385690445 +39,2,0,0.965596972592365,-0.18507861932571 +39,3,0,3.11202216451311,2.08534277703217 +39,4,0,2.42582851059958,0.590939439059433 +39,5,0,2.90506093140724,0.65322438177945 +39,6,0,4.12120802635236,1.35068207209962 +39,7,0,3.42968006239615,0.16485787747222 +39,8,0,5.45438250589813,1.85535583437557 +40,1,0,1.46843129517443,1.0672755954392 +40,2,0,2.21666420681616,1.00043082199932 +40,3,0,3.10386624686072,1.40240391254921 +40,4,0,3.73581793812876,1.72665620826714 +40,5,0,3.22949653714408,-0.0705249142169016 +40,6,0,3.78395473849189,0.117811028789997 +40,7,0,4.42983588016079,0.892009462863188 +40,8,0,4.56245918005427,0.0632991446936286 +41,1,0,1.88469319444482,1.8248916583582 +41,2,0,1.72505610512213,0.720633513823375 +41,3,0,1.04306529898281,-0.728106049878271 +41,4,0,2.0026112302282,-0.0840761885175157 +41,5,0,3.71962057529182,1.64560428773382 +41,6,0,4.04430957702871,0.814714995028606 +41,7,0,3.64424509373742,0.662457874816306 +41,8,0,5.83217496967895,2.47230023832344 +42,1,0,-0.502491968408288,-0.719186490188951 +42,2,0,0.84790066853989,0.269523001672431 +42,3,0,1.63386480811479,0.755394457156722 +42,4,0,3.66708848921594,2.75887673965355 +42,5,0,1.7029874384868,0.28333667433901 +42,6,0,3.11423735144061,0.306895322636543 +42,7,0,3.98235657641997,1.23906103512939 +42,8,0,2.9268754570028,-0.330359645916909 +43,1,0,0.432518228109611,-0.404450320189165 +43,2,0,0.674741932181525,-0.853582539018751 +43,3,0,2.91323443931641,1.19396541247236 +43,4,0,1.68608108948796,-0.37963442671328 +43,5,0,3.49085007983193,1.22867271407346 +43,6,0,4.58225142586889,1.99039057095326 +43,7,0,4.91278679645859,1.08117857649295 +43,8,0,3.69587141858296,-0.40573503192865 +44,1,0,0.30065431572141,-0.69596219693464 +44,2,0,2.17869806750793,1.36534462081133 +44,3,0,3.30386839661852,2.19097412112511 +44,4,0,1.81596613099633,0.0905686955547256 +44,5,0,4.17619623091039,2.05075634792251 +44,6,0,4.92735368618812,2.57890822952809 +44,7,0,6.3296472320746,3.44961695014063 +44,8,0,3.37086244929536,-1.33422094632458 +45,1,0,-0.825653156882826,0.0528529525129007 +45,2,0,-1.31936518742371,-1.01505123930785 +45,3,0,0.341076033810964,0.289519749004039 +45,4,0,1.1858367515106,1.0715503275652 +45,5,0,1.1695956351976,-0.238215802677128 +45,6,0,1.8629683646376,0.371420527159662 +45,7,0,3.2753342454029,1.84245207905973 +45,8,0,3.2474501571958,0.770022050994084 +46,1,0,-0.985611980483693,-0.413486110531637 +46,2,0,0.793672858977073,1.10398837334509 +46,3,0,0.530538336641224,0.227175822048594 +46,4,0,2.30415473441369,1.7623518811923 +46,5,0,2.32924249973579,0.883566544262253 +46,6,0,3.09835461252332,1.38770378176054 +46,7,0,3.75924950847755,1.55809268876457 +46,8,0,3.31925707983505,0.409304283873073 +47,1,0,-0.820168095077947,-0.851885182083146 +47,2,0,0.0447295122579256,-0.211503694219447 +47,3,0,1.09037044811239,0.518299592704016 +47,4,0,1.61505975062734,0.415775675670871 +47,5,0,2.78296944130076,1.49762434487845 +47,6,0,2.46654646919172,0.23495359022412 +47,7,0,4.26901030377572,2.09985862749289 +47,8,0,3.33981123955487,0.0389902015762762 +48,1,0,3.13732009797795,2.83587389226627 +48,2,0,1.5447191222177,-0.677668496729273 +48,3,0,4.67620689160768,2.77158463454726 +48,4,0,3.49171854924488,0.936642464952171 +48,5,0,3.14851135058448,0.00410410550989737 +48,6,0,4.87925017610939,1.05340492556523 +48,7,0,6.1508012050381,2.49581534281605 +48,8,0,6.97305757529182,2.63883892419065 +49,1,0,2.14702616930241,2.9581485809187 +49,2,0,0.0388585894363935,-0.580521781220324 +49,3,0,1.89162430261937,1.4423390569214 +49,4,0,0.665099677110635,-0.921883162057542 +49,5,0,1.62070020896362,-0.294824289903419 +49,6,0,3.92210739271347,2.06877751822703 +49,7,0,3.31725253150186,0.624696872624083 +49,8,0,4.59000349205593,2.09930543183475 +50,1,0,1.45187840436607,0.213279622876038 +50,2,0,3.15382427878773,2.28302429556989 +50,3,0,2.88650585302363,1.19877549451946 +50,4,0,2.8379701740457,0.578981272968896 +50,5,0,3.58422958949118,0.447053884045161 +50,6,0,4.90851570125454,1.50940459743039 +50,7,0,4.99909757020131,1.34436947560086 +50,8,0,6.625499279756,2.85594999904395 +51,1,0,2.24181950875453,1.3509128052866 +51,2,0,2.25549119986707,0.35909698416011 +51,3,0,3.35140084951043,1.64563157136797 +51,4,0,3.90226385447003,1.64593601814367 +51,5,0,4.2963792624474,0.838548232887382 +51,6,0,5.4248699147431,2.61261023072732 +51,7,0,4.29113953708201,-0.24311925435153 +51,8,0,6.71416282984289,2.64147580240952 +52,1,0,0.777154657414387,-0.273427060070183 +52,2,0,1.03965267953857,0.166274381749034 +52,3,0,2.73443074400349,1.64001638016646 +52,4,0,2.49663846250374,0.33642070964293 +52,5,0,3.32095456071409,0.500600091932261 +52,6,0,3.98086763955079,1.27082847358841 +52,7,0,5.71105084198885,3.08040009925658 +52,8,0,6.81166766702441,3.61963962535513 +53,1,0,1.49691805576608,0.144649173712203 +53,2,0,3.74906164986261,2.28654748000023 +53,3,0,3.38118249829526,0.54497413537208 +53,4,0,4.28264271973643,1.50155784067872 +53,5,0,3.91599940542759,0.0514922823901056 +53,6,0,6.54580130661177,3.24738651407482 +53,7,0,6.15591187142789,1.77454366176527 +53,8,0,6.29707328632614,1.25257988666359 +54,1,0,-1.09452882448201,-1.64230733200097 +54,2,0,0.27130631334914,-1.36513845046406 +54,3,0,1.11417433318939,0.102169531980478 +54,4,0,2.17391851778371,0.203271758954693 +54,5,0,3.29569818975477,1.12444488654211 +54,6,0,4.15348885997741,1.36232568677038 +54,7,0,4.8142378318639,2.13117774155544 +54,8,0,4.62094129206098,0.864706822098829 +55,1,0,0.227501668524887,0.152892864073623 +55,2,0,0.969757375673176,0.874300103631317 +55,3,0,1.95465763473135,0.974238451166078 +55,4,0,1.93091163567319,0.388035133819415 +55,5,0,2.99614671641282,1.52236752502564 +55,6,0,3.60991613161996,1.71729165204898 +55,7,0,3.49354912356227,0.964901931791623 +55,8,0,4.56937025351938,1.41760093282938 +56,1,0,-0.873627875623915,-1.25353026313331 +56,2,0,1.42192798325552,0.587365225235464 +56,3,0,1.9447664754333,0.959019013493425 +56,4,0,2.20333832144321,0.361803420595449 +56,5,0,2.63379922373761,0.0591558343188451 +56,6,0,2.41394504330874,-0.285301627576193 +56,7,0,2.75776099222235,-0.504989402671356 +56,8,0,4.08624037849764,0.428568277720731 +57,1,0,1.51436229510405,0.200348698367365 +57,2,0,1.93340569313276,-0.279442969378828 +57,3,0,2.71073113509235,0.543657170445264 +57,4,0,5.06979949560952,2.92499880313164 +57,5,0,6.64099988274541,3.6529713469284 +57,6,0,4.53914674015481,0.605002873892877 +57,7,0,6.29427517046537,1.93825156569006 +57,8,0,6.47576937988858,2.20651976042073 +58,1,0,-0.80143396297238,-0.470247588544275 +58,2,0,0.503667889892844,0.541587970280475 +58,3,0,2.04141061726945,1.63555222435055 +58,4,0,0.855826649691833,0.0137889685488196 +58,5,0,3.27185591802091,2.10437262804853 +58,6,0,1.54801612172465,-0.584103412403139 +58,7,0,3.23571015761,0.924786271602171 +58,8,0,4.96815687940445,2.31861823456558 +59,1,0,-1.85164755860079,-0.0115759379768861 +59,2,0,-1.10917802110235,0.241958507925517 +59,3,0,-0.351641834906537,0.422480635310899 +59,4,0,-0.378002353335179,-0.0200476388741192 +59,5,0,0.300091836081419,0.392320928745764 +59,6,0,0.184244551782268,-0.699541391715307 +59,7,0,1.94861000052103,0.950805964670802 +59,8,0,0.708693310723623,-1.17023559293777 +60,1,3,2.36246104300533,1.86967825559909 +60,2,3,2.2565637047082,0.743661534313126 +60,3,3,4.70477362211185,1.73233010183987 +60,4,3,6.16723879551336,2.48001884828527 +60,5,3,5.15585856724924,-0.367232637797391 +60,6,3,7.54223486991795,1.51766500704045 +60,7,3,8.11183154747285,0.967192653329278 +60,8,3,10.2509261535051,2.38658827989711 +61,1,3,1.19937704278892,0.744918064380605 +61,2,3,0.809721221821997,-0.60972800915712 +61,3,3,2.23531274776893,-0.608026492976468 +61,4,3,3.96486071513128,0.389119866585695 +61,5,3,6.413227711666,2.33539690072844 +61,6,3,6.76759620314208,1.54554965446147 +61,7,3,8.38798314779024,2.24007130301083 +61,8,3,8.34128110120706,1.16745529799405 +62,1,3,2.16041988669173,0.861366503324913 +62,2,3,3.33540815813672,1.62256120736611 +62,3,3,5.26435485740365,2.5420399849942 +62,4,3,5.47821322942798,1.33378800462742 +62,5,3,5.79787325092698,0.775114475969486 +62,6,3,6.97374080062811,0.485585593827592 +62,7,3,8.78166584797435,1.69409973630157 +62,8,3,10.8226699448448,3.77209148246822 +63,1,3,0.499133045197033,-0.612770141513915 +63,2,3,1.90806127911684,1.33420634173275 +63,3,3,4.18265821277813,1.9311230771821 +63,4,3,4.33272301868412,0.428176231277948 +63,5,3,5.16683306579201,0.638034997181857 +63,6,3,6.97886359227393,1.69427860398617 +63,7,3,7.19899597959221,0.823209319142823 +63,8,3,10.6451512023663,3.98511328518346 +64,1,3,-0.972463832004748,-0.99304803159675 +64,2,3,1.01748042551021,1.18948277790069 +64,3,3,3.23581080345417,1.85722638091019 +64,4,3,2.61404929605965,-0.0532196434322548 +64,5,3,3.35018092238771,-0.399371110194883 +64,6,3,4.63177430129859,-0.0960095167564837 +64,7,3,7.5335334196142,2.23584756051678 +64,8,3,8.51809688280765,2.45549327969125 +65,1,3,0.17955856341396,0.643446778718986 +65,2,3,0.372143192778295,0.369443933947479 +65,3,3,1.81012151359379,0.60551063390627 +65,4,3,3.31428412842869,1.00561762702523 +65,5,3,5.85933378063753,2.78448212866187 +65,6,3,5.05600527680781,0.502766719393735 +65,7,3,8.05841877556612,3.23413998714914 +65,8,3,7.98695420846437,1.6351067096535 +66,1,3,-2.10391385674412,-0.276385920771947 +66,2,3,-0.739592357738474,0.686073003408533 +66,3,3,-0.695967558997522,-1.06285426329587 +66,4,3,1.90474953560874,1.67782609947738 +66,5,3,1.03037920975732,-1.2099575697228 +66,6,3,2.67516912779634,0.528729226911402 +66,7,3,4.02935545469598,0.342399913197451 +66,8,3,5.60808164159444,1.3487843800908 +67,1,3,2.59410815665336,1.73713748901132 +67,2,3,3.10350439874436,1.48261103094095 +67,3,3,3.80965385547241,0.902140142439972 +67,4,3,6.14346959669965,2.36171382012881 +67,5,3,6.88665529694054,1.81578734575238 +67,6,3,6.53748041437212,0.159931041306827 +67,7,3,8.60662156483415,1.97929813896048 +67,8,3,9.42256263892546,1.89308638773302 +68,1,3,1.68545622556389,1.78178581392124 +68,2,3,0.816844263997296,-0.231273381861954 +68,3,3,2.9994658794922,0.213605196916585 +68,4,3,2.37201564450611,-1.66012858716672 +68,5,3,4.13662634895687,-0.692346184557966 +68,6,3,6.93750588878292,1.91713362765773 +68,7,3,8.20695352438563,2.65085985951114 +68,8,3,6.58778010077638,-0.800052977705735 +69,1,3,2.28158922933423,-0.272342879352543 +69,2,3,2.42675325518634,-0.559333968909046 +69,3,3,5.6061614128286,2.10267906696897 +69,4,3,5.04013679666617,-0.374847011535779 +69,5,3,6.74916787946357,0.555431296805965 +69,6,3,7.90437883204496,1.23281148832017 +69,7,3,9.46412812267329,1.71573160570773 +69,8,3,11.5532534886622,2.79415791523417 +70,1,3,1.53178162198116,0.148561456886382 +70,2,3,2.22519717953392,0.776887311777939 +70,3,3,3.41414854491816,0.534417130653072 +70,4,3,3.75237679710301,-1.14976463955995 +70,5,3,7.646318457181,3.36776333316145 +70,6,3,6.99778600003624,0.526785937254949 +70,7,3,8.74107675768834,2.14970628664038 +70,8,3,9.43221410072097,2.31520903251154 +71,1,3,1.75881811515535,-0.481915077304059 +71,2,3,3.14762870465093,0.573472143671505 +71,3,3,4.67935985291484,0.589220030510691 +71,4,3,6.87498953571826,2.50365875453272 +71,5,3,7.81513283521585,2.06900721624365 +71,6,3,8.29442214081162,1.04895040887543 +71,7,3,9.47610441484767,1.80423668308582 +71,8,3,10.4171557255637,1.59284519185529 +72,1,3,-0.827296677066491,-0.36103189530741 +72,2,3,-0.120898106462196,-0.143147517505754 +72,3,3,2.71604709203718,1.85474242353368 +72,4,3,3.23184018954066,1.19266973128861 +72,5,3,3.65146917541746,0.323981157624446 +72,6,3,4.95097183468076,0.918102510245273 +72,7,3,7.29145290740164,2.43221832786703 +72,8,3,7.2024089529274,1.53383508039755 +73,1,3,1.30898189011261,0.78230212205517 +73,2,3,3.05335833860551,1.57692438467892 +73,3,3,4.1057516765394,1.34145031869676 +73,4,3,4.36437208272074,0.482482903494304 +73,5,3,5.90980322943713,0.896513882337496 +73,6,3,7.3789334006342,1.73809072197269 +73,7,3,7.09666734543834,0.537914486812331 +73,8,3,8.52538611211022,0.427327531518689 +74,1,3,2.20562686615734,0.65154204761714 +74,2,3,3.59536936889074,1.53754508209266 +74,3,3,5.44499564382464,2.50928450156958 +74,4,3,4.84579670073479,0.290908139459964 +74,5,3,8.155802933234,2.81144764109128 +74,6,3,8.64558872307788,2.45365929214131 +74,7,3,9.60639438244338,1.96584119091214 +74,8,3,10.3711409804742,2.26466191284757 +75,1,3,-0.634751769269122,0.306982400928251 +75,2,3,0.0869379263408908,0.695053565299132 +75,3,3,0.0864995838716993,-1.00491494907124 +75,4,3,1.16286286530838,-1.31949270066514 +75,5,3,2.81087300515703,0.138943014470855 +75,6,3,3.63212321529686,-0.450405299175469 +75,7,3,5.94606481808747,1.19812764004241 +75,8,3,7.03410344795608,1.82789367939859 +76,1,3,-1.74903424329514,-1.44645906294333 +76,2,3,-0.431325468497984,-0.138252184712645 +76,3,3,1.27322869335681,0.379253636737875 +76,4,3,1.41183194991842,-0.922991845067553 +76,5,3,3.23967806000411,0.261790712154112 +76,6,3,5.18875650989619,0.937604100457624 +76,7,3,5.82463228046679,1.01228675539856 +76,8,3,7.16527621313809,1.11114458705223 +77,1,3,-2.12382811420783,-1.50412026665733 +77,2,3,-0.77308097314486,0.141685854909906 +77,3,3,2.8197028364984,2.40996843361275 +77,4,3,1.15358948953652,-1.10259486771755 +77,5,3,3.47563121756622,0.869908138623518 +77,6,3,4.90126695337359,1.34603947746441 +77,7,3,6.20892739994194,1.8222443931138 +77,8,3,7.4453654489452,2.31031311628835 +78,1,3,2.28291382697858,0.727576199862481 +78,2,3,2.37515372321151,-0.118098091760847 +78,3,3,4.23297970200792,0.749536841947646 +78,4,3,5.57244978023521,1.61269497503004 +78,5,3,6.30455303707076,1.02893176527291 +78,6,3,7.76000951015344,2.00946616941508 +78,7,3,8.42022730502866,0.699077865039767 +78,8,3,9.9096886155066,2.03524685669952 +79,1,3,2.88767793839295e-05,0.698186588251139 +79,2,3,-0.502514673954543,-0.289210040063089 +79,3,3,1.82390038876865,0.33073205835277 +79,4,3,2.73695090361181,-0.00613504962005029 +79,5,3,4.02932284216101,0.836751135561968 +79,6,3,6.40943630226278,2.52334177664997 +79,7,3,6.08997129079185,0.979035594373631 +79,8,3,8.19104383664133,2.00986659622271 +80,1,3,2.018759961462,2.34791972642367 +80,2,3,1.03324554914538,0.549241068615329 +80,3,3,3.16694262843495,1.45461756633003 +80,4,3,3.05324144701881,-0.35449685064341 +80,5,3,4.6097787129241,0.681917561671596 +80,6,3,7.13567973944344,2.41251845081769 +80,7,3,7.19485576714972,1.168019462277 +80,8,3,9.73419943622125,3.22354791129029 +81,1,3,2.49350606608796,0.723862049869647 +81,2,3,3.32723118764331,1.02301936032668 +81,3,3,5.24524774792856,1.75028755256075 +81,4,3,6.33762259996158,1.58785898537373 +81,5,3,6.3377318899466,0.896877446842967 +81,6,3,8.40556579388158,1.8402542319846 +81,7,3,8.74574652874244,1.20251209926434 +81,8,3,10.8576277015878,2.80329208450853 +82,1,3,-0.397613003328544,-1.07075004424134 +82,2,3,1.98249207963961,1.13142836134776 +82,3,3,2.76988927294925,0.0825956464476287 +82,4,3,4.964105064241,1.92470107031837 +82,5,3,4.15639943621052,-0.0489167469369052 +82,6,3,7.01799481555275,2.46558692422759 +82,7,3,7.17945185513629,1.28835337989929 +82,8,3,8.63100125235224,1.86001198936433 +83,1,3,0.300693693148116,-0.69743885822004 +83,2,3,2.67081419519851,1.53520815331253 +83,3,3,3.45315677268614,0.556260843360882 +83,4,3,3.49692974425402,-0.393163070848225 +83,5,3,6.75668460833185,2.67213942404699 +83,6,3,6.65816368011674,0.688978793264592 +83,7,3,8.49113677090434,2.02571153719789 +83,8,3,8.7128178891881,0.806326886914042 +84,1,3,-1.37456055010919,-1.19569484826138 +84,2,3,-0.608224474893311,-0.782554580335517 +84,3,3,2.82521411590811,2.41849036862619 +84,4,3,1.79630858974563,-1.19731713787663 +84,5,3,4.81861070702279,1.63252354513704 +84,6,3,5.28796165595249,0.968972498901705 +84,7,3,6.27733274173034,1.52205778919503 +84,8,3,7.18371587809487,0.778677465577417 +85,1,3,-0.823447855737256,0.525305575284109 +85,2,3,-1.13838927901013,-0.861399591370937 +85,3,3,2.00793200510585,1.96643140409579 +85,4,3,2.43795713531409,0.28497936542733 +85,5,3,3.34768922734656,0.284610173553093 +85,6,3,6.45719877178093,2.99155174479576 +85,7,3,7.35756843105619,2.80687724302557 +85,8,3,8.73695019574526,3.16723728592456 +86,1,3,-0.288312715905401,0.9039946502555 +86,2,3,-1.83715467269359,-1.34143455685875 +86,3,3,-0.308005563338514,-1.63497806900396 +86,4,3,2.3570715627367,0.410208320345493 +86,5,3,3.13731008007749,0.40416342773783 +86,6,3,5.14836239235074,1.5649912030032 +86,7,3,5.97704208406253,1.35502189990319 +86,8,3,6.26526861609621,0.0442244792007899 +87,1,3,0.119625399500562,0.99668139865946 +87,2,3,-0.0365262887892016,0.0493677372019317 +87,3,3,2.04498862261491,0.991749939796403 +87,4,3,1.81103338396333,-0.567815585908264 +87,5,3,3.65008346935001,0.454035811735906 +87,6,3,3.89251658782786,-0.648651372205435 +87,7,3,5.33055882525354,0.0957840879455093 +87,8,3,7.85889128739929,2.47088547903484 +88,1,3,0.689442647954407,0.371754730809585 +88,2,3,1.12591294788505,0.00190227639911655 +88,3,3,3.27765040735393,0.713630663462092 +88,4,3,3.73549591780903,-0.445879518904617 +88,5,3,3.98096989742038,-0.0358637469067309 +88,6,3,6.3481371485113,1.53970294727285 +88,7,3,8.53538438343009,2.61014885868766 +88,8,3,8.55991980154836,1.30975587113228 +89,1,3,0.556203135208554,0.0715386544652805 +89,2,3,0.675028188060703,-0.65871697284502 +89,3,3,2.69248054143679,0.464814962145558 +89,4,3,3.49888081283911,0.00781076364058997 +89,5,3,6.33896454823405,2.79706353808509 +89,6,3,6.36582999255518,1.26505227331964 +89,7,3,7.04937334860509,0.448755627438395 +89,8,3,8.44355666972803,1.40069863105239 +90,1,3,-1.41194506109388,-1.5344839919408 +90,2,3,0.419299662820733,0.922654128846661 +90,3,3,0.826284806202802,-0.288549121041531 +90,4,3,2.35778372150484,0.542895522982076 +90,5,3,3.18129408324702,0.317024660567215 +90,6,3,4.8257076051667,0.446624621432842 +90,7,3,6.17653401846098,1.56008220098883 +90,8,3,7.52760566673642,1.73630207846621 +91,1,3,1.56787359005232,-0.914840595912058 +91,2,3,2.6524904379054,-0.180889255798633 +91,3,3,3.93006576488807,-0.299828910766206 +91,4,3,6.04837373483131,1.00066137208176 +91,5,3,7.67508153101594,2.08586540695784 +91,6,3,7.48540250425468,0.690343968152654 +91,7,3,10.2480594050639,2.91131935593556 +91,8,3,8.50357653966506,-0.746803750763877 +92,1,3,1.48197164104135,0.241781641068124 +92,2,3,1.84138713215474,0.216089060660422 +92,3,3,3.8299912746103,1.19822477276807 +92,4,3,5.11847875072513,1.49725729171455 +92,5,3,5.63395283241467,0.91880994855276 +92,6,3,6.72214168681456,0.877163463568802 +92,7,3,8.46523092156036,1.88848878083682 +92,8,3,9.75423970982996,2.22763049010956 +93,1,3,1.05636991368833,0.12427697441464 +93,2,3,2.6400576402014,1.12283771240249 +93,3,3,3.64504072108256,1.15137120836598 +93,4,3,5.8090986726745,2.20532048758762 +93,5,3,6.03985423596163,0.863116152336697 +93,6,3,7.71705245006266,2.09656002705615 +93,7,3,7.48110118469202,0.537175195718067 +93,8,3,9.60395496261989,2.14845691726751 +94,1,3,-1.04621693458654,-0.665609522852458 +94,2,3,-0.895685442997566,-1.54142655603408 +94,3,3,1.67533832664322,-0.133705589791646 +94,4,3,2.57613017743163,-0.568755231644756 +94,5,3,4.85927565545478,1.12692903740702 +94,6,3,6.25243177069046,1.58303347732855 +94,7,3,5.83987515133216,0.0315262510925844 +94,8,3,8.21640556844237,2.32078508276945 +95,1,3,2.91938700322587,1.01144701217569 +95,2,3,2.29083893675695,0.064954957350426 +95,3,3,5.48607414043048,1.71814155406771 +95,4,3,5.54345126238566,0.938613372478907 +95,5,3,7.38374528770086,1.39064205578973 +95,6,3,8.91283820032523,2.74478285356457 +95,7,3,10.6445403044384,3.58234887715485 +95,8,3,12.0167318613746,4.01839277498385 +96,1,3,0.858927428320431,1.11332568046495 +96,2,3,0.0114470722386517,-1.32752333159219 +96,3,3,3.4560249642688,1.14905667275787 +96,4,3,3.20169993759369,0.249086853666398 +96,5,3,5.15364052687348,1.75410547592005 +96,6,3,4.48924654973267,-0.569500722055284 +96,7,3,7.7153892279688,2.56265756219699 +96,8,3,8.65875046360352,2.30929367623308 +97,1,3,1.2828851668729,0.979155562435719 +97,2,3,1.67446863702661,0.995876479921456 +97,3,3,1.71678388908996,-0.881698445910923 +97,4,3,2.98294762547011,-0.859732147225852 +97,5,3,5.46593643706156,1.99502781443996 +97,6,3,6.22449202767212,1.51762459395305 +97,7,3,8.5622589202038,3.18152035360739 +97,8,3,8.53308450861133,1.53264437688273 +98,1,3,0.768087571038167,0.823050726966293 +98,2,3,2.17834719897595,1.59168038267924 +98,3,3,2.60711364479153,0.349683202440584 +98,4,3,2.13918645009293,-1.27062404639831 +98,5,3,3.70125230823619,-0.413023450178859 +98,6,3,7.54910388192418,2.73702501155845 +98,7,3,7.14621620156976,0.782249934236259 +98,8,3,9.38850384177932,2.30889290630069 +99,1,3,-1.1145837216746,-0.856850729098987 +99,2,3,-1.34729132333986,-1.54280444372788 +99,3,3,1.80107747959715,0.967329115465845 +99,4,3,1.63775161933916,-0.77761247761386 +99,5,3,3.14856655913312,0.228071047085259 +99,6,3,3.66518906356513,-0.488965910595751 +99,7,3,5.77330136869397,1.30027827100738 +99,8,3,5.9231388072042,-0.193816321395773 +100,1,3,1.63952788643915,-0.105716376292091 +100,2,3,2.78920581071125,0.775444013403994 +100,3,3,3.92850370550381,0.572055541692984 +100,4,3,6.17896992742682,1.6547187948792 +100,5,3,6.32404628219918,0.921795730323998 +100,6,3,8.03695294198216,1.95413766171758 +100,7,3,9.87468123390286,2.91571119871565 +100,8,3,11.0669110329532,3.40396376081222 +101,1,3,3.14761844458772,2.16318054861877 +101,2,3,1.89722934990539,-0.0296444204299922 +101,3,3,3.90145490173398,0.394458795150653 +101,4,3,5.10443801900291,0.948631186568217 +101,5,3,6.10858024799422,0.956069583008643 +101,6,3,7.01250770916775,0.594952783783525 +101,7,3,8.7146266915083,1.69313597865204 +101,8,3,10.5388549318675,2.61490435199454 +102,1,3,2.62450820346355,0.813813651751294 +102,2,3,3.99736475873149,2.3933619989345 +102,3,3,5.45069523602081,1.95368074508495 +102,4,3,6.06601897914112,1.92650876538181 +102,5,3,8.02081845474634,3.04603850716863 +102,6,3,8.24559499716177,1.86210304057658 +102,7,3,8.27556306790634,0.386803184351508 +102,8,3,10.7858411317958,2.88373873135344 +103,1,3,0.34634658856609,0.0398692333165994 +103,2,3,1.35774761983602,0.596233820535406 +103,3,3,2.2209387113282,-0.392310536448203 +103,4,3,3.29401667073745,-0.297596069089376 +103,5,3,6.02536361218512,2.32899468194439 +103,6,3,5.83001211071061,0.3996936575478 +103,7,3,7.15682182820792,0.876546364121118 +103,8,3,9.52582656097663,3.00657944838477 +104,1,3,1.72309043280874,0.542893394911003 +104,2,3,2.20028972412191,0.0243383277461636 +104,3,3,5.31056458102473,2.58809890723311 +104,4,3,5.48091726730189,1.37131930237429 +104,5,3,6.33568982311465,1.17032743400901 +104,6,3,7.45832238233912,1.82167354191459 +104,7,3,9.24340072056321,2.56159789380063 +104,8,3,9.89309860597322,1.8124542198181 +105,1,3,0.0980737864894633,0.692433579318631 +105,2,3,-0.9048405022179,-1.37752544704842 +105,3,3,1.23383194789892,-0.244038978965283 +105,4,3,1.93232148583346,-0.382175201471488 +105,5,3,3.71157172001151,0.265886069177382 +105,6,3,4.34037945327034,-0.266220357451981 +105,7,3,5.81798130640469,0.669499321613817 +105,8,3,7.79912075419991,2.33585543839186 +106,1,3,4.36470379146943,2.36479800361374 +106,2,3,4.51871724747945,1.9652575422402 +106,3,3,7.14025414138898,2.82101025749996 +106,4,3,5.60482723556609,-0.0194873309877386 +106,5,3,7.77502020137789,1.35156968648808 +106,6,3,10.8297154262504,4.68587804142805 +106,7,3,10.5192149763555,2.5821847983589 +106,8,3,12.3680661728797,3.87444514431314 +107,1,3,0.709587411484074,-0.0887030420259831 +107,2,3,3.29435630923559,2.5583678968643 +107,3,3,3.4502155168427,0.759589215612025 +107,4,3,5.83630511584654,2.46561969803014 +107,5,3,4.70540199085765,0.329245541740522 +107,6,3,6.68684503782994,1.4072117854773 +107,7,3,6.54803508609197,-0.0664044987469197 +107,8,3,8.45675098497904,0.747186073761042 +108,1,3,0.329590807101136,0.101639393845802 +108,2,3,1.14535707340008,1.03656005906029 +108,3,3,3.28976224722373,1.57732820085074 +108,4,3,3.90696145157552,0.814338776651483 +108,5,3,5.3621606284815,1.86360919211911 +108,6,3,5.18473927442933,-0.143084969020566 +108,7,3,8.20148978361155,3.01262101741639 +108,8,3,7.91962883937527,0.688081918469602 +109,1,3,0.998897664094066,1.53339514541457 +109,2,3,-0.873577125891974,-2.1885135321203 +109,3,3,2.01625152665269,0.299208921250602 +109,4,3,3.72496931779045,1.12450254998722 +109,5,3,4.89695636245941,1.68287134810005 +109,6,3,5.85463389125296,1.06580636552659 +109,7,3,6.42601066634766,1.15994556600094 +109,8,3,8.52636641129374,2.25752263284939 +110,1,3,0.216311119639771,-0.0899184072786376 +110,2,3,-0.796095864695381,-1.9435884645235 +110,3,3,3.14025213949502,1.80114130353329 +110,4,3,3.80729173457937,1.41311998211143 +110,5,3,3.84556704039576,-0.227391892535425 +110,6,3,4.31660491379968,-0.885608068931409 +110,7,3,7.92427581719045,3.08981631650375 +110,8,3,8.6835022927906,2.50478431163008 +111,1,3,0.667073292447625,-1.46889689647567 +111,2,3,3.09146399622844,1.5316033564374 +111,3,3,3.50770668230202,-0.64259575334091 +111,4,3,4.78110445527105,0.411408531464492 +111,5,3,5.9340338542124,0.123507295467165 +111,6,3,8.57557358541128,2.31223056022154 +111,7,3,9.80202073295228,2.97880811324288 +111,8,3,10.1315995624155,2.17099581681497 +112,1,3,-0.703475179666733,-0.658144414407131 +112,2,3,1.13287438843949,1.25367726925912 +112,3,3,2.27978701459182,0.721326915992997 +112,4,3,3.24374001066404,0.696175235929763 +112,5,3,5.22834469642603,1.63934316268553 +112,6,3,5.02059609812909,0.200601043626814 +112,7,3,6.5526973327469,1.1477255203261 +112,8,3,7.89391639566584,1.2973334530415 +113,1,3,1.11029303913617,0.532537779434535 +113,2,3,2.67027711497403,2.22816183750954 +113,3,3,3.73002809535494,0.824913071138639 +113,4,3,3.5081631761916,-0.446932909756936 +113,5,3,6.19033593946073,2.39458403415775 +113,6,3,7.84788847483102,2.94059657593223 +113,7,3,9.33372129044523,3.00359301404211 +113,8,3,8.34880064176624,0.541295219767723 +114,1,3,0.147705069509363,-0.531000032638257 +114,2,3,1.66805434053082,1.32066575307797 +114,3,3,3.00139510320919,0.279225363239162 +114,4,3,4.424242356443,0.879776832554574 +114,5,3,4.20873481166665,-0.174745626454617 +114,6,3,6.24239709401706,0.611663806542923 +114,7,3,8.86966002431576,3.56498103158937 +114,8,3,8.81015239855105,1.61657178377231 +115,1,3,0.736628769324536,2.0860515590685 +115,2,3,-1.62597490982074,-1.97647674894157 +115,3,3,1.76445833199409,0.562188371597655 +115,4,3,4.05673804640141,2.49076459783679 +115,5,3,3.59821740060607,0.456212117955204 +115,6,3,4.9506121806586,0.629652935411925 +115,7,3,4.87942803706338,-0.536906974102656 +115,8,3,8.28876618382751,3.00663200129201 +116,1,3,0.553379960948597,0.187339131131254 +116,2,3,0.75962741387797,0.739591740605878 +116,3,3,1.49525931936557,-0.23611623808648 +116,4,3,1.95293327842565,-0.567510978624899 +116,5,3,5.6414667808983,2.39727039924926 +116,6,3,5.33968542073382,0.495770172902895 +116,7,3,7.7178175241629,2.42404672377336 +116,8,3,7.54660437184583,0.785623434045026 +117,1,3,0.485777894934101,0.987234546250327 +117,2,3,2.07252148406583,2.45190952319527 +117,3,3,2.07269933679785,0.414860611414483 +117,4,3,3.01887858141811,0.214633668932029 +117,5,3,3.68940853966083,-0.566272348085961 +117,6,3,6.10023038724265,2.24267258464407 +117,7,3,6.54954093500267,0.813781267993162 +117,8,3,8.981574538334,2.96479125775686 +118,1,3,1.89272609590766,2.13620552772919 +118,2,3,0.791709458605174,-0.962588160475802 +118,3,3,2.72934219498675,0.0513461457008969 +118,4,3,4.30210810562065,1.01036394540559 +118,5,3,5.03462952325036,0.273024759785414 +118,6,3,6.96485015088729,1.95620432701027 +118,7,3,7.36897564835035,0.446772507689941 +118,8,3,9.17963265071939,1.70275890456562 +119,1,3,0.360748208072394,0.40565143829112 +119,2,3,1.94411329572676,2.12929596365135 +119,3,3,2.31405865304736,0.349940136567202 +119,4,3,3.06492307834881,-0.195609401710398 +119,5,3,3.4643071172337,-1.00935074872979 +119,6,3,6.57056876816448,2.25912530737723 +119,7,3,7.1732202287268,1.07924634959831 +119,8,3,7.83144755252202,1.5965829391088 +120,1,5,1.04484306043251,-0.385705884326883 +120,2,5,2.01435419615357,0.244368122541561 +120,3,5,2.7090431224532,0.556019387611954 +120,4,5,1.71988296149731,-1.41120674059435 +120,5,5,5.61650285988424,1.68714779409245 +120,6,5,7.35252052383447,2.85626448016226 +120,7,5,8.12516902608454,2.45124873956287 +120,8,5,8.18174617848268,1.06010519587723 +121,1,5,0.329170381709063,-0.138473801168597 +121,2,5,0.995604620030566,0.342631243745036 +121,3,5,0.900501551287747,-0.843766225775138 +121,4,5,2.62549130855719,0.763815115538101 +121,5,5,5.06709382047559,1.57297227038235 +121,6,5,5.93541630219838,1.50037726878048 +121,7,5,8.83214546033344,4.45602942775677 +121,8,5,8.10461247209677,1.97649538887444 +122,1,5,0.276466844239897,-0.234461736562119 +122,2,5,1.22640138485427,-0.244669960277211 +122,3,5,2.0721023550686,0.540485622772081 +122,4,5,3.3621300291053,2.0427394466474 +122,5,5,4.2684831137966,0.780517479733507 +122,6,5,5.52118290060941,0.8756746253714 +122,7,5,8.43875234345786,3.19795125822326 +122,8,5,9.16178957290133,3.29522080347335 +123,1,5,-0.778483788472362,0.487636350882482 +123,2,5,-0.832547408091649,-1.11243033488235 +123,3,5,0.781049986904591,0.827943441317357 +123,4,5,1.93719864299517,1.30474185463297 +123,5,5,3.25017076982891,1.00995122345129 +123,6,5,3.27937626980564,-0.239104553722819 +123,7,5,4.35076039060436,0.0266452931840325 +123,8,5,6.55809778543279,1.62827554804094 +124,1,5,1.66505336109806,0.224471641403514 +124,2,5,2.54636521588373,1.32733417648743 +124,3,5,2.94018350452701,1.22087808423221 +124,4,5,4.51703350827818,2.33885389828128 +124,5,5,4.76615099588444,0.707703574879208 +124,6,5,6.26301130125635,0.776125789206827 +124,7,5,7.98807350309959,2.64003402044301 +124,8,5,9.07696275861868,2.75424262365915 +125,1,5,-0.661375272962652,-0.904203431104556 +125,2,5,-0.19141501906324,-2.00057691370819 +125,3,5,2.2572763690003,1.42411244115261 +125,4,5,2.30238628557481,0.379382668414416 +125,5,5,4.32766335558269,1.2811342012231 +125,6,5,4.86865859877547,1.04714883382016 +125,7,5,4.88679775991131,-0.791319149445128 +125,8,5,8.19580988744062,2.98488709582748 +126,1,5,2.02669586494134,1.0762251241184 +126,2,5,2.03839536130725,0.265971971121485 +126,3,5,2.340555294169,-0.69578445561187 +126,4,5,2.65277199665371,-0.442550353530725 +126,5,5,5.63320861178898,1.79575787389934 +126,6,5,6.53994546190099,1.76894704323395 +126,7,5,7.79843062999003,2.44602749114055 +126,8,5,8.87608870242685,1.75817286511645 +127,1,5,-0.563857024818526,-0.156448987787086 +127,2,5,0.21708535378725,-0.174292382076316 +127,3,5,1.97643976212899,1.77463764313705 +127,4,5,1.01956415828913,-0.275659338815904 +127,5,5,4.07631615794101,2.11903631104974 +127,6,5,3.50526693579532,-0.122681152702991 +127,7,5,5.577329956274,1.19045457380741 +127,8,5,6.97791024974003,2.02423219275841 +128,1,5,1.34481579211535,0.861458029642583 +128,2,5,2.91114674808841,2.94145316457291 +128,3,5,0.411559588885918,-1.56840578621019 +128,4,5,1.94188026139178,-0.112243055849294 +128,5,5,3.08317861906446,-0.718328271897956 +128,6,5,4.52077402426518,0.898012094923267 +128,7,5,5.1442334367507,-0.0524964533738077 +128,8,5,7.41166690609452,1.60433109079016 +129,1,5,-1.48135591083896,-0.82001958155921 +129,2,5,-0.889714732423265,-1.08608228686201 +129,3,5,0.0274164715970839,-0.409509539451528 +129,4,5,1.79488849290138,1.20965085731139 +129,5,5,1.11569888982619,-1.73606177807785 +129,6,5,3.56571832814136,0.493314105532728 +129,7,5,4.84855986856711,0.814896057813525 +129,8,5,7.27427307095587,2.58245253301935 +130,1,5,4.40774381715242,2.12344859493092 +130,2,5,2.80064069596532,-1.31211890698263 +130,3,5,6.28861716941455,2.95927758255358 +130,4,5,6.27945039892505,2.41086793388121 +130,5,5,7.66822147805663,2.35852794426131 +130,6,5,9.47116081111517,3.29981258635318 +130,7,5,9.88673763024453,2.06192006569063 +130,8,5,11.8613149626829,4.15564639783163 +131,1,5,-0.569163331816318,-0.207427383187324 +131,2,5,1.02984098203078,0.939430591396736 +131,3,5,1.0578355815448,0.715498121466303 +131,4,5,1.05520185584502,-0.090625806818172 +131,5,5,2.24168307725943,-1.10017590521199 +131,6,5,4.59663870165302,0.990741973615389 +131,7,5,5.75930333163443,0.851843043457212 +131,8,5,6.70708620907544,1.54389626256228 +132,1,5,0.591205186769052,-0.130626155980355 +132,2,5,1.1589259325373,-0.202876062076258 +132,3,5,3.32836751522793,1.61025937579053 +132,4,5,3.74716014021347,1.91478711350527 +132,5,5,4.66546418868319,0.93857617496847 +132,6,5,6.82958883254331,2.83826643795519 +132,7,5,7.36866438793335,2.69101683348126 +132,8,5,8.09425937526055,1.85136320315595 +133,1,5,0.873476498434196,1.12705437376173 +133,2,5,0.480780563122893,-0.691843515474433 +133,3,5,1.85161833512943,0.632731003646563 +133,4,5,1.39775132373049,-0.480872414901115 +133,5,5,4.08890623657727,1.49070383822783 +133,6,5,5.60026644201721,2.01184517778608 +133,7,5,5.98319372311153,1.83692955827851 +133,8,5,6.51364427848824,0.824144912034285 +134,1,5,2.70016549811941,1.95611017064726 +134,2,5,2.28617404011881,0.897157069603141 +134,3,5,2.85348738692319,1.09624909815415 +134,4,5,3.30275559240006,1.92317850968465 +134,5,5,4.07363625826727,0.506017248279934 +134,6,5,6.05507681782029,1.82326948120248 +134,7,5,7.04347504659972,1.49844603334988 +134,8,5,8.3797982264721,2.34404480179542 +135,1,5,2.03795880406481,1.52743827818623 +135,2,5,1.58369018287929,0.898746358232892 +135,3,5,2.85364815106018,1.21651160198197 +135,4,5,3.91584556106174,2.25419587768872 +135,5,5,5.70514990651692,2.91857961512948 +135,6,5,7.45775504904969,3.62531840457773 +135,7,5,6.70876346056756,1.4162352534048 +135,8,5,7.81289185078662,1.48902093117271 +136,1,5,-0.2899899790632,-0.292094046397651 +136,2,5,1.66032944864735,1.67717413891223 +136,3,5,1.62302350952826,0.959207839694747 +136,4,5,1.60764031729942,0.404516647411609 +136,5,5,3.0765152821645,-0.0434576078103781 +136,6,5,4.73197529549887,0.987247444487971 +136,7,5,6.01065469887713,1.76311796169309 +136,8,5,7.8888684721342,2.14751676905732 +137,1,5,-0.472770259308009,-1.63034354388372 +137,2,5,0.703320547923608,-0.84168684690953 +137,3,5,2.24870135445052,0.636139015743744 +137,4,5,3.21986646610328,1.35551803372199 +137,5,5,3.70626069519267,0.169672472002682 +137,6,5,5.27614128719532,0.494116618027424 +137,7,5,6.20550239182257,1.02149114287501 +137,8,5,7.35954945852176,0.976661195084213 +138,1,5,1.31663422236071,0.872307630241096 +138,2,5,2.03793861946783,0.996652044744247 +138,3,5,2.06663932330595,0.980937524655269 +138,4,5,2.83100864986312,0.95140246645021 +138,5,5,5.21476781358763,2.35636051698233 +138,6,5,5.87448819385866,1.56322752288033 +138,7,5,7.25248573753168,2.54972712340538 +138,8,5,9.1202193894302,3.42421333578633 +139,1,5,1.01321109219954,1.78913524219559 +139,2,5,1.03154268558093,0.743184113084972 +139,3,5,1.21547450136144,0.256127785123145 +139,4,5,1.2821622597343,0.268332815878624 +139,5,5,3.69765825610584,0.885644950137418 +139,6,5,3.61637408983226,0.146004642491575 +139,7,5,6.58804404374501,2.15664716642684 +139,8,5,6.4595679643428,0.542738384585469 +140,1,5,1.21545667391177,-0.0143639425025646 +140,2,5,1.01937829060826,-1.60433164195094 +140,3,5,3.94083045617597,1.7050635017166 +140,4,5,4.6710893740949,2.07100285527128 +140,5,5,5.17888824130879,1.10688610088494 +140,6,5,5.91813657697486,0.875792559466731 +140,7,5,8.56494017448838,2.55740907771151 +140,8,5,8.73329937620838,1.65065050156143 +141,1,5,1.05193174106587,-0.650271666107336 +141,2,5,1.83411195268629,-0.0739993421182924 +141,3,5,2.61203767782958,-0.032048128934526 +141,4,5,3.11422006010587,0.195054143008326 +141,5,5,5.93123653422299,2.16007473522667 +141,6,5,6.50995387172107,1.49167929029601 +141,7,5,8.15206088530035,1.62670035287595 +141,8,5,8.33795707466462,1.03764125661758 +142,1,5,0.962940133662365,-0.646467735353203 +142,2,5,2.32444776192153,0.8394448207575 +142,3,5,4.19929670155544,2.77539621859797 +142,4,5,3.68952328318662,1.58929655243913 +142,5,5,4.68352287309915,0.734194381111265 +142,6,5,6.34115964507115,1.39937676609297 +142,7,5,7.46123120770301,1.52851707979718 +142,8,5,9.33380441111876,2.87515226912447 +143,1,5,-1.45369931242863,-0.480020417088642 +143,2,5,-1.45445067900238,-0.655624266476159 +143,3,5,-0.689188791907915,-0.837190224262842 +143,4,5,0.86436278483194,0.381173721024018 +143,5,5,2.75579024721521,1.07341496790521 +143,6,5,3.45377515839231,0.643032219476916 +143,7,5,3.81802311188537,-0.105796278074846 +143,8,5,6.05951515987701,1.6102568666402 +144,1,5,-1.12008777483357,0.152764737351267 +144,2,5,0.0824661810151248,0.3362232483651 +144,3,5,0.153754279534135,-0.328393362473512 +144,4,5,1.24092576366195,0.924488210480293 +144,5,5,2.33865431852693,0.0926271402463777 +144,6,5,4.97983574733352,2.28537831365848 +144,7,5,4.27669440271291,-0.268234999768268 +144,8,5,6.58348918446021,1.69258708487871 +145,1,5,-0.504794839455285,-0.232920157565393 +145,2,5,-1.57603910528077,-1.80666525599435 +145,3,5,0.175094703293334,-0.778782064254006 +145,4,5,0.241640422018361,-1.88399420822314 +145,5,5,3.60185097449028,2.11046122969881 +145,6,5,5.41974252837318,2.71598163573764 +145,7,5,5.62627527597264,1.31681948745583 +145,8,5,5.07845163040229,-0.743692558798233 +146,1,5,-0.197832531022819,-1.62913766999719 +146,2,5,3.02079461362776,2.28806568818188 +146,3,5,2.6374354249163,0.827892821664195 +146,4,5,3.29803429842669,0.963611543521269 +146,5,5,4.14873722373039,-0.360640252236841 +146,6,5,5.72498180097135,1.14719770131185 +146,7,5,7.83616956906355,2.44437282144745 +146,8,5,8.2325836692246,1.84492945262052 +147,1,5,1.76724100129912,1.05862857352631 +147,2,5,1.75056621463708,0.237508839065209 +147,3,5,3.27019319146027,1.86775462406415 +147,4,5,3.26814850341522,0.757297222173829 +147,5,5,5.6070724368343,2.48636856519751 +147,6,5,5.98028055166425,1.22210376278331 +147,7,5,8.70493314877934,3.5926205422974 +147,8,5,9.02830926616142,3.22160607502552 +148,1,5,1.61066921397995,0.357663216151288 +148,2,5,2.03645045545274,0.915398567226239 +148,3,5,2.25958998950705,-0.405257044340041 +148,4,5,5.26033313005221,3.31570647946178 +148,5,5,4.73755419067294,0.962964689348886 +148,6,5,6.54081305063927,2.02608237480181 +148,7,5,6.95471445811987,0.807864195713159 +148,8,5,8.29547625953291,1.63565013830851 +149,1,5,-0.147943218042671,-1.02487442741769 +149,2,5,1.95707603710998,1.3943479686944 +149,3,5,2.33307829948571,0.840485712799394 +149,4,5,3.40285452950249,2.19252319386659 +149,5,5,4.55970308871628,1.27521632864607 +149,6,5,6.45882522764751,2.31805907839815 +149,7,5,5.42540390567569,-0.345061586759475 +149,8,5,7.63883595556223,1.58014145670581 +150,1,5,-0.617689385415545,-0.0143116990083429 +150,2,5,-0.697059173007586,0.0969207250110421 +150,3,5,1.47921091776732,2.08457751648705 +150,4,5,1.42148616128127,1.14127623204203 +150,5,5,2.66617724689581,0.432084965868309 +150,6,5,4.11294900953403,0.850674253260925 +150,7,5,5.01637671542871,1.36876324104989 +150,8,5,7.01553198368062,2.38800506349527 +151,1,5,1.89871521453286,1.85033849658898 +151,2,5,0.937384657006892,-0.452829042942711 +151,3,5,3.17155349969983,2.17223847904036 +151,4,5,2.90845176275848,1.37241672118298 +151,5,5,4.72663318590002,1.36635372902425 +151,6,5,5.46705389691077,1.48167835423671 +151,7,5,6.99608264210803,1.91502463802759 +151,8,5,7.99781125471169,2.02923840478197 +152,1,5,-1.14127484766791,0.327326619873874 +152,2,5,-0.182434062811993,0.287710724568007 +152,3,5,-0.745369247609964,-0.774721244608801 +152,4,5,-0.350835445710394,-0.802776409512582 +152,5,5,2.13131960657143,0.494739390619884 +152,6,5,2.47441842240872,-0.212792184112811 +152,7,5,4.35918286156783,0.829125408683994 +152,8,5,6.29422764217062,2.40159435005775 +153,1,5,0.556831440386952,0.665259769747359 +153,2,5,0.543922906146594,0.354034640012806 +153,3,5,0.899319270538539,0.00134333147644178 +153,4,5,2.34950609129305,0.985273613614562 +153,5,5,3.79451797488711,1.11864009165572 +153,6,5,4.24072993615366,0.55999177989328 +153,7,5,4.90006543776333,0.426620751060023 +153,8,5,6.8173911793278,1.24752665002502 +154,1,5,-2.454710133623,-1.73275287395467 +154,2,5,-3.01269779670144,-2.83791549098717 +154,3,5,-1.26834869126702,-0.693864440659621 +154,4,5,0.0434706893151742,0.172035097889187 +154,5,5,2.69012691738957,1.43260393409544 +154,6,5,0.600417737682823,-2.55723517706445 +154,7,5,3.52574597868785,0.258252978863067 +154,8,5,4.99525110002238,0.628885313121212 +155,1,5,1.32892730517377,2.0588926930312 +155,2,5,0.605909491284177,0.363583971466957 +155,3,5,-0.887265031965691,-1.98532475047622 +155,4,5,1.28068669620766,-0.0306557114116282 +155,5,5,2.06093840749504,-0.809199176761032 +155,6,5,4.47555899957007,0.726181785887472 +155,7,5,5.96731137901586,1.9587721325742 +155,8,5,7.18476370394804,2.36119595844732 +156,1,5,-1.12275403881224,-0.98034547447058 +156,2,5,-0.775000512272295,-1.43166233633139 +156,3,5,0.8386723611998,0.587249586385581 +156,4,5,1.65262644245657,1.30575243626864 +156,5,5,2.89735897130383,0.557543417881075 +156,6,5,3.92904413555365,0.993996205677497 +156,7,5,4.76301743929591,0.027560102459073 +156,8,5,5.59200844368766,0.464471109197762 +157,1,5,0.409457312299163,-0.177498018773596 +157,2,5,2.02369167277452,1.10069779453003 +157,3,5,3.02829235440927,2.44286423515299 +157,4,5,1.76319677289517,-0.212938688328704 +157,5,5,4.29590517124187,1.1943715165043 +157,6,5,6.01362167789406,1.86192755397807 +157,7,5,7.39351863810096,2.73141204545046 +157,8,5,6.66396927239599,0.269015731000689 +158,1,5,1.30940160117584,0.0969498527215405 +158,2,5,2.70826104409084,1.79142650332473 +158,3,5,2.54364739129199,0.439683717677784 +158,4,5,4.47967282257778,3.00805244853183 +158,5,5,5.49335732557412,2.28732376414956 +158,6,5,5.36151321051047,0.263254387840109 +158,7,5,6.62166170056758,0.747038110396044 +158,8,5,9.00961378176761,3.02395054462662 +159,1,5,1.7077615873367,1.60602621875854 +159,2,5,0.718496058012348,-0.970985558493463 +159,3,5,3.24768599482439,1.96929554994182 +159,4,5,3.59004904573896,1.87558275151154 +159,5,5,3.69400251267176,0.418519430159467 +159,6,5,6.26159926360142,2.80619787962909 +159,7,5,5.90598518192014,0.701683016241373 +159,8,5,8.80041097485551,3.13096370457926 +160,1,5,0.230700013458342,-0.797762563632461 +160,2,5,1.41039197170571,0.312617015081001 +160,3,5,1.83611483263249,0.58195635996553 +160,4,5,2.65819436323201,1.31376530688764 +160,5,5,4.89443125176649,1.91228061120817 +160,6,5,5.93567340949925,2.12932188354605 +160,7,5,5.95132889280581,0.659202325596497 +160,8,5,8.64244823953566,3.31802646155642 +161,1,5,2.02221088823274,0.70900494368554 +161,2,5,1.97655954590255,-0.101595754530586 +161,3,5,3.30075443616178,0.896162475984956 +161,4,5,3.64563220216716,0.964832434360099 +161,5,5,5.93026407347414,1.36753323271292 +161,6,5,7.14543047501975,1.60139093342001 +161,7,5,8.43031728683619,2.72281285047831 +161,8,5,9.07670018977173,1.47166882489415 +162,1,5,-0.0885302927728979,0.399294361795797 +162,2,5,-0.326517092557636,-0.441747217267244 +162,3,5,0.914180651272431,0.061836311148676 +162,4,5,1.62820897384065,0.121591651377459 +162,5,5,2.81177041054876,-0.0586521954014644 +162,6,5,4.7350696775206,1.60109239380747 +162,7,5,6.02822117553722,1.74603241908587 +162,8,5,6.01084621293502,0.356636165100454 +163,1,5,-0.0596015308801033,-0.0455986493736725 +163,2,5,1.79640628445108,1.72697645937416 +163,3,5,0.525661198221471,-0.617128357721301 +163,4,5,1.52192424239323,0.496601924987153 +163,5,5,4.82202913001597,2.28326666838494 +163,6,5,5.32334840593243,1.74333593566425 +163,7,5,5.11456486784074,0.043366656925885 +163,8,5,6.91895056040614,1.51958488173758 +164,1,5,1.24981239893391,-0.596176668269094 +164,2,5,2.85064306286328,1.00588526851499 +164,3,5,3.01054179144325,0.533721688173982 +164,4,5,3.98227712139697,1.05528492242416 +164,5,5,6.40394780678981,2.618350930119 +164,6,5,6.2832047802089,0.812421879035756 +164,7,5,8.1672746014727,1.759053358291 +164,8,5,10.0974368341878,3.39931316393989 +165,1,5,-0.156990683483412,-0.78981587014071 +165,2,5,1.18943856777083,0.637097405063376 +165,3,5,1.12824617239083,-0.306074135769315 +165,4,5,2.30889386922191,1.0242101138029 +165,5,5,3.7466072098793,0.509006983506669 +165,6,5,4.56192770056495,-0.00127957505619736 +165,7,5,7.03487304636593,1.96567485389757 +165,8,5,8.4714877511521,2.48684081885404 +166,1,5,3.18989969774841,2.69002083708872 +166,2,5,1.99222607799238,0.0910761975131995 +166,3,5,1.76247343827846,-0.486078126745501 +166,4,5,3.69636983610338,1.96011038977949 +166,5,5,4.57279789395339,0.314666305428966 +166,6,5,6.68272175392469,1.88940791885843 +166,7,5,8.1818990545623,2.97096855450566 +166,8,5,8.098541518959,0.600688471824447 +167,1,5,0.017420875838024,0.267512784637094 +167,2,5,1.44009292313862,1.84650200528859 +167,3,5,-0.317534016646331,-0.952623566944287 +167,4,5,1.82818450808814,0.664295548488192 +167,5,5,3.72950339351959,1.27615975936446 +167,6,5,4.81372466206316,1.91624958576174 +167,7,5,4.20851234235136,-1.0384831417041 +167,8,5,6.33640119527538,0.369536656105111 +168,1,5,2.21554479058115,1.85439587813746 +168,2,5,1.10691502236577,-0.506567052267724 +168,3,5,2.12831196871073,0.600036767138137 +168,4,5,3.58902297041998,2.0880017059491 +168,5,5,5.36834429054217,2.21785497605013 +168,6,5,5.81933611738649,1.43869509321363 +168,7,5,6.20052425306353,0.631614975379835 +168,8,5,8.69998225168447,2.62855854154239 +169,1,5,1.72801797128844,1.1036914106682 +169,2,5,1.86132961593022,0.615069828931896 +169,3,5,3.48141084752028,2.06118377476325 +169,4,5,3.58943145698708,1.24292230134954 +169,5,5,4.46606693950833,0.378158185927539 +169,6,5,6.86210056145923,2.50878537452382 +169,7,5,8.07321943249858,2.42307181520848 +169,8,5,9.16737884720858,3.06518545169227 +170,1,5,1.58624310310312,1.98573115863854 +170,2,5,1.20726106474307,-0.143683359581076 +170,3,5,1.86470822126008,0.508484215806388 +170,4,5,2.07417521312868,0.294061001816909 +170,5,5,3.07265054246623,-0.150609612599891 +170,6,5,6.3411151347361,2.05688914323233 +170,7,5,6.40795904133672,1.28872315091264 +170,8,5,6.8641310767981,0.449509886692238 +171,1,5,2.40122838688237,1.82483542049904 +171,2,5,2.63451486907382,1.33192640094912 +171,3,5,1.63790606466143,-1.02095319735599 +171,4,5,3.92998727516124,1.62703385439317 +171,5,5,6.19815402873707,2.6151239798774 +171,6,5,6.98116394736747,1.40189762120897 +171,7,5,7.73176296426306,2.4284734839466 +171,8,5,8.38591196342705,1.59775148118566 +172,1,5,0.543701004883259,0.743583555575924 +172,2,5,1.6882901447959,1.06580331612298 +172,3,5,2.43592547719387,0.698513205284496 +172,4,5,1.31519592982189,-0.884377200402778 +172,5,5,3.90873950789163,0.618078009504849 +172,6,5,4.74820923398678,0.393988592818543 +172,7,5,6.91212875917755,2.23470005230275 +172,8,5,8.18453959319043,2.74960576432532 +173,1,5,0.223926202497233,-1.08317492726054 +173,2,5,1.62532297653829,0.14578286826823 +173,3,5,2.72948547948316,1.00437540195549 +173,4,5,3.36799225379778,1.2192872438379 +173,5,5,4.2002435112666,-0.0239346123407163 +173,6,5,5.02672988429262,0.419490587408487 +173,7,5,7.39447953929293,1.96462151697332 +173,8,5,7.50473878776479,0.79111861645914 +174,1,5,-0.062279223185734,-0.800569309777905 +174,2,5,2.28294923986261,1.11192108076678 +174,3,5,2.07252256827076,-0.00406676845854403 +174,4,5,2.25803068316135,0.0156301549143695 +174,5,5,4.57241010003713,0.876576523590895 +174,6,5,5.72861148248077,1.38267463340739 +174,7,5,6.12373732053397,0.153479116871984 +174,8,5,8.99562753772841,2.99826887898041 +175,1,5,1.8311139680276,1.62694159715597 +175,2,5,1.40988896238961,-0.227107454737416 +175,3,5,3.48934762439458,1.99509514060435 +175,4,5,3.67121168693528,2.16176761019424 +175,5,5,4.48973447676268,1.18059774483349 +175,6,5,5.03773634366656,-0.0400876599469258 +175,7,5,6.48165382408609,0.633189786862714 +175,8,5,5.63166244803344,-1.46424365055815 +176,1,5,0.0318609352147969,0.457367995808786 +176,2,5,1.14293312862736,1.34370202706605 +176,3,5,1.43752677491549,1.28112527674039 +176,4,5,0.511324421688113,-0.683583046233711 +176,5,5,2.97366994824381,0.089741139719893 +176,6,5,4.46548390150621,0.849184022004209 +176,7,5,5.50261969336804,1.15663363256289 +176,8,5,6.53281941856673,0.682939466549233 +177,1,5,-0.682047389926087,0.261031340950469 +177,2,5,-0.165487056007277,-0.497631883241484 +177,3,5,0.319472081490931,-0.366098051106175 +177,4,5,1.4998325273626,0.652620614415509 +177,5,5,1.77992146403311,-0.991543174474815 +177,6,5,4.63629829101393,1.9017812351622 +177,7,5,4.79080146694871,0.658840020665338 +177,8,5,6.68551998639114,1.25849759869894 +178,1,5,0.965855959004923,0.211717500801076 +178,2,5,1.6512085203538,0.412118830105155 +178,3,5,2.45698972440439,0.490127719890076 +178,4,5,2.49321007134463,-0.267464377476686 +178,5,5,5.06791736412205,1.51900649351998 +178,6,5,5.51637510912191,0.348900189579595 +178,7,5,6.16037338292752,0.405959886521623 +178,8,5,8.63685845705989,2.28738405521337 +179,1,5,1.78997376268719,1.21911497430724 +179,2,5,2.13122294993469,0.72628390597025 +179,3,5,3.38530599373524,1.60479869260233 +179,4,5,2.92455954600394,0.585607777522061 +179,5,5,5.11651891765092,0.66437556942367 +179,6,5,6.23826889097905,1.63876153951074 +179,7,5,6.96423028376725,0.604358270813984 +179,8,5,7.88288497387116,1.14697262522618 diff --git a/benchmarks/data/didimputation_golden.json b/benchmarks/data/didimputation_golden.json index dd96cb1c..9bccf032 100644 --- a/benchmarks/data/didimputation_golden.json +++ b/benchmarks/data/didimputation_golden.json @@ -18,5 +18,18 @@ "horizons": [0, 1, 2, 3, 4, 5], "att": [0.9929366801146, 1.512964957441, 2.006499440277, 2.499854710124, 2.964817090473, 3.46735160262], "se": [0.02879160889215, 0.02525385632215, 0.03015538910066, 0.02904846159207, 0.04306469246781, 0.04307353806204] + }, + "covariate": { + "panel": "didimputation_covariate_panel.csv", + "first_stage": "~ 0 + x | unit + time", + "overall": { + "att": 2.046600195474, + "se": 0.02291362542002 + }, + "event_study": { + "horizons": [0, 1, 2, 3, 4, 5], + "att": [0.9859820336658, 1.51123044217, 2.000530295829, 2.486773170707, 3.032147852099, 3.464822217904], + "se": [0.02789721768346, 0.02909412547708, 0.03126943221026, 0.03125394813925, 0.0399867413601, 0.04416055181866] + } } } diff --git a/docs/methodology/REGISTRY.md b/docs/methodology/REGISTRY.md index 01e72b64..21ae91a7 100644 --- a/docs/methodology/REGISTRY.md +++ b/docs/methodology/REGISTRY.md @@ -1563,7 +1563,7 @@ Observation weights `v_it`: - For treated `(i,t) in Omega_1`: `v_it = w_it` (the aggregation weight) - For untreated `(i,t) in Omega_0` (FE-only **and** covariate cases): the exact imputation projection `v_untreated = -A_0 (A_0' A_0)^{-1} A_1' w_treated` (survey-weighted, with the left WLS weight factor `W_0`: `-W_0 A_0 (A_0' W_0 A_0)^{-1} A_1' w_treated`), where `A_0`, `A_1` are the two-way-FE (all unit dummies + time dummies dropping the first; plus any covariates) design matrices for untreated/treated observations. -**Note on v_it derivation:** The paper's Supplementary Proposition A3 gives the explicit `v_it^*` formula; it is not in the reviewed main-article PDF, so the projection is validated *empirically* against R `didimputation` (`tests/test_methodology_imputation.py::TestImputationDiDParityR`, SEs match to ~1e-10). **Deviation note (superseded closed form):** the FE-only path previously used a closed form `-(w_i./n_{0,i} + w_.t/n_{0,t} - w../N_0)`, which is exact only for a *balanced* untreated set; because `Omega_0` is generically unbalanced in staggered designs (treated observations are removed), that form biased the SE (~27% on the parity panel) and was replaced by the exact projection above during the ImputationDiD methodology validation. A genuinely rank-deficient `A_0' A_0` (e.g. an unidentified period FE) routes to a dense least-squares fallback with a `UserWarning`. +**Note on v_it derivation:** The paper's Supplementary Proposition A3 gives the explicit `v_it^*` formula; it is not in the reviewed main-article PDF, so the projection is validated *empirically* against R `didimputation` (`tests/test_methodology_imputation.py::TestImputationDiDParityR`, SEs match to ~1e-10; the covariate branch — first stage `y ~ x | unit + time` on the untreated sample — is anchored separately by `TestImputationDiDCovariateParityR` on a time-varying-X panel, SEs ~2e-10). **Deviation note (superseded closed form):** the FE-only path previously used a closed form `-(w_i./n_{0,i} + w_.t/n_{0,t} - w../N_0)`, which is exact only for a *balanced* untreated set; because `Omega_0` is generically unbalanced in staggered designs (treated observations are removed), that form biased the SE (~27% on the parity panel) and was replaced by the exact projection above during the ImputationDiD methodology validation. A genuinely rank-deficient `A_0' A_0` (e.g. an unidentified period FE) routes to a dense least-squares fallback with a `UserWarning`. Auxiliary model residuals (Equation 8): - Partition `Omega_1` into groups `G_g` (default: cohort × horizon) diff --git a/tests/test_methodology_imputation.py b/tests/test_methodology_imputation.py index 49f308ec..1fe9c13f 100644 --- a/tests/test_methodology_imputation.py +++ b/tests/test_methodology_imputation.py @@ -1171,3 +1171,80 @@ def test_event_study_ses_match_r(self, golden: dict, panel: pd.DataFrame) -> Non got = res.event_study_effects[h]["se"] assert np.isfinite(got), f"non-finite SE at h={h}" assert got == pytest.approx(se, abs=1e-7), f"h={h}" + + +COVARIATE_PANEL_PATH = ( + Path(__file__).parent.parent / "benchmarks" / "data" / "didimputation_covariate_panel.csv" +) + + +@pytest.fixture(scope="module") +def covariate_panel(golden: dict) -> pd.DataFrame: + if "covariate" not in golden or not COVARIATE_PANEL_PATH.is_file(): + pytest.skip( + "R didimputation covariate parity fixture not present. Run " + "`Rscript benchmarks/R/generate_didimputation_golden.R` to regenerate " + "the golden JSON (covariate block) and " + "`benchmarks/data/didimputation_covariate_panel.csv`." + ) + return pd.read_csv(COVARIATE_PANEL_PATH) + + +class TestImputationDiDCovariateParityR: + """Pin the COVARIATE branch of ImputationDiD against R ``didimputation``. + + The no-covariate class above validates the untreated ``v_it`` projection + and clustering on the FE-only design; this class anchors the covariate + path — the first-stage imputation model becomes ``y ~ x | unit + time`` + on the untreated sample (R ``first_stage = ~ 0 + x | unit + time``, + diff-diff ``covariates=["x"]``) with a time-varying, unit-correlated + ``x``. Observed agreement on the reference platform: SE ~2e-10 (overall + and every horizon), ATT ~2e-7 (same platform class as the no-covariate + anchor); asserted at the class-wide abs=1e-6 (ATT) / abs=1e-7 (SE) + tolerances for cross-platform robustness. Closes the TODO row + "ImputationDiD covariate-path variance lacks a dedicated parity anchor". + """ + + @staticmethod + def _fit(panel: pd.DataFrame, **kwargs): + return ImputationDiD().fit( + panel, + outcome="y", + unit="unit", + time="time", + first_treat="first_treat", + covariates=["x"], + **kwargs, + ) + + def test_overall_att_matches_r(self, golden: dict, covariate_panel: pd.DataFrame) -> None: + res = self._fit(covariate_panel) + assert res.overall_att == pytest.approx(golden["covariate"]["overall"]["att"], abs=1e-6) + + def test_overall_se_matches_r(self, golden: dict, covariate_panel: pd.DataFrame) -> None: + res = self._fit(covariate_panel) + assert res.overall_se == pytest.approx(golden["covariate"]["overall"]["se"], abs=1e-7) + + def test_event_study_atts_match_r(self, golden: dict, covariate_panel: pd.DataFrame) -> None: + res = self._fit(covariate_panel, aggregate="event_study") + assert res.event_study_effects is not None + es = golden["covariate"]["event_study"] + assert len(es["horizons"]) > 0 + for h, att in zip(es["horizons"], es["att"]): + assert h in res.event_study_effects, f"missing horizon {h}" + got = res.event_study_effects[h]["effect"] + assert np.isfinite(got), f"non-finite ATT at h={h}" + assert got == pytest.approx(att, abs=1e-6), f"h={h}" + + def test_event_study_ses_match_r(self, golden: dict, covariate_panel: pd.DataFrame) -> None: + """Per-horizon covariate-path SEs match R (the variance machinery under + a covariate-augmented first stage) — ~2e-10 observed on the reference + platform, asserted at abs=1e-7 for cross-platform robustness.""" + res = self._fit(covariate_panel, aggregate="event_study") + assert res.event_study_effects is not None + es = golden["covariate"]["event_study"] + for h, se in zip(es["horizons"], es["se"]): + assert h in res.event_study_effects, f"missing horizon {h}" + got = res.event_study_effects[h]["se"] + assert np.isfinite(got), f"non-finite SE at h={h}" + assert got == pytest.approx(se, abs=1e-7), f"h={h}"