Skip to main content

diff-diff

diff-diff: Difference-in-Differences causal inference in Python - sklearn-like API with Callaway-Sant'Anna, Synthetic DiD, Honest DiD, and Event Studies

PyPI version Python versions License: MIT Downloads DOI

A Python library for Difference-in-Differences (DiD) causal inference - sklearn-like estimators with statsmodels-style outputs, built for econometricians, marketing analysts, and data scientists running campaign-lift, policy, and staggered-rollout analyses.

Installation

pip install diff-diff

For development:

git clone https://github.com/igerber/diff-diff.git
cd diff-diff
pip install -e ".[dev]"

Quick Start

import pandas as pd
from diff_diff import DifferenceInDifferences  # or: DiD

data = pd.DataFrame({
    'outcome': [10, 11, 15, 18, 9, 10, 12, 13],
    'treated': [1, 1, 1, 1, 0, 0, 0, 0],
    'post': [0, 0, 1, 1, 0, 0, 1, 1],
})

did = DifferenceInDifferences()
results = did.fit(data, outcome='outcome', treatment='treated', post='post')
print(results)              # DiDResults(ATT=3.0000, SE=1.7321, p=0.1583)
results.print_summary()     # full statsmodels-style table

Documentation

For AI Agents

If you are an AI agent or LLM using this library, call diff_diff.get_llm_guide() for a concise API reference with an 8-step practitioner workflow (based on Baker et al. 2025). The workflow ensures rigorous DiD analysis - testing assumptions, running sensitivity analysis, and checking robustness, not just calling fit().

from diff_diff import get_llm_guide

get_llm_guide()                 # concise API reference
get_llm_guide("practitioner")   # 8-step workflow (Baker et al. 2025)
get_llm_guide("full")           # comprehensive documentation
get_llm_guide("autonomous")     # autonomous-agent variant

The guides are bundled in the wheel - accessible from a pip install with no network access. After estimation, call practitioner_next_steps(results) for context-aware guidance on remaining diagnostic steps.

For Data Scientists

Measuring campaign lift? Evaluating a product launch? Rolling out a policy in waves? diff-diff handles the causal inference so you can focus on the business question.

  • Which method fits my problem? - start from your business scenario (campaign in some markets, staggered rollout, survey data) and find the right estimator
  • Getting started for practitioners - end-to-end walkthrough from marketing campaign to causal estimate to stakeholder-ready result
  • Brand awareness survey tutorial - full example with complex survey design, brand funnel analysis, and staggered rollouts
  • Have BRFSS/ACS/CPS individual records? Use aggregate_survey() to roll respondent-level microdata into a geographic-period panel with inverse-variance precision weights for second-stage DiD

BusinessReport and DiagnosticReport are experimental preview classes that produce plain-English output and a structured to_dict() schema from any fitted result - wording and schema will evolve. See docs/methodology/REPORTING.md for usage and stability notes.

Practitioner Workflow (Baker et al. 2025)

For rigorous DiD analysis, follow these 8 steps. Skipping diagnostic steps produces unreliable results.

  1. Define target parameter - ATT, group-time ATT(g,t), or event-study ATT_es(e). State whether weighted or unweighted.
  2. State identification assumptions - which parallel trends variant (unconditional, conditional, PT-GT-Nev, PT-GT-NYT), no-anticipation, overlap.
  3. Test parallel trends - simple 2x2: check_parallel_trends(), equivalence_test_trends(); staggered: inspect CS event-study pre-period coefficients (generic PT tests are invalid for staggered designs). Insignificant pre-trends do NOT prove PT holds.
  4. Choose estimator - staggered adoption -> CS/SA/BJS (NOT plain TWFE); few treated units -> SDiD; factor confounding -> TROP; simple 2x2 -> DiD. Run BaconDecomposition to diagnose TWFE bias.
  5. Estimate - estimator.fit(data, ...). Always print the cluster count first and choose inference method based on the result (cluster-robust if >= 50 clusters, wild bootstrap if fewer - for DifferenceInDifferences pass cluster=; TwoWayFixedEffects auto-clusters at unit level).
  6. Sensitivity analysis - compute_honest_did(results) for bounds under PT violations (MultiPeriodDiD, CS, or dCDH natively; the TwoWayFixedEffects event_study=True surface and a StackedDiD results.aggregate('event_study') container also admit - Stacked needs kappa_pre >= 2), run_all_placebo_tests() for 2x2 falsification, specification comparisons for staggered designs.
  7. Heterogeneity - CS: results.aggregate('group')/'event_study' (post-fit, no refit); SA: results.event_study_effects / to_dataframe(level='cohort'); Stacked: results.aggregate('event_study')/'simple' post-fit views (surface always computed since 3.9); EDiD: results.aggregate(...) post-fit from retained EIFs (3.9); ImputationDiD/TwoStageDiD: results.aggregate(...) post-fit from panel-backed kits (3.9); ContinuousDiD: results.aggregate('dose'/'simple'/'event_study') post-fit (3.9; dose/simple are views, event_study recomputes); subgroup re-estimation.
  8. Robustness - compare 2-3 estimators (CS vs SA vs BJS), report with and without covariates (shows whether conditioning drives identification), present pre-trends and sensitivity bounds.

Full guide: diff_diff.get_llm_guide("practitioner").

Estimators

  • DifferenceInDifferences - basic 2x2 DiD with robust/cluster-robust SEs, wild bootstrap, formula interface, and fixed effects
  • TwoWayFixedEffects - panel data DiD with unit and time fixed effects via within-transformation or dummies
  • MultiPeriodDiD - event study design with period-specific treatment effects for dynamic analysis (deprecated 3.9 - use TwoWayFixedEffects event_study=True)
  • CallawaySantAnna - Callaway & Sant'Anna (2021) group-time ATT estimator for staggered adoption
  • ChaisemartinDHaultfoeuille - de Chaisemartin & D'Haultfœuille (2020/2022) for reversible (non-absorbing) treatments with multi-horizon event study, normalized effects, cost-benefit delta, sup-t bands, and dynamic placebos. The most general option for treatments that switch on AND off (see also LPDiD/TROP non_absorbing). Alias DCDH.
  • SunAbraham - Sun & Abraham (2021) interaction-weighted estimator for heterogeneity-robust event studies
  • ImputationDiD - Borusyak, Jaravel & Spiess (2024) imputation estimator, most efficient under homogeneous effects
  • TwoStageDiD - Gardner (2022) two-stage estimator with GMM sandwich variance
  • SpilloverDiD - Butts (2021) ring-indicator spillover-aware DiD identifying direct effect on treated + per-ring spillover on near-control units; handles non-staggered and staggered timing; supports survey-design variance under survey_design= for HC1 / CR1 (Wave E.1 Binder TSL) and Conley (Wave E.2 panel-aware stratified-Conley sandwich on per-period PSU totals; extended in Wave E.2 follow-up to conley_lag_cutoff > 0 via panel-block composition with within-PSU serial Bartlett HAC — lag>0 requires an effective PSU via explicit survey_design.psu or injected cluster=<col>); SurveyDesign.subpopulation() preserves full-design n_psu / df_survey via zero-padded scores (Wave E.3, R svyrecvar(subset()) form)
  • SyntheticDiD - Synthetic DiD combining standard DiD and synthetic control for few treated units
  • SyntheticControl - Abadie, Diamond & Hainmueller (2010) classic synthetic control for a single treated unit (donor-weight counterfactual, nested/cv/inverse-variance/custom V; in-space placebo permutation inference via in_space_placebo(), plus ADH-2015 leave_one_out() + in_time_placebo() robustness, Firpo-Possebom (2018) test-inversion confidence sets, and Chernozhukov-Wüthrich-Zhu (2021) conformal inference)
  • TripleDifference - triple difference (DDD) estimator for designs requiring two criteria for treatment eligibility; serves both the 2x2x2 and the staggered-adoption design from one signature (fit(..., first_treat=) selects the staggered engine)
  • ContinuousDiD - Callaway, Goodman-Bacon & Sant'Anna (2024) continuous treatment DiD with dose-response curves
  • HeterogeneousAdoptionDiD - de Chaisemartin, Ciccia, D'Haultfœuille & Knau (2026) for designs where no unit remains untreated; local-linear estimator at the dose support boundary returning Weighted Average Slope (WAS) on Design 1' (d̲ = 0 / QUG) or WAS_{d̲} on Design 1 (d̲ > 0, continuous-near-d̲ or mass-point), with a multi-period event-study extension (last-treatment cohort, pointwise CIs). Panel-only in this release - repeated cross-sections rejected by the validator. Alias HAD.
  • RegressionDiscontinuity - Calonico, Cattaneo & Titiunik (2014) sharp, fuzzy, AND covariate-adjusted regression discontinuity with robust bias-corrected inference and rdrobust-parity bandwidth selection (all 10 selectors, mass-point handling; fuzzy via takeup= with a first-stage block and weak-identification warning; covariates via covariates= - CCFT 2019, same estimand, covariate-aware bandwidths). Canonical att is the bias-corrected estimate with a coherent robust CI (rdrobust's printed headline is att_conventional). Alias RDD.
  • StackedDiD - Wing, Freedman & Hollingsworth (2024) stacked DiD with Q-weights and sub-experiments; optional covariate balancing (Ustyuzhanin 2026)
  • EfficientDiD - Chen, Sant'Anna & Xie (2025) efficient DiD with optimal weighting for tighter SEs
  • TROP - Triply Robust Panel estimator (Athey et al. 2025) with nuclear norm factor adjustment
  • StaggeredTripleDifference - Ortiz-Villavicencio & Sant'Anna (2025) staggered DDD with group-time ATT (deprecated 3.9 - use TripleDifference with first_treat=)
  • WooldridgeDiD - Wooldridge (2023, 2025) ETWFE: saturated OLS, logit/Poisson QMLE (ASF-based ATT). Alias ETWFE.
  • LPDiD - Dube, Girardi, Jorda & Taylor (2025) Local Projections DiD: per-horizon long-difference event study on clean controls (no negative weighting), variance- or equally-weighted ATT, for absorbing or non-absorbing (reversible) treatment
  • ChangesInChanges - Athey & Imbens (2006) nonlinear/distributional DiD for the 2x2 design: full counterfactual distribution and quantile treatment effects via CDF transformation, plus the QDiD comparison estimator via method="qdid"; bootstrap inference; R qte parity. Alias CiC
  • BaconDecomposition - Goodman-Bacon (2021) decomposition for diagnosing TWFE bias in staggered settings

Diagnostics & Sensitivity

  • RD Plots - Calonico, Cattaneo & Titiunik (2015) optimal data-driven RD plots (RDPlot): all 8 rdrobust binselect bin selectors, implied-scale/WIMSE-weight reporting, optional matplotlib rendering
  • Parallel Trends Testing - simple and Wasserstein-robust parallel trends tests, equivalence testing (TOST)
  • Placebo Tests - placebo timing, group, permutation, leave-one-out
  • Honest DiD - Rambachan & Roth (2023) sensitivity analysis: robust CI under PT violations, breakdown values
  • Pre-Trends Power Analysis - Roth (2022) minimum detectable violation and power curves
  • Power Analysis - analytical and simulation-based MDE, sample size, power curves for study design
  • MMM Calibration Export - convert experiment results into MMM calibration inputs: PyMC-Marketing lift-test frames and Google Meridian lognormal ROI priors
  • Conley spatial HAC SE (vcov_type="conley") on cross-sectional LinearRegression / compute_robust_vcov plus panel DifferenceInDifferences / MultiPeriodDiD / TwoWayFixedEffects (with conley_lag_cutoff for within-unit Bartlett temporal HAC) - Conley (1999) spatial-correlation-aware SEs with parity vs R conleyreg on cross-sectional + panel fixtures, optional combined spatial + cluster product kernel via explicit cluster=, auto-activating sparse k-d-tree fast path for n > 5_000

Survey Support

Most estimators accept an optional survey_design parameter (or survey= / weights= for HeterogeneousAdoptionDiD) for design-based variance estimation. Coverage and supported weight types vary by estimator - see the Survey Design Support compatibility matrix for the per-estimator support table.

  • Design elements available across the supported set: strata, PSU, FPC, lonely PSU handling, nest. Weight types vary by estimator: some surfaces (e.g. CallawaySantAnna, StackedDiD, the HAD continuous path) accept pweight only; others accept pweight / fweight / aweight.
  • Variance methods: Taylor Series Linearization (TSL via Binder 1983), replicate weights (BRR / Fay / JK1 / JKn / SDR), survey-aware bootstrap
  • Diagnostics: DEFF per coefficient, effective n, subpopulation analysis, weight trimming, CV on estimates
  • Repeated cross-sections: CallawaySantAnna(panel=False) for BRFSS, ACS, CPS
  • Weight calibration / raking: upstream by design - pair with Meta's balance package, whose balance.interop.diff_diff adapter hands raked samples straight to diff-diff; see the composition-drift tutorial

No other Python or R DiD package offers design-based variance estimation for modern heterogeneity-robust estimators.

Requirements

  • Python 3.9 - 3.14
  • numpy >= 1.20
  • pandas >= 1.3
  • scipy >= 1.10

Development

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Format code
black diff_diff tests
ruff check diff_diff tests

References

This library implements methods from a wide body of econometric and causal-inference research. See the full bibliography on Read the Docs for citations spanning DiD foundations, modern staggered estimators, sensitivity analysis, and synthetic controls.

Citing diff-diff

If you use diff-diff in your research, please cite it:

@software{diff_diff,
  title = {diff-diff: Difference-in-Differences Causal Inference for Python},
  author = {Gerber, Isaac},
  year = {2026},
  url = {https://github.com/igerber/diff-diff},
  doi = {10.5281/zenodo.19646175},
  license = {MIT},
}

The DOI above is the Zenodo concept DOI - it always resolves to the latest release. To cite a specific version, look up its versioned DOI on the Zenodo project page.

See CITATION.cff for the full citation metadata.

Note on authorship: academic citation (CITATION.cff, the BibTeX above) lists individual authors with ORCIDs per scholarly convention. Package metadata surfaces (pyproject.toml, Sphinx docs) list "diff-diff contributors" to acknowledge the collective - see CONTRIBUTORS.md for the full list.

License

MIT License

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

diff_diff-3.9.0.tar.gz (1.8 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

diff_diff-3.9.0-cp314-cp314-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.14Windows x86-64

diff_diff-3.9.0-cp314-cp314-manylinux_2_28_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

diff_diff-3.9.0-cp314-cp314-manylinux_2_28_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

diff_diff-3.9.0-cp314-cp314-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

diff_diff-3.9.0-cp313-cp313-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.13Windows x86-64

diff_diff-3.9.0-cp313-cp313-manylinux_2_28_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

diff_diff-3.9.0-cp313-cp313-manylinux_2_28_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

diff_diff-3.9.0-cp313-cp313-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

diff_diff-3.9.0-cp312-cp312-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.12Windows x86-64

diff_diff-3.9.0-cp312-cp312-manylinux_2_28_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

diff_diff-3.9.0-cp312-cp312-manylinux_2_28_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

diff_diff-3.9.0-cp312-cp312-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

diff_diff-3.9.0-cp311-cp311-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.11Windows x86-64

diff_diff-3.9.0-cp311-cp311-manylinux_2_28_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

diff_diff-3.9.0-cp311-cp311-manylinux_2_28_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

diff_diff-3.9.0-cp311-cp311-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

diff_diff-3.9.0-cp310-cp310-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.10Windows x86-64

diff_diff-3.9.0-cp310-cp310-manylinux_2_28_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

diff_diff-3.9.0-cp310-cp310-manylinux_2_28_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

diff_diff-3.9.0-cp310-cp310-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

diff_diff-3.9.0-cp39-cp39-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.9Windows x86-64

diff_diff-3.9.0-cp39-cp39-manylinux_2_28_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

diff_diff-3.9.0-cp39-cp39-manylinux_2_28_aarch64.whl (7.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ ARM64

diff_diff-3.9.0-cp39-cp39-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file diff_diff-3.9.0.tar.gz.

File metadata

  • Download URL: diff_diff-3.9.0.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for diff_diff-3.9.0.tar.gz
Algorithm Hash digest
SHA256 6ff6bb413678c9af118227c3c24049d93ee928b6603b70b2dd6176f613fc3927
MD5 ef09e278f75ba2cd4b3826fb3778a50a
BLAKE2b-256 a2e850b35963be5e6a9523fabcc64318f596109f576fcbe4073c25cf9adab3b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0.tar.gz:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: diff_diff-3.9.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for diff_diff-3.9.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 d466c44de56785fff0c73d7d5aa1a3bd52024d0c0e1118d788a3928091ffd3e3
MD5 af51986f8fa3d99d98c96b465d9491c0
BLAKE2b-256 bf8edaca2b62ac9f2d7636774d8ca41c1243584f13dbd6744ae86107795b2cb3

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c53eadcf62da6a081c3d074e6f5482edc41cf40057a402979928ffd06a9a9d4c
MD5 4e8beac1e8cbef6588529a3384ee35e9
BLAKE2b-256 9c3cd03941ca7a6cb877b231bdb4fcfc0a7a77aa6d107708d40ceebdcf7d916c

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp314-cp314-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 61d70bbe194e095a01741984f15f8a106d222623281cef9350326280c5845a28
MD5 920a077b65f8cde43e2037946bc5526f
BLAKE2b-256 3cc7d5d3160e8a583c1c432c0fe2b015b3a8c4e4b0a59485d39eb2b66ca897b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp314-cp314-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cd10d4f8b692561371a1d452d0e9deb9aa4155b7c0977ef8f89d1480039a64bc
MD5 34f6d0a1ab499bb5e564e45a80fa9f37
BLAKE2b-256 4c53741206270d229823159dfdecaba29e5d2217994a52a7a032d93584fe8f42

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: diff_diff-3.9.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for diff_diff-3.9.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 11f7e1ed615f1a6eae2ce02a25b1d257a04a41f11d8e6e4abf4cfc279ab696b8
MD5 e61eafa98ba8132ff05235bad082c55f
BLAKE2b-256 2e7c0eeff0c2bb58020af9c4751a26ad35aff76b199e32b0830b76e67ff31e96

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2519e96178cc9d7a8a043bf896a7334422da5f1a5fd83c005624cf1d89248905
MD5 45151e17a016cc823d8467e6e2d7cf85
BLAKE2b-256 a102de465da6f204c594c24a7b76c4fa68df992d8980650c0f3f98db415229a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 24fb948f54fb4ad35372ec965c165c558dba368a49a373896865a2aa3501bd6c
MD5 d2797134c4e847f85e8f0a353afb8a69
BLAKE2b-256 7e1b1367f93fb8b45de73025995510bac99b918ec496528d5bc560b46f229962

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 198bd5372098b8f08266f0e323184230d6064e0e22998e00a5c02af086223879
MD5 b53f966948759a6458e55f16ecf3f823
BLAKE2b-256 c4c2c5302efd2c404971fe4d69f8b40cd7acb20dc23e5239cac294e4e8dda86f

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: diff_diff-3.9.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for diff_diff-3.9.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 82e9dc98cb56caf8c10a86c84c17be9d5c7cee2b36ee6dc21106646b5f2d82e0
MD5 5ea396fec34cfc0a1f160ac6bdcc51d3
BLAKE2b-256 fb3880ff6a161a4f64c32105634810e1b7fd52187f21e8647709810d1f1e089c

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4e12a59a3b4de480afaf77485afe4add9f994f81cc1a2483f75715216968767e
MD5 b7856bb220fde890f4153a3e1b93de38
BLAKE2b-256 91d0e158cda69effecee443ae1ed43da4ad84b41eedde943ddd128b8149e643e

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 22d5dff766b2153532e925ed466538302f1ca4127b74f2281fbd9901d175dca0
MD5 1a202b469b903cbb3a76d10e95c54862
BLAKE2b-256 2cacd72dfb056666566119cd5f663de6d1f5c02392cc9b110afc3e065875f136

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp312-cp312-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d32077ccd9e8b2e890002db25d069dfc04fa70685708776dee077c765eef6539
MD5 9b6ddb42e9d855f37696414721396c3d
BLAKE2b-256 03900f20f1e13405255e4c1770a037ba0c72792753f866c1896362fa32ac140f

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: diff_diff-3.9.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for diff_diff-3.9.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2131b0fe0ca87d2e5ad80c9ab7b21ac0d968c221ab656d444f3e93c108e47b24
MD5 a9643c9391725b56a5cd4a0bc0060511
BLAKE2b-256 c14548be627ea67e902ff7c261619df2a295973ace1cfb8d3f6017bcbcb0608e

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b1dc702eb345e259e25500d0bea1d140f5283db87f5a3e1dcc1ab7a669019f8c
MD5 578d1b914596946240a509119481e5b8
BLAKE2b-256 a2dee19bc149f3b1b9216d00e01e6a974ca9377107bfb30cb76f93f9bbe09554

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 290e322ea53e2b25be3d9ee0158fff83070967916e6f208a2cc4cbfd054c0ea9
MD5 8603e4a5b464e8588eadb9a0d22c955f
BLAKE2b-256 21b999e3abf8184e2db0c4774b2d02ffa6fc47e62dbf2ec325fc92ec036cc519

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp311-cp311-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6b79a592a2d0ac219b5921532ea24b096f64abc049f5cdc404957e2f93962f7e
MD5 1813b145c739f5e0a0d495de95dbfc79
BLAKE2b-256 cce43ab907a68dacc97c735c411020e201f491ed8d833a8cd83fed8b50fa4c08

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: diff_diff-3.9.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for diff_diff-3.9.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 935263fc74612ec7a0b0041672746b640cb10146824e1bd164c5bd3a436cdb52
MD5 048f828f188e1ed7451a39cb256f2cdf
BLAKE2b-256 cf415c5c69ab688036515205dfc578478f133c0e49b5c9a9180a95701be257d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8f7a71d2613dade61eaf046daf8b9116d6326164c63634b64ba1f50e39ddca07
MD5 2dacf4007283d03383ef6b6ca5c6b219
BLAKE2b-256 8545d021faa8fb634367344136b1e49271786c9e6306a1eff1c3e12ad7c70797

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 83c86d52e7313b96c5f5b54f022b2a8a46d580723e68f48dbda49b37f7e9a184
MD5 bcc3144bdad965b9a859210c09e6b2c1
BLAKE2b-256 216e1e49007d6c1eefdad0f45964b4bfb7eca24c29bc5b049cf3366035f2bd43

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp310-cp310-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0f1f90d4492db0ec4259b3ce9af65902abf3e053597ebeb2283f946c2817ada6
MD5 2bba589aaae99471056b8428c8616b22
BLAKE2b-256 4b64fd93e2d0a8bbd8bf49382242039ddc97347f7dc8eb485b8df57029cc5005

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: diff_diff-3.9.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 2.9 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for diff_diff-3.9.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 75915088e8d0455027d909c83b9e5fef3062eee31f5cc7cd9a6bb8bcdedcf64f
MD5 37e0bc7a519dd7eb6f51314c073c3da8
BLAKE2b-256 951678cc6bdcf0a2d22ba2357f573f24d079ff17aa34d04723c1fc5e9ee20d0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp39-cp39-win_amd64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8162fc345cdb507241abe836b15b25b18db2807d2fcea4fb312c55f3546a60a4
MD5 e6d80c5cdfcfc9c717eebba9aee6a94b
BLAKE2b-256 fd84629fba8e546fdddd284931927c90dc1d3a061a2e656ac0f94a36455e73dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp39-cp39-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp39-cp39-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp39-cp39-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d42008e65565c59b3007838070b73b5b294b34afcdbb21e2ab0acfeb618496f6
MD5 a120df58193b034642d25ebc8b60cdb0
BLAKE2b-256 25e7ac4b854b6e1ced64abe1a9f32bb0c084a9f9d0ff34feb8bc00088beb1e6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp39-cp39-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file diff_diff-3.9.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for diff_diff-3.9.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5bf3ba25db5909eea1f5e9cf2c40fcb388c91d240e81adfc252067d0b49b0e70
MD5 28c8dcb7d0de3ed7c317f090c2bbac75
BLAKE2b-256 7c040950622edb9e81592e38452ba51e55a0f87033ce7529557e9d10d79a0fde

See more details on using hashes here.

Provenance

The following attestation bundles were made for diff_diff-3.9.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: publish.yml on igerber/diff-diff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page