Source code for OpenPinch.analysis.heat_pumps.components

"""Lightweight base records for process components."""

from __future__ import annotations

from dataclasses import dataclass
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from ...application.problem import PinchProblem
    from ...domain.zone import Zone


[docs] @dataclass class ProcessComponent: """Base class for memory-only process components.""" id: str problem: "PinchProblem" component_type: str active: bool = True
[docs] def activate(self): """Activate the component.""" self.active = True self._invalidate_problem_targets() return self
[docs] def deactivate(self): """Deactivate the component.""" self.active = False self._invalidate_problem_targets() return self
def _invalidate_problem_targets(self) -> None: root = self.problem.master_zone if root is not None: _clear_zone_targets(root) self.problem._results = None
def _clear_zone_targets(zone: "Zone") -> None: zone.targets.clear() zone.graphs.clear() for subzone in zone.subzones.values(): _clear_zone_targets(subzone)