Source code for OpenPinch.lib.schemas.reporting

"""Schemas for serialized summaries and report-facing data."""

from __future__ import annotations

from typing import List, Optional

from pydantic import BaseModel, ConfigDict, Field

from ...classes.stream_collection import StreamCollection
from .common import HPRMetric, MaybeVU, ScalarOrVU


[docs] class HeatUtility(BaseModel): """Report-friendly representation of a utility contribution.""" name: str heat_flow: ScalarOrVU
[docs] class TempPinch(BaseModel): """Hot and cold pinch temperatures attached to a targeting record.""" cold_temp: MaybeVU = None hot_temp: MaybeVU = None
[docs] class TargetResults(BaseModel): """Summary metrics for a single zone/target returned by the analysis.""" model_config = ConfigDict(arbitrary_types_allowed=True) name: str state_id: Optional[str] = None degree_of_integration: MaybeVU = None Qh: ScalarOrVU Qc: ScalarOrVU Qr: ScalarOrVU utility_cost: MaybeVU = None row_type: Optional[str] = None hot_utilities: List[HeatUtility] = Field(default_factory=list) cold_utilities: List[HeatUtility] = Field(default_factory=list) temp_pinch: TempPinch work_target: MaybeVU = None turbine_efficiency_target: MaybeVU = None area: MaybeVU = None num_units: Optional[float] = None capital_cost: Optional[float] = None total_cost: Optional[float] = None exergy_sources: MaybeVU = None exergy_sinks: MaybeVU = None ETE: Optional[float] = None exergy_req_min: MaybeVU = None exergy_des_min: MaybeVU = None hpr_cycle: Optional[str] = None hpr_utility_total: HPRMetric = None hpr_work: HPRMetric = None hpr_external_utility: HPRMetric = None hpr_ambient_hot: HPRMetric = None hpr_ambient_cold: HPRMetric = None hpr_cop: HPRMetric = None hpr_eta_he: HPRMetric = None hpr_success: Optional[bool] = None hpr_hot_streams: Optional[StreamCollection] = None hpr_cold_streams: Optional[StreamCollection] = None
__all__ = [ "HeatUtility", "TargetResults", "TempPinch", ] TargetResults.model_rebuild()