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,
variable,
)
from reframe.core.exceptions import DependencyError
from reframe.utility import udeps
from reframe_tests.tests.regression_checks import RegressionCheck
@@ -110,14 +111,34 @@ class GprMaxBaseTest(RunOnlyRegressionTest):
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"]:
"""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
else:
return self.getdep(self.test_dependency)
return self.getdep(variant)
def build_reference_filepath(self, name: Union[str, os.PathLike]) -> Path:
target = self.get_test_dependency()
@@ -148,7 +169,9 @@ class GprMaxBaseTest(RunOnlyRegressionTest):
"""Test depends on the Python virtual environment building correctly"""
self.depends_on("CreatePyenvTest", udeps.by_env)
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
def get_pyenv_path(self, CreatePyenvTest):

查看文件

@@ -1,4 +1,5 @@
from pathlib import Path
from typing import Optional
import reframe.utility.typecheck as typ
from numpy import prod
@@ -88,6 +89,9 @@ class BScanMixin(GprMaxMixin):
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):
# num_tasks = required
@@ -95,7 +99,7 @@ class TaskfarmMixin(GprMaxMixin):
@run_after("setup")
def add_taskfarm_flag(self):
"""Add taskfarm specific commandline arguments"""
self.executable_opts += ["-taskfarm"]
self.executable_opts += ["--taskfarm"]
class AntennaModelMixin(GprMaxMixin):

查看文件

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

查看文件

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

查看文件

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

查看文件

@@ -23,4 +23,4 @@ class TestSingleCellPml(GprMaxRegressionTest):
class TestSingleCellPmlMpi(MpiMixin, TestSingleCellPml):
tags = {"test", "mpi", "geometery", "box", "pml"}
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):
tags = {"test", "mpi", "2d", "waveform", "hertzian_dipole", "snapshot"}
mpi_layout = parameter([[2, 2, 1], [3, 3, 1], [4, 4, 1]])
test_dependency = "Test2DSnapshot"
test_dependency = Test2DSnapshot
@rfm.simple_test
@@ -69,7 +69,7 @@ class TestSnapshotMpi(MpiMixin, TestSnapshot):
[4, 4, 4],
]
)
test_dependency = "TestSnapshot"
test_dependency = TestSnapshot
@rfm.simple_test
@@ -88,4 +88,4 @@ class Test2DSliceSnapshotMpi(MpiMixin, Test2DSliceSnapshot):
[4, 4, 4],
]
)
test_dependency = "Test2DSliceSnapshot"
test_dependency = Test2DSliceSnapshot

查看文件

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

查看文件

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