diff --git a/tests/validation/taylor_green/test_projected_pairs.py b/tests/validation/taylor_green/test_projected_pairs.py index b1e9f8f..52af16d 100644 --- a/tests/validation/taylor_green/test_projected_pairs.py +++ b/tests/validation/taylor_green/test_projected_pairs.py @@ -249,35 +249,41 @@ class ProjectedPairsTests(unittest.TestCase): self.assertFalse(assess(incomplete)["comparisons"][3]["passed"]) def test_pinned_build_sources_match_host_generated_inputs(self): - """The pinned fingerprints are what today's compiler generates from the qualified - NUMERICAL_REVISION kernels; the current kernels may legitimately differ.""" + """Check the pinned fingerprints using NUMERICAL_REVISION's renderer and kernels. + The imported LBMConfig is unchanged from that revision; this is a host + build-input check, not a reconstruction of the historical CUDA toolchain.""" + import importlib.util import tarfile - from CelerisLab.cuda import compiler_v2 kernels = "src/CelerisLab/lbm/kernels" + renderer = "src/CelerisLab/cuda/compiler_v2.py" if subprocess.run(["git", "-C", str(REPO), "cat-file", "-e", f"{NUMERICAL_REVISION}^{{commit}}"], capture_output=True).returncode: self.fail(f"{NUMERICAL_REVISION} is not in this clone; the pinned build " "sources cannot be checked") archive = subprocess.run(["git", "-C", str(REPO), "archive", "--format=tar", - NUMERICAL_REVISION, kernels], + NUMERICAL_REVISION, kernels, renderer], capture_output=True, check=True).stdout with tempfile.TemporaryDirectory() as snapshot: with tarfile.open(fileobj=io.BytesIO(archive)) as tar: tar.extractall(snapshot) - with patch.object(compiler_v2, "_KERNEL_DIR", str(Path(snapshot) / kernels)): + spec = importlib.util.spec_from_file_location( + "CelerisLab.cuda._compiler_a135252", Path(snapshot) / renderer) + compiler = importlib.util.module_from_spec(spec) + spec.loader.exec_module(compiler) + with patch.object(compiler, "_KERNEL_DIR", str(Path(snapshot) / kernels)): for size in (128, 256): with self.subTest(size=size): cfg = replace(run_case.config(size, 100), nx=10, ny=10) cfg.validate() - root = compiler_v2.generate_config(cfg) + root = compiler.generate_config(cfg) try: actual = json.loads((Path(root) / ".celeris-build").read_text()) expected = build_metadata(size) self.assertEqual(actual, {key: expected[key] for key in ("source_sha256", "config", "n_objects")}) finally: - compiler_v2.cleanup_build_dir(root) + compiler.cleanup_build_dir(root) def test_source_preflight_requires_clean_exact_revision_and_tree(self): import oracle