You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| TwoStageDiD GMM score logic duplicated between analytic/bootstrap with inconsistent NaN/overflow handling |`two_stage.py`, `two_stage_bootstrap.py`|#156|Medium|
63
-
| ImputationDiD weight construction duplicated between aggregation and bootstrap (drift risk) -- has explicit code comment acknowledging duplication |`imputation.py`, `imputation_bootstrap.py`|#141|Medium|
64
-
| ImputationDiD dense `(A0'A0).toarray()` scales O((U+T+K)^2), OOM risk on large panels |`imputation.py`|#141| Medium |
61
+
|~~TwoStageDiD & ImputationDiD bootstrap hardcodes Rademacher only; no `bootstrap_weights` parameter unlike CallawaySantAnna~~|~~`two_stage_bootstrap.py`, `imputation_bootstrap.py`~~|~~#156, #141~~|✅ Fixed: Added `bootstrap_weights` parameter to both estimators|
62
+
|~~TwoStageDiD GMM score logic duplicated between analytic/bootstrap with inconsistent NaN/overflow handling~~|~~`two_stage.py`, `two_stage_bootstrap.py`~~|~~#156~~|✅ Fixed: Unified via `_compute_gmm_scores()` static method|
63
+
|~~ImputationDiD weight construction duplicated between aggregation and bootstrap (drift risk)~~|~~`imputation.py`, `imputation_bootstrap.py`~~|~~#141~~|✅ Fixed: Extracted `_compute_target_weights()` helper in `imputation_bootstrap.py`|
64
+
| ImputationDiD dense `(A0'A0).toarray()` scales O((U+T+K)^2), OOM risk on large panels |`imputation.py`|#141| Medium (deferred — only triggers when sparse solver fails; fixing requires sparse least-squares alternatives) |
65
65
66
66
#### Performance
67
67
68
68
| Issue | Location | PR | Priority |
69
69
|-------|----------|----|----------|
70
-
| TwoStageDiD per-column `.toarray()` in loop for cluster scores |`two_stage_bootstrap.py`|#156|Medium|
70
+
|~~TwoStageDiD per-column `.toarray()` in loop for cluster scores~~|~~`two_stage_bootstrap.py`~~|~~#156~~|✅ Fixed: Single `.toarray()` call replaces per-column loop|
71
71
| ImputationDiD event-study SEs recompute full conservative variance per horizon (should cache A0/A1 factorization) |`imputation.py`|#141| Low |
|~~TROP `n_bootstrap >= 2` validation missing (can yield 0/NaN SE silently)~~|~~`trop.py:462`~~|~~#124~~|✅ Fixed: Added `ValueError` for `n_bootstrap < 2`|
83
+
|~~SunAbraham deprecated `min_pre_periods`/`min_post_periods` still in `fit()` docstring~~|~~`sun_abraham.py:458-487`~~|~~#153~~|✅ Fixed: Removed deprecated params from `fit()`|
84
84
| R comparison tests spawn separate `Rscript` per test (slow CI) |`tests/test_methodology_twfe.py:294`|#139| Low |
85
-
| Rust TROP bootstrap SE returns 0.0 instead of NaN for <2 samples |`rust/src/trop.rs:1038-1054`|#115|Low|
85
+
|~~Rust TROP bootstrap SE returns 0.0 instead of NaN for <2 samples~~|~~`rust/src/trop.rs:1038-1054`~~|~~#115~~|✅ Already fixed: Returns `f64::NAN` at `rust/src/trop.rs:1034`|
0 commit comments