From 139ce9e9af44ff5f023f399a932efa6a395c1034 Mon Sep 17 00:00:00 2001 From: igerber Date: Sat, 7 Mar 2026 17:12:29 -0500 Subject: [PATCH 1/2] Add short aliases for all estimators Introduce 12 convenience aliases (DiD, TWFE, EventStudy, SDiD, CS, CDiD, SA, BJS, Gardner, DDD, Stacked, Bacon) so users can write concise imports like `from diff_diff import DiD, TWFE, CS`. Co-Authored-By: Claude Opus 4.6 --- diff_diff/__init__.py | 27 +++++++++++++++++++++++++++ docs/api/estimators.rst | 6 ++++++ docs/quickstart.rst | 3 +++ tests/test_aliases.py | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 tests/test_aliases.py diff --git a/diff_diff/__init__.py b/diff_diff/__init__.py index f6eb9a20..2fe3f160 100644 --- a/diff_diff/__init__.py +++ b/diff_diff/__init__.py @@ -159,6 +159,20 @@ load_mpdta, ) +# Estimator aliases — short names for convenience +DiD = DifferenceInDifferences +TWFE = TwoWayFixedEffects +EventStudy = MultiPeriodDiD +SDiD = SyntheticDiD +CS = CallawaySantAnna +CDiD = ContinuousDiD +SA = SunAbraham +BJS = ImputationDiD +Gardner = TwoStageDiD +DDD = TripleDifference +Stacked = StackedDiD +Bacon = BaconDecomposition + __version__ = "2.6.0" __all__ = [ # Estimators @@ -174,6 +188,19 @@ "TripleDifference", "TROP", "StackedDiD", + # Estimator aliases (short names) + "DiD", + "TWFE", + "EventStudy", + "SDiD", + "CS", + "CDiD", + "SA", + "BJS", + "Gardner", + "DDD", + "Stacked", + "Bacon", # Bacon Decomposition "BaconDecomposition", "BaconDecompositionResults", diff --git a/docs/api/estimators.rst b/docs/api/estimators.rst index 01764379..68f14848 100644 --- a/docs/api/estimators.rst +++ b/docs/api/estimators.rst @@ -17,6 +17,12 @@ for backward compatibility, so you can import any of them using: from diff_diff import DifferenceInDifferences, TwoWayFixedEffects, MultiPeriodDiD, SyntheticDiD +Short aliases are available for all estimators: + +.. code-block:: python + + from diff_diff import DiD, TWFE, EventStudy, SDiD, CS, CDiD, SA, BJS, Gardner, DDD, Stacked, Bacon + .. module:: diff_diff.estimators DifferenceInDifferences diff --git a/docs/quickstart.rst b/docs/quickstart.rst index 41a3690b..f79a7fd3 100644 --- a/docs/quickstart.rst +++ b/docs/quickstart.rst @@ -22,6 +22,9 @@ The simplest DiD design has two groups (treated/control) and two periods (pre/po import pandas as pd from diff_diff import DifferenceInDifferences, generate_did_data + # Tip: short aliases are also available, e.g. DiD, TWFE, CS, DDD + # from diff_diff import DiD + # Generate synthetic data with a known treatment effect data = generate_did_data( n_units=100, diff --git a/tests/test_aliases.py b/tests/test_aliases.py new file mode 100644 index 00000000..a6d51112 --- /dev/null +++ b/tests/test_aliases.py @@ -0,0 +1,35 @@ +"""Tests for estimator short aliases.""" + +import diff_diff + + +def test_alias_identity(): + """Each alias is the same class object as the full name.""" + assert diff_diff.DiD is diff_diff.DifferenceInDifferences + assert diff_diff.TWFE is diff_diff.TwoWayFixedEffects + assert diff_diff.EventStudy is diff_diff.MultiPeriodDiD + assert diff_diff.SDiD is diff_diff.SyntheticDiD + assert diff_diff.CS is diff_diff.CallawaySantAnna + assert diff_diff.CDiD is diff_diff.ContinuousDiD + assert diff_diff.SA is diff_diff.SunAbraham + assert diff_diff.BJS is diff_diff.ImputationDiD + assert diff_diff.Gardner is diff_diff.TwoStageDiD + assert diff_diff.DDD is diff_diff.TripleDifference + assert diff_diff.Stacked is diff_diff.StackedDiD + assert diff_diff.Bacon is diff_diff.BaconDecomposition + + +def test_aliases_in_all(): + """All aliases are listed in __all__.""" + aliases = [ + "DiD", "TWFE", "EventStudy", "SDiD", "CS", "CDiD", + "SA", "BJS", "Gardner", "DDD", "Stacked", "Bacon", + ] + for alias in aliases: + assert alias in diff_diff.__all__, f"{alias} missing from __all__" + + +def test_alias_instantiation(): + """Instantiating via alias produces the correct type.""" + model = diff_diff.DiD() + assert isinstance(model, diff_diff.DifferenceInDifferences) From 36f2d7530b46f23476875a90a310b1bcf6ee085b Mon Sep 17 00:00:00 2001 From: igerber Date: Sun, 8 Mar 2026 08:25:53 -0400 Subject: [PATCH 2/2] Fix alias docs wording: clarify TROP has no alias TROP already uses its short canonical name, so "all estimators have aliases" was inaccurate. Update docs/api/estimators.rst and docs/quickstart.rst to say "most estimators" instead. Co-Authored-By: Claude Opus 4.6 --- docs/api/estimators.rst | 2 +- docs/quickstart.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api/estimators.rst b/docs/api/estimators.rst index 68f14848..92585015 100644 --- a/docs/api/estimators.rst +++ b/docs/api/estimators.rst @@ -17,7 +17,7 @@ for backward compatibility, so you can import any of them using: from diff_diff import DifferenceInDifferences, TwoWayFixedEffects, MultiPeriodDiD, SyntheticDiD -Short aliases are available for all estimators: +Most estimators have short aliases (``TROP`` already uses its short canonical name): .. code-block:: python diff --git a/docs/quickstart.rst b/docs/quickstart.rst index f79a7fd3..2ba32cec 100644 --- a/docs/quickstart.rst +++ b/docs/quickstart.rst @@ -22,7 +22,7 @@ The simplest DiD design has two groups (treated/control) and two periods (pre/po import pandas as pd from diff_diff import DifferenceInDifferences, generate_did_data - # Tip: short aliases are also available, e.g. DiD, TWFE, CS, DDD + # Tip: most estimators have short aliases, e.g. DiD, TWFE, CS, DDD # from diff_diff import DiD # Generate synthetic data with a known treatment effect