Coverage for backend/pinch_service/serverFunctions/pinchServerFunctions.py: 91%
40 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
1from typing import Any
2import json
3import traceback
4from http.server import BaseHTTPRequestHandler, HTTPServer
5from cProfile import Profile
6from pydantic import ValidationError
7from OpenPinch import target, visualise
8from docs.types.LinearizeTypes import LinearizeRequest, LinearizeResponse, THCurveRequest, THCurveResponse
9from docs.types.VisualiseTypes import VisualiseRequest, VisualiseResponse
10from OpenPinch.src.lib.schema import TargetRequest, TargetResponse
11from linearization.linearize_stream import generate_t_h_curve, piecewise_curve, serialize_states
14def targeting_analysis(data: Any, parent_fs_name: str = 'Project') -> TargetResponse:
15 """Calculates targets and outputs from inputs and options"""
16 # Validate request data using Pydantic model
17 request_data = TargetRequest.model_validate(data)
19 # Perform advanced pinch analysis and total site analysis
20 return_data = target(
21 zone_tree=request_data.zone_tree,
22 streams=request_data.streams,
23 utilities=request_data.utilities,
24 options=request_data.options,
25 name=parent_fs_name,
26 )
28 # Validate response data
29 validated_data = TargetResponse.model_validate(return_data)
31 # Return data
32 return validated_data
35def visualise_analysis(data: Any) -> VisualiseResponse:
36 # Validate request data using Pydantic model
37 request_data = VisualiseRequest.model_validate(data)
39 # Create visualisation of pinch graphs
40 return_data = visualise(request_data.zones)
42 # Validate response data
43 validated_data = VisualiseResponse.model_validate(return_data)
45 # Return data
46 return validated_data
49def linearize_stream(data: Any) -> LinearizeResponse:
50 # Validate request data using Pydantic model
51 request_data = LinearizeRequest.model_validate(data)
52 return_data = {"streams": []}
54 # Create and Linearize stream
55 for stream in request_data.streams:
56 hot_stream = stream.t_supply > stream.t_target
57 curve_points = data["t_h_data"][0]
58 mask_points = piecewise_curve(
59 curve=curve_points, epsilon=request_data.t_min, hot_stream=hot_stream)
60 return_data["streams"] =mask_points.tolist()
62 # Validate response data
63 validated_data = LinearizeResponse.model_validate(return_data)
65 # Return data
66 return validated_data
69def get_t_h_curve(data: Any) -> THCurveResponse:
70 # Validate request data using Pydantic model
71 request_data = THCurveRequest.model_validate(data)
72 return_data = {"curve_points": [
73 None] * len(request_data.streams), "states": [None] * len(request_data.streams)}
75 # Create and Linearize stream
76 for index, stream in enumerate(request_data.streams):
77 curve_points, state = generate_t_h_curve(
78 ppKey=request_data.ppKey,
79 composition=stream.composition,
80 mole_flow=request_data.mole_flow,
81 t_supply=stream.t_supply,
82 t_target=stream.t_target,
83 p_supply=stream.p_supply,
84 p_target=stream.p_target,
85 h_supply=stream.h_supply,
86 h_target=stream.h_target,
87 num_points=request_data.num_intervals
88 )
90 return_data["curve_points"][index] = curve_points.tolist()
91 return_data["states"][index] = serialize_states(state)
93 # Validate response data
94 validated_data = THCurveResponse.model_validate(return_data)
96 # Return data
97 return validated_data