完善通用求解器回归与前端交互
- 引入因果坐标内核、热流体恢复和递进长时回归\n- 完善正交连线、线桥、视图保持与结果曲线缩放\n- 补充依赖约束、CI、测试基线和北京时间更新日志
This commit is contained in:
1 parent
143e8dd309
commit
b435daecf2
65 files changed
+172271
-701
No files matched your search
@@ -65,6 +65,25 @@ class _PassThrough(AlgebraicComponent):
|
||||
self.right.h_outflow = connected_h["left"]
|
||||
|
||||
|
||||
class _ReferenceAwarePassThrough(_PassThrough):
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
update_log: list[str],
|
||||
reference_log: list[str],
|
||||
) -> None:
|
||||
super().__init__(name, update_log)
|
||||
self.reference_log = reference_log
|
||||
self.flow_temperature_references: dict[str, float] = {}
|
||||
|
||||
def update_flow_temperature_references(
|
||||
self,
|
||||
connected_h: Mapping[str, float],
|
||||
) -> None:
|
||||
self.reference_log.append(self.name)
|
||||
self.flow_temperature_references = dict(connected_h)
|
||||
|
||||
|
||||
def _build_chain() -> tuple[
|
||||
SimulationNetwork,
|
||||
_CountingDynamicAnchor,
|
||||
@@ -132,6 +151,53 @@ class StreamResolverExecutionPlanTests(unittest.TestCase):
|
||||
["first", "second"] * diagnostics.iterations,
|
||||
)
|
||||
|
||||
def test_non_dynamic_flow_reference_hook_does_not_repeat_stream_update(
|
||||
self,
|
||||
) -> None:
|
||||
update_log: list[str] = []
|
||||
reference_log: list[str] = []
|
||||
left = _CountingDynamicAnchor(
|
||||
"left_anchor",
|
||||
enthalpy=100.0,
|
||||
temperature_reference_h=1_100.0,
|
||||
)
|
||||
middle = _ReferenceAwarePassThrough(
|
||||
"middle",
|
||||
update_log,
|
||||
reference_log,
|
||||
)
|
||||
right = _CountingDynamicAnchor(
|
||||
"right_anchor",
|
||||
enthalpy=400.0,
|
||||
temperature_reference_h=1_400.0,
|
||||
)
|
||||
network = SimulationNetwork("flow-temperature-reference")
|
||||
for component in (left, middle, right):
|
||||
network.add_component(component)
|
||||
network.connect("left_anchor", "port", "middle", "left")
|
||||
network.connect("middle", "right", "right_anchor", "port")
|
||||
resolver = StreamResolver(network)
|
||||
|
||||
diagnostics, _connected = resolver.solve()
|
||||
stream_updates_before = tuple(update_log)
|
||||
outflows_before = (middle.left.h_outflow, middle.right.h_outflow)
|
||||
resolver.refresh_flow_temperature_references()
|
||||
|
||||
self.assertEqual(
|
||||
stream_updates_before,
|
||||
("middle",) * diagnostics.iterations,
|
||||
)
|
||||
self.assertEqual(tuple(update_log), stream_updates_before)
|
||||
self.assertEqual(reference_log, ["middle"])
|
||||
self.assertEqual(
|
||||
middle.flow_temperature_references,
|
||||
{"left": 1_100.0, "right": 1_400.0},
|
||||
)
|
||||
self.assertEqual(
|
||||
(middle.left.h_outflow, middle.right.h_outflow),
|
||||
outflows_before,
|
||||
)
|
||||
|
||||
def test_precompiled_bindings_preserve_outputs_and_references(self) -> None:
|
||||
default_network, default_left, default_first, default_second, default_right, _ = (
|
||||
_build_chain()
|
||||
|
||||
Reference in new issue
Block a user