Problems, Presets, And Environments¶
User-facing finite update-support problem object.
- exception updatesupport.problem.TooManyPartitions[source]¶
Bases:
RuntimeErrorRaised when exhaustive support enumeration would be too large.
- class updatesupport.problem.FiniteProblem(states, public, estimand, environments=None, tol=1e-09)[source]¶
Bases:
objectFinite hidden-state update-support problem.
Parameters mirror the paper’s finite setup:
statesis the hidden state spaceD.publicis the projectionpi: D -> O.estimandis a fixed target functional over hidden distributions.environmentsis the admissible classQ.
- Parameters:
public (Mapping[Hashable, Hashable] | Callable[[Hashable], Hashable])
estimand (Mapping[Hashable, float] | Sequence[float] | Callable[[Hashable], float] | LinearTarget | UncertainLinearTarget | MomentTransformTarget | ProcedureTarget | RatioTarget)
environments (Environment | None)
tol (float)
- estimand: Mapping[Hashable, float] | Sequence[float] | Callable[[Hashable], float] | LinearTarget | UncertainLinearTarget | MomentTransformTarget | ProcedureTarget | RatioTarget¶
- environments: Environment | None = None¶
- property target_contract: TargetContract¶
- estimand_partition()[source]¶
The saturated least support: quotient by joint values of (public, h).
- Return type:
Partition
- moment_transform_endpoint(*, minimize, public_law=None)[source]¶
Solve one exact convex-compatible moment-transform endpoint.
- Parameters:
- Return type:
- uncertain_linear_confidence_core(*, public_law=None)[source]¶
Return the SOCP common confidence core for an uncertain linear target.
- Parameters:
- Return type:
- class updatesupport.problem.ProblemReport(problem: 'FiniteProblem')[source]¶
Bases:
object- Parameters:
problem (FiniteProblem)
- problem: FiniteProblem¶
Named admissible-environment presets.
- class updatesupport.presets.QPreset(name, radius=None, cost=None, backend=None, solver=None, solver_options=None, settings=None)[source]¶
Bases:
objectReusable preset for constructing an admissible environment
Q.- Parameters:
- class updatesupport.presets.QEnvironment(environment: 'Environment', preset: 'QPreset | None', name: 'str', description: 'str')[source]¶
Bases:
object- Parameters:
environment (Environment)
preset (QPreset | None)
name (str)
description (str)
- environment: Environment¶
- class updatesupport.presets.CvxpyAdmissibleSetSpec(preset, fixed_public_law, constraint_builders=(), parameterized_constraint_builders=(), parameter_values=<factory>, solver=None, solver_options=None, name=None, description=None)[source]¶
Bases:
objectReusable CVXPY constraints for one admissible Q preset.
- Parameters:
preset (QPreset)
constraint_builders (Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int]], Sequence[Any]]])
parameterized_constraint_builders (Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int], Callable[[...], Any]], Sequence[Any]]])
solver (str | None)
name (str | None)
description (str | None)
- constraint_builders: Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int]], Sequence[Any]]] = ()¶
- parameterized_constraint_builders: Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int], Callable[[...], Any]], Sequence[Any]]] = ()¶
- intersect(*others, name=None, description=None, solver=None, solver_options=None)[source]¶
Conjoin this admissible set’s constraints with other specs.
- Parameters:
- Return type:
- environment(backend='cvxpy')[source]¶
Materialize this constraint spec as a CVXPY-compatible environment.
- Parameters:
backend (str)
- Return type:
- convex_admissible_set(problem)[source]¶
Build a concrete CVXPY admissible set for
problem.- Return type:
- updatesupport.presets.q_saturated()[source]¶
Allow arbitrary hidden reweighting inside each observed public fiber.
- Return type:
- updatesupport.presets.q_intersection(*components, backend=None, solver=None, solver_options=None)[source]¶
Intersect several admissible Q presets.
The first implementation slice supports convex CVXPY-compatible component presets plus
saturatedandobserved. Mixed-integer components are deliberately rejected by the CVXPY admissible-set compiler.
- updatesupport.presets.q_bounded_shift(radius=0.5)[source]¶
Limit each hidden-cell mass to a relative band around its observed mass.
- updatesupport.presets.q_fiber_support_floor(min_active, *, min_share, max_active=None, backend='cvxpy', solver='SCIP', solver_options=None)[source]¶
Require each public fiber to keep several active hidden cells.
The preset is mixed-integer: inside every retained public fiber, at least
min_activehidden cells must carry at leastmin_shareof that public fiber’s mass.max_activeoptionally caps the number of active hidden cells in each public fiber. Use a MIP-capable CVXPY solver such as SCIP.
- updatesupport.presets.q_tv_budget(radius, *, backend='cvxpy', solver=None, solver_options=None)[source]¶
Constrain total variation distance from the observed hidden distribution.
- updatesupport.presets.q_chi_square_budget(radius, *, backend='cvxpy', solver=None, solver_options=None)[source]¶
Constrain Pearson chi-square divergence from the observed distribution.
- updatesupport.presets.q_kl_budget(radius, *, backend='cvxpy', solver=None, solver_options=None)[source]¶
Constrain KL divergence from the observed hidden distribution.
- updatesupport.presets.q_l2_budget(radius, *, backend='cvxpy', solver=None, solver_options=None)[source]¶
Constrain L2 distance from the observed hidden distribution.
- updatesupport.presets.q_covariate_balance(radius, moments, *, baseline=None, scale=None, backend='cvxpy', solver=None, solver_options=None)[source]¶
Constrain standardized hidden covariate-moment drift.
momentsmaps moment names to values on retained hidden cells, or supplies a row-by-cell matrix in hidden-state order. By default the baseline and scale are computed from the observed hidden distribution.- Parameters:
- Return type:
- updatesupport.presets.q_mahalanobis_budget(radius, *, covariance, backend='cvxpy', solver=None, solver_options=None)[source]¶
Constrain Mahalanobis distance from the observed hidden distribution.
- updatesupport.presets.q_wasserstein(cost, radius, *, backend='cvxpy', solver=None, solver_options=None)[source]¶
Constrain Wasserstein distance using an explicit hidden-cell cost matrix.
- updatesupport.presets.cvxpy_admissible_set_spec(q, *, public_law, public_map, cell_weights, q_radius=None)[source]¶
Expose CVXPY admissible-set constraints for a compatible Q preset.
- updatesupport.presets.resolve_q_environment(q, *, public_law, public_map, cell_weights, q_radius=None)[source]¶
Build an environment from a preset or pass through a custom environment.
Admissible environment classes for finite update-support problems.
- exception updatesupport.environments.LPError[source]¶
Bases:
RuntimeErrorRaised when a linear program cannot be solved successfully.
- exception updatesupport.environments.CvxpyError[source]¶
Bases:
RuntimeErrorRaised when a CVXPY optimization problem cannot be solved successfully.
- class updatesupport.environments.Environment(*args, **kwargs)[source]¶
Bases:
Protocol
- class updatesupport.environments.CvxpyConstraintMetadata(constraint, name, kind='custom', sense=None, variable=None, state=None, public_value=None, states=(), public_values=())[source]¶
Bases:
objectCVXPY constraint plus metadata used for dual diagnostics.
- Parameters:
- updatesupport.environments.cvxpy_constraint(constraint, *, name, kind='custom', sense=None, variable=None, state=None, public_value=None, states=(), public_values=())[source]¶
Attach diagnostic metadata to a custom CVXPY constraint.
- class updatesupport.environments.SupportFunctionResult(direction, value, vector)[source]¶
Bases:
objectValue and optimizer for one support-function evaluation.
- class updatesupport.environments.SupportFunctionIntervalResult(direction, lower, upper, diameter, lower_vector, upper_vector, lower_support_value, upper_support_value, lower_support_result, upper_support_result, lower_duals=(), upper_duals=())[source]¶
Bases:
objectLower/upper interval from support-function evaluations.
- Parameters:
lower (float)
upper (float)
diameter (float)
lower_support_value (float)
upper_support_value (float)
lower_support_result (SupportFunctionResult)
upper_support_result (SupportFunctionResult)
lower_duals (tuple[ConstraintDual, ...])
upper_duals (tuple[ConstraintDual, ...])
- lower_support_result: SupportFunctionResult¶
- upper_support_result: SupportFunctionResult¶
- lower_duals: tuple[ConstraintDual, ...] = ()¶
- upper_duals: tuple[ConstraintDual, ...] = ()¶
- property duals: tuple[ConstraintDual, ...]¶
- dual_summary(*, top=10, min_magnitude=0.0)[source]¶
- Parameters:
- Return type:
tuple[ConstraintDual, …]
- class updatesupport.environments.SupportFunctionTargetInterval(name, direction, lower, upper, diameter, lower_distribution, upper_distribution, lower_support_value, upper_support_value, lower_duals=(), upper_duals=())[source]¶
Bases:
objectSupport-function interval for one named linear target direction.
- Parameters:
name (str)
lower (float)
upper (float)
diameter (float)
lower_support_value (float)
upper_support_value (float)
lower_duals (tuple[ConstraintDual, ...])
upper_duals (tuple[ConstraintDual, ...])
- lower_duals: tuple[ConstraintDual, ...] = ()¶
- upper_duals: tuple[ConstraintDual, ...] = ()¶
- property duals: tuple[ConstraintDual, ...]¶
- dual_summary(*, top=10, min_magnitude=0.0)[source]¶
- Parameters:
- Return type:
tuple[ConstraintDual, …]
- class updatesupport.environments.SupportFunctionReport(title, targets, states, public_values, public_law=None, backend='support-function-cvxpy')[source]¶
Bases:
ReportArtifactMixinMulti-target support-function interval and dual diagnostic report.
- Parameters:
- targets: tuple[SupportFunctionTargetInterval, ...]¶
- class updatesupport.environments.ConvexAdmissibleSet(variable, constraints, records=(), name='convex admissible set')[source]¶
Bases:
objectA CVXPY-defined convex admissible set over hidden distributions.
- Parameters:
- records: Sequence[CvxpyConstraintMetadata] = ()¶
- class updatesupport.environments.LinearConstraint(coefficients, sense, rhs, name=None)[source]¶
Bases:
objectA linear constraint over state probabilities.
- Parameters:
- class updatesupport.environments.PublicFiberSaturated(public_marginals=None, name='public-fiber-saturated')[source]¶
Bases:
objectAll conditional reweightings inside public fibers are admissible.
public_marginals=Nonemeans the full simplex over public values. A mapping fixes a single public law. A sequence of mappings is interpreted as vertices of a finite public-marginal polytope for global closed-form maximization.- Parameters:
- least_support(problem)[source]¶
Return the saturated least support for the configured public laws.
- Return type:
Partition
- class updatesupport.environments.FiniteEnvironments(distributions, name='finite')[source]¶
Bases:
objectA finite enumerated environment class Q.
- class updatesupport.environments.LineSegment(center, direction, radius, name='line-segment')[source]¶
Bases:
objectContinuous environments q(t) = center + t * direction with bounded t.
- Parameters:
- class updatesupport.environments.PolytopeEnvironments(constraints=(), bounds=None, method='highs', name='polytope')[source]¶
Bases:
objectA finite-linear polytope
Qsolved withscipy.optimize.linprog.The probability simplex is implicit: every environment has nonnegative coordinates and total mass one. Additional constraints are linear equalities or inequalities over the state probabilities.
- Parameters:
- constraints: Sequence[LinearConstraint | tuple[Mapping[Hashable, float] | Sequence[float], str, float]] = ()¶
- bounds: Mapping[Hashable, tuple[float | None, float | None]] | Sequence[tuple[float | None, float | None]] | None = None¶
- class updatesupport.environments.CvxpyEnvironments(constraints=(), constraint_builders=(), fixed_public_law=None, solver=None, solver_options=None, name='cvxpy')[source]¶
Bases:
objectA convex finite environment class
Qsolved with CVXPY.The probability simplex is implicit. Linear constraints use the same helper objects accepted by
PolytopeEnvironments. Extra convex restrictions can be supplied as builders receiving(cp, q, states, state_index)and returning CVXPY constraints for the probability vectorq.- Parameters:
- constraints: Sequence[LinearConstraint | tuple[Mapping[Hashable, float] | Sequence[float], str, float]] = ()¶
- constraint_builders: Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int]], Sequence[Any]]] = ()¶
- convex_admissible_set(problem, *, public_law=None)[source]¶
Build the CVXPY admissible distribution set for this problem.
- Parameters:
- Return type:
- class updatesupport.environments.SupportFunctionBackend(constraints=(), constraint_builders=(), fixed_public_law=None, solver=None, solver_options=None, name='support-function-cvxpy')[source]¶
Bases:
CvxpyEnvironmentsCVXPY backend that evaluates linear intervals via support functions.
- Parameters:
- support_value(problem, direction, *, public_law=None)[source]¶
Evaluate the support function of this backend’s admissible set.
- support_interval(problem, direction=None, *, public_law=None)[source]¶
Evaluate a support-function interval for a direction or target.
- updatesupport.environments.support_function_report(problem, targets, *, public_law=None, title='Support-Function Multi-Target Report')[source]¶
Evaluate several linear target directions with a support-function backend.
- class updatesupport.environments.BatchedCvxpyEnvironments(constraints=(), constraint_builders=(), fixed_public_law=None, solver=None, solver_options=None, name='batched-cvxpy', scenario_constraint_builders=None, scenario_names=())[source]¶
Bases:
CvxpyEnvironmentsCVXPY environment with batched local interval solves.
batched_local_transportsolves independent fixed-public-law lower/upper endpoint problems with variables shaped(scenario, state). Existing one-dimensional custom CVXPY constraint builders are applied to each scenario slice, so current TV, chi-square, KL, and Wasserstein presets can be reused before specialized tensor builders are needed.- Parameters:
constraints (Sequence[LinearConstraint | tuple[Mapping[Hashable, float] | Sequence[float], str, float]])
constraint_builders (Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int]], Sequence[Any]]])
solver (str | None)
name (str)
scenario_constraint_builders (Sequence[Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int]], Sequence[Any]]]] | None)
- class updatesupport.environments.ParameterizedCvxpyEnvironments(constraints=(), constraint_builders=(), fixed_public_law=None, solver=None, solver_options=None, name='parameterized-cvxpy', parameterized_constraint_builders=(), parameter_values=<factory>)[source]¶
Bases:
CvxpyEnvironmentsCVXPY environment with cached problems and mutable parameters.
This backend is intended for sensitivity sweeps over a fixed finite state space. The objective and public-law equalities are CVXPY parameters, and custom parameterized constraints can add scalar/vector parameters such as a divergence radius.
- Parameters:
constraints (Sequence[LinearConstraint | tuple[Mapping[Hashable, float] | Sequence[float], str, float]])
constraint_builders (Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int]], Sequence[Any]]])
solver (str | None)
name (str)
parameterized_constraint_builders (Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int], Callable[[...], Any]], Sequence[Any]]])
- parameterized_constraint_builders: Sequence[Callable[[Any, Any, tuple[Hashable, ...], Mapping[Hashable, int], Callable[[...], Any]], Sequence[Any]]] = ()¶
- set_parameter(name, value)[source]¶
Set a parameter value in-place and return
selffor chaining.- Parameters:
- Return type:
- with_parameters(**values)[source]¶
Return a copy with updated parameter values and an empty problem cache.
- Parameters:
values (Any)
- Return type:
Structured result objects returned by the public API.
- class updatesupport.results.Witness(q1, q2, psi_q1, psi_q2, gap, public_law, support_law=None)[source]¶
Bases:
objectTwo admissible environments that the observed support cannot distinguish.
- Parameters:
- class updatesupport.results.AdequacyResult(adequate: 'bool', support: 'Partition', gap: 'float' = 0.0, witness: 'Witness | None' = None, reason: 'str | None' = None)[source]¶
Bases:
object- Parameters:
- support: Partition¶
- class updatesupport.results.LeastSupportResult(exists: 'bool', support: 'Partition | None', minimal_supports: 'tuple[Partition, ...]', common_coarsening: 'Partition | None' = None, failure_witness: 'Witness | None' = None, reason: 'str | None' = None)[source]¶
Bases:
object- Parameters:
- class updatesupport.results.ConstraintDual(solve, name, kind, magnitude, signed_value=None, sense=None, variable=None, state=None, public_value=None, index=None, residual=None)[source]¶
Bases:
objectDual multiplier diagnostic for one solved optimization constraint.
- Parameters:
- class updatesupport.results.TransportResult(lower: 'float', upper: 'float', diameter: 'float', public_law: 'Mapping[Hashable, float] | None' = None, q_lower: 'Distribution | None' = None, q_upper: 'Distribution | None' = None, duals: 'tuple[ConstraintDual, ...]' = (), bound_type: 'str' = 'exact', lower_bound_type: 'str' = 'exact', upper_bound_type: 'str' = 'exact', notes: 'tuple[str, ...]' = ())[source]¶
Bases:
object- Parameters:
- duals: tuple[ConstraintDual, ...] = ()¶
- class updatesupport.results.UncertainLinearConfidenceCoreResult(lower, upper, diameter, empty_gap, public_law, q_lower, q_upper, duals=(), method='socp_confidence_core')[source]¶
Bases:
objectCommon confidence-core interval for an uncertain linear target.
The lower endpoint is the maximum lower confidence bound over admissible hidden compositions. The upper endpoint is the minimum upper confidence bound. If
lower > upper, the composition-specific confidence bands have no common overlap andempty_gaprecords the separation.- Parameters:
- duals: tuple[ConstraintDual, ...] = ()¶