Quickstart

Install the core package:

pip install updatesupport

or, in a uv project:

uv add updatesupport

The most common workflow starts with tabular rows or a dataframe. Choose:

  • public columns: what the report shows,

  • hidden columns: the more detailed retained state space,

  • target: the supplied metric, rate, or effect,

  • optional weights,

  • candidate refinements that could be added to the public representation,

  • an optional ambiguity limit or decision rule for the claim.

import updatesupport as us

audit = us.claim(
    "Income-threshold rate is stable enough to report",
    public=["AGE_BAND", "EDU_BAND", "SEX"],
    hidden=[
        "AGE_BAND",
        "EDU_BAND",
        "SEX",
        "OCC_MAJOR",
        "WKHP_BAND",
        "RAC1P",
    ],
    target="income_over_threshold",
    weight="sample_weight",
    candidate_refinements=["OCC_MAJOR", "WKHP_BAND", "RAC1P"],
    ambiguity_limit=0.015,
    min_cell_weight=25,
    q_presets=["saturated"],
).audit(rows_or_frame)

print(audit.to_markdown())

The claim audit returns one Markdown-ready artifact with the verdict, observed value, hidden-composition interval, witness evidence, and refinement recommendations.

The hidden-composition interval is not a confidence interval. It is a partial-identification or sensitivity interval conditional on the retained support, supplied target values, public distribution, and selected admissible hidden-mix class.

Lower-level evidence tools are available when needed: public_descent_report(...) for the primary interval, sensitivity_report(...) for stress grids, and public_representation_frontier(...) for public-bucket design search.

Optional Extras

Install extras for heavier workflows:

pip install "updatesupport[cvxpy]"      # convex transport presets
pip install "updatesupport[causal]"     # EconML examples
pip install "updatesupport[dowhy]"      # DoWhy handoff helpers
pip install "updatesupport[finance]"    # finance plugin package

Colab Notebooks

The core repository includes a tutorial notebook showing how updatesupport sits downstream of DoWhy: