@@ -625,16 +625,17 @@ class ChaisemartinDHaultfoeuilleResults:
625625 )
626626 # Per-path joint sup-t simultaneous-band metadata. Keyed by path
627627 # tuple; each entry holds `{"crit_value", "alpha", "n_bootstrap",
628- # "method", "n_valid_horizons"}`. Populated when `by_path` is a
629- # positive int AND `n_bootstrap > 0`. The joint band itself is
630- # written per-horizon as `cband_conf_int` on
631- # `path_effects[path]["horizons"][l]` (mirrors the OVERALL
632- # `event_study_effects[l]["cband_conf_int"]` pattern at
633- # `chaisemartin_dhaultfoeuille.py:2865-2875`). Empty-state contract:
634- # `None` when not requested (no bootstrap or `by_path is None`); `{}`
635- # when requested but no path passed both gates (>=2 valid horizons
636- # AND a strict majority — more than 50% — of finite sup-t draws).
637- # The bands cover joint inference
628+ # "method", "n_valid_horizons"}`. Populated when EITHER `by_path` is
629+ # a positive int OR `paths_of_interest` is non-empty AND
630+ # `n_bootstrap > 0`. The joint band itself is written per-horizon as
631+ # `cband_conf_int` on `path_effects[path]["horizons"][l]` (mirrors
632+ # the OVERALL `event_study_effects[l]["cband_conf_int"]` pattern
633+ # populated alongside the bootstrap propagation in
634+ # `chaisemartin_dhaultfoeuille.py::fit`). Empty-state contract:
635+ # `None` when not requested (no bootstrap, or both `by_path` and
636+ # `paths_of_interest` are `None`); `{}` when requested but no path
637+ # passed both gates (>=2 valid horizons AND a strict majority — more
638+ # than 50% — of finite sup-t draws). The bands cover joint inference
638639 # WITHIN a single path across horizons; they do NOT provide
639640 # simultaneous coverage across paths.
640641 path_sup_t_bands : Optional [Dict [Tuple [int , ...], Dict [str , Any ]]] = field (
0 commit comments