Source code for equilibria.templates.pep_pyomo.pep_pyomo_sets

"""PEP index sets for the Pyomo model.

Wraps the calibrated ``PEPModelState.sets`` (the single source of truth produced by
``PEPModelCalibrator``) so the Pyomo builder never redefines set members. Adds the one
derived set the equations need: ``I1 = I \\ {walras_i}`` (all commodities except the
Walras/redundant-market commodity, default ``agr``) — used by the composite-good market
clearing EQ84 (agr is dropped and handled by the WALRAS/LEON slack).

Default pep2 members (from PEPModelState):
  H  = [hrp, hup, hrr, hur]         households
  F  = [firm]                        firms
  K  = [cap, land]                   capital types
  L  = [usk, sk]                     labor types
  J  = [agr, ind, ser, adm]          production sectors
  I  = [agr, food, othind, ser, adm] commodities   (note: J ≠ I — PEP make matrix)
  AG = [hrp, hup, hrr, hur, firm, gvt, row]  all agents
  AGNG = AG \\ {gvt}                  non-government agents
  AGD  = AG \\ {row}                  domestic agents
"""
from __future__ import annotations

from dataclasses import dataclass, field
from typing import Any


[docs] @dataclass class PEPSets: """Index sets for the PEP Pyomo model, sourced from a calibrated PEPModelState.""" H: list[str] = field(default_factory=list) F: list[str] = field(default_factory=list) K: list[str] = field(default_factory=list) L: list[str] = field(default_factory=list) J: list[str] = field(default_factory=list) I: list[str] = field(default_factory=list) AG: list[str] = field(default_factory=list) AGNG: list[str] = field(default_factory=list) AGD: list[str] = field(default_factory=list) walras_i: str = "agr" @property def I1(self) -> list[str]: """Commodities except the Walras/redundant-market commodity (EQ84 domain).""" return [i for i in self.I if i != self.walras_i]
[docs] @classmethod def from_state(cls, state: Any) -> "PEPSets": s = state.sets I = list(s["I"]) walras_i = "agr" if "agr" in I else (I[0] if I else "agr") return cls( H=list(s["H"]), F=list(s["F"]), K=list(s["K"]), L=list(s["L"]), J=list(s["J"]), I=I, AG=list(s["AG"]), AGNG=list(s["AGNG"]), AGD=list(s["AGD"]), walras_i=walras_i, )