Skip to content

base

ipw.analysis.base

Core contracts for analysis plugins.

AnalysisContext dataclass

Common inputs made available to analysis plugins.

Source code in intelligence-per-watt/src/ipw/analysis/base.py
@dataclass(slots=True, frozen=True)
class AnalysisContext:
    """Common inputs made available to analysis plugins."""

    results_dir: Path
    options: Mapping[str, Any] = field(default_factory=dict)

    def __post_init__(self) -> None:
        object.__setattr__(self, "options", _freeze_mapping(self.options))

AnalysisResult dataclass

Standardized payload returned by analysis plugins.

Source code in intelligence-per-watt/src/ipw/analysis/base.py
@dataclass(slots=True, frozen=True)
class AnalysisResult:
    """Standardized payload returned by analysis plugins."""

    analysis: str
    summary: Mapping[str, Any]
    data: Mapping[str, Any] = field(default_factory=dict)
    warnings: tuple[str, ...] = field(default_factory=tuple)
    artifacts: Mapping[str, Path] = field(default_factory=dict)
    metadata: Mapping[str, Any] = field(default_factory=dict)

    def __post_init__(self) -> None:
        object.__setattr__(self, "summary", _freeze_mapping(self.summary))
        object.__setattr__(self, "data", _freeze_mapping(self.data))
        object.__setattr__(self, "artifacts", _freeze_mapping(self.artifacts))
        object.__setattr__(self, "metadata", _freeze_mapping(self.metadata))

AnalysisProvider

Bases: ABC

Base class for extendible analysis plugins.

Source code in intelligence-per-watt/src/ipw/analysis/base.py
class AnalysisProvider(ABC):
    """Base class for extendible analysis plugins."""

    #: Registry key for this analysis. Subclasses should override this constant.
    analysis_id: str

    @abstractmethod
    def run(self, context: AnalysisContext) -> AnalysisResult:
        """Execute the analysis and return a structured result."""

run(context) abstractmethod

Execute the analysis and return a structured result.

Source code in intelligence-per-watt/src/ipw/analysis/base.py
@abstractmethod
def run(self, context: AnalysisContext) -> AnalysisResult:
    """Execute the analysis and return a structured result."""