test_block_step_sync: locate block_stepper without importing it
The module-level import of CelerisLab.lbm.block_stepper loaded pycuda.driver into the shared test process, unlike the other CPU host tests (which load mocked copies via AST). find_spec gives the source path without the import. Test content and assertions unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
f3f1e3d588
commit
1cbdc479cf
@@ -1,6 +1,7 @@
|
|||||||
"""Host contract of PeriodicBlockStepper.step(n): one stream wait per call (mocked driver)."""
|
"""Host contract of PeriodicBlockStepper.step(n): one stream wait per call (mocked driver)."""
|
||||||
import ast
|
import ast
|
||||||
from contextlib import nullcontext
|
from contextlib import nullcontext
|
||||||
|
import importlib.util
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import types
|
import types
|
||||||
from unittest.mock import Mock
|
from unittest.mock import Mock
|
||||||
@@ -8,14 +9,15 @@ import unittest
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
import CelerisLab.lbm.block_stepper as b
|
|
||||||
from CelerisLab.config import LBMConfig
|
from CelerisLab.config import LBMConfig
|
||||||
from CelerisLab.lbm.blocks import BlockLayout2D
|
from CelerisLab.lbm.blocks import BlockLayout2D
|
||||||
|
|
||||||
|
|
||||||
def host_module():
|
def host_module():
|
||||||
"""block_stepper with pycuda/compiler replaced by mocks; no GPU context."""
|
"""block_stepper with pycuda/compiler replaced by mocks; no GPU context."""
|
||||||
path = Path(b.__file__)
|
# Locate the source without importing it: importing block_stepper loads pycuda.driver,
|
||||||
|
# which CPU-only import-boundary tests (test_build_contracts) must never see.
|
||||||
|
path = Path(importlib.util.find_spec("CelerisLab.lbm.block_stepper").origin)
|
||||||
tree = ast.parse(path.read_text())
|
tree = ast.parse(path.read_text())
|
||||||
tree.body = [node for node in tree.body if not (
|
tree.body = [node for node in tree.body if not (
|
||||||
isinstance(node, ast.Import) and any(a.name == "pycuda.driver" for a in node.names)
|
isinstance(node, ast.Import) and any(a.name == "pycuda.driver" for a in node.names)
|
||||||
|
|||||||
Reference in New Issue
Block a user