tests/docs: unique-name driver loading; moving-path lifecycle and settings notes; VIV predeclare renamed

Tests load research drivers via importlib under unique module names
instead of a bare 'import run' (shared-process collision between the
Dütsch and VIV drivers). lifecycle.md qualifies immutable geometry and the
host-only get_flags for translating circles; supported_settings.md points to
the dense-only moving-circle feature; leontini_viv_predeclare.md is renamed
viv_re150_predeclare.md (Re 150 Kolahdouz/Qin case) with references updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-30 16:12:05 +00:00
1 parent 307468b671
commit 48ee0982c9
8 files changed
+47 -26

No files matched your search

+16 -13
View File
@@ -11,6 +11,20 @@ _spec = importlib.util.spec_from_file_location(
p = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(p)
def _load(rel, name):
"""Load a research driver module under a unique name (no bare ``import run``)."""
import sys
path = Path(__file__).resolve().parents[2] / rel
sys.path.insert(0, str(path.parent)) # for the driver's own sibling imports
try:
spec = importlib.util.spec_from_file_location(name, path)
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
finally:
sys.path.remove(str(path.parent))
return mod
T = 2520
@@ -93,12 +107,7 @@ def test_exact_point_inside_body_is_missing_even_with_fluid_corners():
def test_generated_config_passes_the_real_loader(tmp_path):
import json
import sys
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "research/duetsch_re100_kc5"))
try:
import run
finally:
sys.path.pop(0)
run = _load("research/duetsch_re100_kc5/run.py", "duetsch_run")
from CelerisLab.config import load_lbm_config
cfg_dict, u_max, n = run.config(20, 10.0, 2520)
path = tmp_path / "config_lbm.json"
@@ -111,13 +120,7 @@ def test_generated_config_passes_the_real_loader(tmp_path):
def _analyze():
import sys
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "research/duetsch_re100_kc5"))
try:
import analyze
finally:
sys.path.pop(0)
return analyze
return _load("research/duetsch_re100_kc5/analyze.py", "duetsch_analyze")
def test_hf_energy_is_parseval_weighted():