Fix getting variant of test dependency

这个提交包含在:
nmannall
2024-11-25 17:48:43 +00:00
父节点 157cb1f893
当前提交 3d579be7e6
共有 9 个文件被更改,包括 48 次插入22 次删除

查看文件

@@ -23,6 +23,7 @@ from reframe.core.builtins import (
sanity_function, sanity_function,
variable, variable,
) )
from reframe.core.exceptions import DependencyError
from reframe.utility import udeps from reframe.utility import udeps
from reframe_tests.tests.regression_checks import RegressionCheck from reframe_tests.tests.regression_checks import RegressionCheck
@@ -110,14 +111,34 @@ class GprMaxBaseTest(RunOnlyRegressionTest):
regression_checks = variable(typ.List[RegressionCheck], value=[]) regression_checks = variable(typ.List[RegressionCheck], value=[])
test_dependency = variable(type(None), str, value=None) # TODO: Make this a ReFrame variable
# Not currently possible as ReFrame does not think an object of type
# reframe.core.meta.RegressionTestMeta is copyable, and so ReFrame
# test classes cannot be specified in a variable.
test_dependency: Optional[type["GprMaxBaseTest"]] = None
# test_dependency = variable(type(None), type, value=None)
def get_test_dependency_variant_name(self, **kwargs) -> Optional[str]:
if self.test_dependency is None:
return None
variant_nums = self.test_dependency.get_variant_nums(model=self.model, **kwargs)
if len(variant_nums) < 1:
kwargs.setdefault("model", self.model)
raise DependencyError(
f"No variant of '{self.test_dependency.__name__}' meets conditions: {kwargs}",
)
return self.test_dependency.variant_name(variant_nums[0])
def get_test_dependency(self) -> Optional["GprMaxBaseTest"]: def get_test_dependency(self) -> Optional["GprMaxBaseTest"]:
"""Get test variant with the same model and number of models""" """Get test variant with the same model and number of models"""
if self.test_dependency is None: variant = self.get_test_dependency_variant_name()
if variant is None:
return None return None
else: else:
return self.getdep(self.test_dependency) return self.getdep(variant)
def build_reference_filepath(self, name: Union[str, os.PathLike]) -> Path: def build_reference_filepath(self, name: Union[str, os.PathLike]) -> Path:
target = self.get_test_dependency() target = self.get_test_dependency()
@@ -148,7 +169,9 @@ class GprMaxBaseTest(RunOnlyRegressionTest):
"""Test depends on the Python virtual environment building correctly""" """Test depends on the Python virtual environment building correctly"""
self.depends_on("CreatePyenvTest", udeps.by_env) self.depends_on("CreatePyenvTest", udeps.by_env)
if self.test_dependency is not None: if self.test_dependency is not None:
self.depends_on(self.test_dependency, udeps.by_env) variant = self.get_test_dependency_variant_name()
self.depends_on(variant, udeps.by_env)
# self.depends_on(self.test_dependency, udeps.by_env)
@require_deps @require_deps
def get_pyenv_path(self, CreatePyenvTest): def get_pyenv_path(self, CreatePyenvTest):

查看文件

@@ -1,4 +1,5 @@
from pathlib import Path from pathlib import Path
from typing import Optional
import reframe.utility.typecheck as typ import reframe.utility.typecheck as typ
from numpy import prod from numpy import prod
@@ -88,6 +89,9 @@ class BScanMixin(GprMaxMixin):
f"mv {self.model}_merged.h5 {self.output_file}", f"mv {self.model}_merged.h5 {self.output_file}",
] ]
def get_test_dependency_variant_name(self) -> Optional[str]:
return super().get_test_dependency_variant_name(num_models=self.num_models)
class TaskfarmMixin(GprMaxMixin): class TaskfarmMixin(GprMaxMixin):
# num_tasks = required # num_tasks = required
@@ -95,7 +99,7 @@ class TaskfarmMixin(GprMaxMixin):
@run_after("setup") @run_after("setup")
def add_taskfarm_flag(self): def add_taskfarm_flag(self):
"""Add taskfarm specific commandline arguments""" """Add taskfarm specific commandline arguments"""
self.executable_opts += ["-taskfarm"] self.executable_opts += ["--taskfarm"]
class AntennaModelMixin(GprMaxMixin): class AntennaModelMixin(GprMaxMixin):

查看文件

@@ -37,18 +37,18 @@ class Test2DModelYZ(GprMaxRegressionTest):
class Test2DModelXYMpi(MpiMixin, Test2DModelXY): class Test2DModelXYMpi(MpiMixin, Test2DModelXY):
tags = {"test", "mpi", "2d", "waveform", "hertzian_dipole"} tags = {"test", "mpi", "2d", "waveform", "hertzian_dipole"}
mpi_layout = parameter([[4, 4, 1]]) mpi_layout = parameter([[4, 4, 1]])
test_dependency = "Test2DModelXY" test_dependency = Test2DModelXY
@rfm.simple_test @rfm.simple_test
class Test2DModelXZMpi(MpiMixin, Test2DModelXZ): class Test2DModelXZMpi(MpiMixin, Test2DModelXZ):
tags = {"test", "mpi", "2d", "waveform", "hertzian_dipole"} tags = {"test", "mpi", "2d", "waveform", "hertzian_dipole"}
mpi_layout = parameter([[4, 1, 4]]) mpi_layout = parameter([[4, 1, 4]])
test_dependency = "Test2DModelXZ" test_dependency = Test2DModelXZ
@rfm.simple_test @rfm.simple_test
class Test2DModelYZMpi(MpiMixin, Test2DModelYZ): class Test2DModelYZMpi(MpiMixin, Test2DModelYZ):
tags = {"test", "mpi", "2d", "waveform", "hertzian_dipole"} tags = {"test", "mpi", "2d", "waveform", "hertzian_dipole"}
mpi_layout = parameter([[1, 4, 4]]) mpi_layout = parameter([[1, 4, 4]])
test_dependency = "Test2DModelYZ" test_dependency = Test2DModelYZ

查看文件

@@ -49,18 +49,18 @@ class TestEdgeGeometry(AntennaModelMixin, GprMaxRegressionTest):
class TestBoxGeometryDefaultPmlMpi(MpiMixin, TestBoxGeometryDefaultPml): class TestBoxGeometryDefaultPmlMpi(MpiMixin, TestBoxGeometryDefaultPml):
tags = {"test", "mpi", "geometery", "box"} tags = {"test", "mpi", "geometery", "box"}
mpi_layout = parameter([[2, 2, 2], [3, 3, 3], [4, 4, 4]]) mpi_layout = parameter([[2, 2, 2], [3, 3, 3], [4, 4, 4]])
test_dependency = "TestBoxGeometryDefaultPml" test_dependency = TestBoxGeometryDefaultPml
@rfm.simple_test @rfm.simple_test
class TestBoxGeometryNoPmlMpi(MpiMixin, TestBoxGeometryNoPml): class TestBoxGeometryNoPmlMpi(MpiMixin, TestBoxGeometryNoPml):
tags = {"test", "mpi", "geometery", "box"} tags = {"test", "mpi", "geometery", "box"}
mpi_layout = parameter([[2, 2, 2], [3, 3, 3], [4, 4, 4]]) mpi_layout = parameter([[2, 2, 2], [3, 3, 3], [4, 4, 4]])
test_dependency = "TestBoxGeometryNoPml" test_dependency = TestBoxGeometryNoPml
@rfm.simple_test @rfm.simple_test
class TestEdgeGeometryMpi(MpiMixin, TestEdgeGeometry): class TestEdgeGeometryMpi(MpiMixin, TestEdgeGeometry):
tags = {"test", "mpi", "geometry", "edge", "transmission_line", "waveform", "antenna"} tags = {"test", "mpi", "geometry", "edge", "transmission_line", "waveform", "antenna"}
mpi_layout = parameter([[3, 3, 3]]) mpi_layout = parameter([[3, 3, 3]])
test_dependency = "TestEdgeGeometry" test_dependency = TestEdgeGeometry

查看文件

@@ -23,4 +23,4 @@ class TestDispersiveMaterials(GprMaxRegressionTest):
class TestDispersiveMaterialsMpi(MpiMixin, TestDispersiveMaterials): class TestDispersiveMaterialsMpi(MpiMixin, TestDispersiveMaterials):
tags = {"test", "mpi", "hertzian_dipole", "waveform", "material", "dispersive", "box"} tags = {"test", "mpi", "hertzian_dipole", "waveform", "material", "dispersive", "box"}
mpi_layout = parameter([[3, 3, 3]]) mpi_layout = parameter([[3, 3, 3]])
test_dependency = "TestDispersiveMaterials" test_dependency = TestDispersiveMaterials

查看文件

@@ -23,4 +23,4 @@ class TestSingleCellPml(GprMaxRegressionTest):
class TestSingleCellPmlMpi(MpiMixin, TestSingleCellPml): class TestSingleCellPmlMpi(MpiMixin, TestSingleCellPml):
tags = {"test", "mpi", "geometery", "box", "pml"} tags = {"test", "mpi", "geometery", "box", "pml"}
mpi_layout = parameter([[2, 2, 1], [3, 3, 1]]) mpi_layout = parameter([[2, 2, 1], [3, 3, 1]])
test_dependency = "TestSingleCellPml" test_dependency = TestSingleCellPml

查看文件

@@ -50,7 +50,7 @@ class Test2DSliceSnapshot(GprMaxSnapshotTest):
class Test2DSnapshotMpi(MpiMixin, Test2DSnapshot): class Test2DSnapshotMpi(MpiMixin, Test2DSnapshot):
tags = {"test", "mpi", "2d", "waveform", "hertzian_dipole", "snapshot"} tags = {"test", "mpi", "2d", "waveform", "hertzian_dipole", "snapshot"}
mpi_layout = parameter([[2, 2, 1], [3, 3, 1], [4, 4, 1]]) mpi_layout = parameter([[2, 2, 1], [3, 3, 1], [4, 4, 1]])
test_dependency = "Test2DSnapshot" test_dependency = Test2DSnapshot
@rfm.simple_test @rfm.simple_test
@@ -69,7 +69,7 @@ class TestSnapshotMpi(MpiMixin, TestSnapshot):
[4, 4, 4], [4, 4, 4],
] ]
) )
test_dependency = "TestSnapshot" test_dependency = TestSnapshot
@rfm.simple_test @rfm.simple_test
@@ -88,4 +88,4 @@ class Test2DSliceSnapshotMpi(MpiMixin, Test2DSliceSnapshot):
[4, 4, 4], [4, 4, 4],
] ]
) )
test_dependency = "Test2DSliceSnapshot" test_dependency = Test2DSliceSnapshot

查看文件

@@ -37,18 +37,18 @@ class TestTransmissionLineSource(GprMaxRegressionTest):
class TestHertzianDipoleSourceMpi(MpiMixin, TestHertzianDipoleSource): class TestHertzianDipoleSourceMpi(MpiMixin, TestHertzianDipoleSource):
tags = {"test", "mpi", "hertzian_dipole", "waveform"} tags = {"test", "mpi", "hertzian_dipole", "waveform"}
mpi_layout = parameter([[3, 3, 3]]) mpi_layout = parameter([[3, 3, 3]])
test_dependency = "TestHertzianDipoleSource" test_dependency = TestHertzianDipoleSource
@rfm.simple_test @rfm.simple_test
class TestMagneticDipoleSourceMpi(MpiMixin, TestMagneticDipoleSource): class TestMagneticDipoleSourceMpi(MpiMixin, TestMagneticDipoleSource):
tags = {"test", "mpi", "magnetic_dipole", "waveform"} tags = {"test", "mpi", "magnetic_dipole", "waveform"}
mpi_layout = parameter([[3, 3, 3]]) mpi_layout = parameter([[3, 3, 3]])
test_dependency = "TestMagneticDipoleSource" test_dependency = TestMagneticDipoleSource
@rfm.simple_test @rfm.simple_test
class TestTransmissionLineSourceMpi(MpiMixin, TestTransmissionLineSource): class TestTransmissionLineSourceMpi(MpiMixin, TestTransmissionLineSource):
tags = {"test", "mpi", "transmission_line", "waveform"} tags = {"test", "mpi", "transmission_line", "waveform"}
mpi_layout = parameter([[3, 3, 3]]) mpi_layout = parameter([[3, 3, 3]])
test_dependency = "TestTransmissionLineSource" test_dependency = TestTransmissionLineSource

查看文件

@@ -1,7 +1,6 @@
import reframe as rfm import reframe as rfm
from reframe_tests.tests.mixins import TaskfarmMixin from reframe_tests.tests.mixins import TaskfarmMixin
from reframe_tests.tests.standard_tests import GprMaxRegressionTest
from reframe_tests.tests.test_example_models import TestBscan from reframe_tests.tests.test_example_models import TestBscan
"""Reframe regression tests for taskfarm functionality """Reframe regression tests for taskfarm functionality
@@ -23,7 +22,7 @@ class TestSingleNodeTaskfarm(TaskfarmMixin, TestBscan):
} }
num_tasks = 8 num_tasks = 8
num_tasks_per_node = 8 num_tasks_per_node = 8
test_dependency = "TestBscan" test_dependency = TestBscan
@rfm.simple_test @rfm.simple_test
@@ -41,4 +40,4 @@ class TestMultiNodeTaskfarm(TaskfarmMixin, TestBscan):
} }
num_tasks = 32 num_tasks = 32
num_tasks_per_node = 8 num_tasks_per_node = 8
test_dependency = "TestBscan" test_dependency = TestBscan