完善通用求解器回归与前端交互

- 引入因果坐标内核、热流体恢复和递进长时回归\n- 完善正交连线、线桥、视图保持与结果曲线缩放\n- 补充依赖约束、CI、测试基线和北京时间更新日志
This commit is contained in:
lujingze committed 2026-08-18 06:42:07 +00:00
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()