diff --git a/easybuild/toolchains/compiler/nvhpc.py b/easybuild/toolchains/compiler/nvhpc.py index 222e9bc277..58e92b2423 100644 --- a/easybuild/toolchains/compiler/nvhpc.py +++ b/easybuild/toolchains/compiler/nvhpc.py @@ -22,11 +22,11 @@ # You should have received a copy of the GNU General Public License # along with EasyBuild. If not, see . ## -"""Compatibility module such that compiler.nvhpc.NVHPC and compiler.compiler.nvidia_compilers.NvidiaCompilers -can be used interchangeably +""" +Compatibility module to allow using old compiler toolchain NVHPC +Deprecated in EasyBuild 5.2.0 """ -import abc from easybuild.base import fancylogger from easybuild.toolchains.compiler.nvidia_compilers import NvidiaCompilers @@ -35,19 +35,14 @@ "easybuild.toolchains.compiler.nvidia_compilers in EasyBuild 5.2.0", '6.0') -# Former name used in EasyBuild until 5.2.0, now a DEPRECATED alias -class NVHPC(metaclass=abc.ABCMeta): # pylint: disable=too-few-public-methods +class NVHPC(NvidiaCompilers): """DEPRECATED alias for NvidiaCompilers.""" - def __new__(cls, *args, **kwargs): - if cls is NVHPC: - inst = NvidiaCompilers(*args, **kwargs) - inst.log.deprecated( - "easybuild.toolchains.compiler.nvhpc was replaced by " - "easybuild.toolchains.compiler.nvidia_compilers in EasyBuild 5.2.0", '6.0') - return inst - return super().__new__(cls) - + DEPRECATED = True -NVHPC.register(NvidiaCompilers) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) -# TODO EasyBuild 6.0: Remove NVHPC name from NvidiaCompilers.COMPILER_MODULE_NAME + self.log.deprecated( + "easybuild.toolchains.compiler.nvhpc was replaced by " + "easybuild.toolchains.compiler.nvidia_compilers in EasyBuild 5.2.0", '6.0' + ) diff --git a/easybuild/toolchains/compiler/nvidia_compilers.py b/easybuild/toolchains/compiler/nvidia_compilers.py index 62ed37f7c8..d1c4446941 100644 --- a/easybuild/toolchains/compiler/nvidia_compilers.py +++ b/easybuild/toolchains/compiler/nvidia_compilers.py @@ -45,8 +45,7 @@ class NvidiaCompilers(Compiler): "NVHPC compiler class" - # TODO EasyBuild 6.0: Remove NVHPC name - COMPILER_MODULE_NAME = ['nvidia-compilers', 'NVHPC'] + COMPILER_MODULE_NAME = ['nvidia-compilers'] COMPILER_FAMILY = TC_CONSTANT_NVHPC diff --git a/easybuild/toolchains/nvhpc.py b/easybuild/toolchains/nvhpc.py index 5156183685..0c46d7ed76 100644 --- a/easybuild/toolchains/nvhpc.py +++ b/easybuild/toolchains/nvhpc.py @@ -31,7 +31,6 @@ * Andreas Herten (Forschungszentrum Juelich) * Alex Domingo (Vrije Universiteit Brussel) """ -import abc from easybuild.toolchains.gcccore import GCCcore from easybuild.toolchains.linalg.nvblas import NVBLAS from easybuild.toolchains.linalg.nvscalapack import NVScaLAPACK @@ -48,14 +47,11 @@ class NVHPC(NvidiaCompilersToolchain, NVHPCX, NVBLAS, NVScaLAPACK): SUBTOOLCHAIN = [NvidiaCompilersToolchain.NAME, GCCcore.NAME, SYSTEM_TOOLCHAIN_NAME] -class NVHPCToolchain(metaclass=abc.ABCMeta): # pylint: disable=too-few-public-methods +class NVHPCToolchain(NvidiaCompilersToolchain): """DEPRECATED alias for NvidiaCompilersToolchain.""" - def __new__(cls, *args, **kwargs): - if cls is NVHPCToolchain: - inst = NvidiaCompilersToolchain(*args, **kwargs) - inst.log.deprecated("NVHPCToolchain was replaced by NvidiaCompilersToolchain in EasyBuild 5.2.0", '6.0') - return inst - return super().__new__(cls) + DEPRECATED = True + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) -NVHPCToolchain.register(NvidiaCompilersToolchain) + self.log.deprecated("NVHPCToolchain was replaced by NvidiaCompilersToolchain in EasyBuild 5.2.0", '6.0') diff --git a/easybuild/tools/docs.py b/easybuild/tools/docs.py index cbbd5e35b0..0f3e320b9b 100644 --- a/easybuild/tools/docs.py +++ b/easybuild/tools/docs.py @@ -1110,7 +1110,11 @@ def list_toolchains(output_format=FORMAT_TXT): # start with dict that maps toolchain name to corresponding subclass of Toolchain # filter deprecated 'dummy' toolchain - tcs = {tc.NAME: tc for tc in all_tcs} + tcs = { + tc.NAME: tc + for tc in all_tcs + if not hasattr(tc, "DEPRECATED") + } for tcname in sorted(tcs): tcc = tcs[tcname] diff --git a/test/framework/toolchain.py b/test/framework/toolchain.py index fe500b3bc5..2aaa2d918d 100644 --- a/test/framework/toolchain.py +++ b/test/framework/toolchain.py @@ -3390,7 +3390,6 @@ def test_get_flag(self): def test_nvhpc_compatibility(self): """Test that software using EasyBuild before 5.2.0 continues working the compiler.nvhpc toolchain being renamed to NvidiaCompilers""" - from easybuild.toolchains.nvompi import Nvompi from easybuild.toolchains.compiler.nvidia_compilers import NvidiaCompilers from easybuild.toolchains.nvhpc import NvidiaCompilersToolchain, NVHPCToolchain @@ -3399,29 +3398,25 @@ def test_nvhpc_compatibility(self): from easybuild.toolchains.compiler.nvhpc import NVHPC self.assertIn("nvhpc was replaced by easybuild.toolchains.compiler.nvidia_compilers", self.get_stderr()) - # load NVidiaCompilers, deprecated NVHPC corresponds to it - tc = NvidiaCompilers(name='NvidiaCompilers', version='2024a') # Common usage - # Might be checked by pre-5.2.0 users - self.assertIsInstance(tc, NVHPC) - - # load deprecated NVHPC, NvidiaCompilers corresponds to it + # load deprecated NVHPC and check it corresponds to NvidiaCompilers with self.temporarily_allow_deprecated_behaviour(), self.mocked_stdout_stderr(): tc = NVHPC(name='NVHPC', version='2024a') # Might be used by pre-5.2.0 users self.assertIn("nvhpc was replaced by easybuild.toolchains.compiler.nvidia_compilers", self.get_stderr()) self.assertIsInstance(tc, NvidiaCompilers) - # load deprecated NVHPCToolchain, it corresponds to NvidiaCompilersToolchain + # load deprecated NVHPCToolchain and check it corresponds to NvidiaCompilersToolchain with self.temporarily_allow_deprecated_behaviour(), self.mocked_stdout_stderr(): tc = NVHPCToolchain(name='NVHPC', version='2024a') # Might be used by pre-5.2.0 users self.assertIn("NVHPCToolchain was replaced by NvidiaCompilersToolchain", self.get_stderr()) self.assertIsInstance(tc, NvidiaCompilersToolchain) + from easybuild.toolchains.nvompi import Nvompi tc = Nvompi(version='2024a') # Common usage self.assertIsInstance(tc, NvidiaCompilers) self.assertIsInstance(tc, NvidiaCompilersToolchain) - self.assertIsInstance(tc, NVHPCToolchain) - # compiler toolchain NVHPC is deprecated in 5.2.0, but might still be checked by existing code - self.assertIsInstance(tc, NVHPC) + # Nvompi migrated to new NvidiaCompiler in v5.2.0, compiler toolchain NVHPC deprecated + self.assertNotIsInstance(tc, NVHPCToolchain) + self.assertNotIsInstance(tc, NVHPC) def suite(loader=None):