Relocate cmake_cp2k.sh and test matcher classes (#5433)

This commit is contained in:
Ole Schütt 2026-06-23 13:28:58 +02:00 committed by GitHub
parent 3c69fd194f
commit 06a6a83eab
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
46 changed files with 133 additions and 127 deletions

88
tests/matcher_classes.py Normal file
View file

@ -0,0 +1,88 @@
import re
import sys
from dataclasses import dataclass
from typing import Any, Optional
if sys.version_info >= (3, 8):
from typing import Literal, Protocol
else:
from typing_extensions import Literal, Protocol
# ======================================================================================
@dataclass
class MatchResult:
status: Literal["OK", "WRONG RESULT", "N/A"]
error: Optional[str]
value: Optional[float]
# ======================================================================================
class Matcher(Protocol):
def run(self, output: str, **kwargs: Any) -> MatchResult: ...
# ======================================================================================
class GenericMatcher(Matcher):
def __init__(
self, pattern: str, col: int, regex: bool = False, abs_value: bool = False
):
self.pattern = pattern
self.regex_mode = regex
self.abs_value = abs_value
if not regex:
for c in r"[]()|+*?":
pattern = pattern.replace(c, f"\\{c}")
self.regex = re.compile(pattern)
self.col = col
def run(self, output: str, **kwargs: Any) -> MatchResult:
tol, ref = kwargs["tol"], kwargs["ref"]
assert isinstance(tol, float) or isinstance(ref, int)
assert isinstance(ref, float) or isinstance(ref, int)
# grep result
for line in reversed(output.split("\n")):
match = self.regex.search(line)
if match:
if self.regex_mode and match.groups():
value_str = match.group(1)
else:
value_str = line.split()[self.col - 1]
break
else:
error = f"Result not found: '{self.pattern}'.\n"
return MatchResult("WRONG RESULT", error, value=None)
# parse result
try:
value = float(value_str.replace("D", "E"))
if self.abs_value:
value = abs(value)
except:
error = f"Could not parse result as float: '{value_str}'.\n"
return MatchResult("WRONG RESULT", error, value=None)
# compare result to reference
diff = value - ref
rel_error = abs(diff / ref if ref != 0.0 else diff)
if rel_error > tol:
error = f"Difference too large: {rel_error:.2e} > {tol}, value: {value}.\n"
return MatchResult("WRONG RESULT", error, value)
return MatchResult("OK", error=None, value=value) # passed
# ======================================================================================
class TextPresenceMatcher(Matcher):
def __init__(self, text: str):
self.text = text
def run(self, output: str, **kwargs: Any) -> MatchResult:
if self.text not in output:
return MatchResult(
"WRONG RESULT", f"Text not found: '{self.text}'.\n", value=None
)
return MatchResult("OK", error=None, value=None)
# EOF

View file

@ -1,21 +1,7 @@
import re
import sys
import traceback
from dataclasses import dataclass
from typing import Any, Dict, Tuple, Optional
from typing import Any, Dict
if sys.version_info >= (3, 8):
from typing import Literal, Protocol
else:
from typing_extensions import Literal, Protocol
# ======================================================================================
@dataclass
class MatchResult:
status: Literal["OK", "WRONG RESULT", "N/A"]
error: Optional[str]
value: Optional[float]
from matcher_classes import Matcher, MatchResult, GenericMatcher, TextPresenceMatcher
# ======================================================================================
@ -28,74 +14,6 @@ def run_matcher(output: str, **spec: Any) -> MatchResult:
return MatchResult("N/A", error=traceback.format_exc(), value=None)
# ======================================================================================
class Matcher(Protocol):
def run(self, output: str, **kwargs: Any) -> MatchResult: ...
# ======================================================================================
class GenericMatcher(Matcher):
def __init__(
self, pattern: str, col: int, regex: bool = False, abs_value: bool = False
):
self.pattern = pattern
self.regex_mode = regex
self.abs_value = abs_value
if not regex:
for c in r"[]()|+*?":
pattern = pattern.replace(c, f"\\{c}")
self.regex = re.compile(pattern)
self.col = col
def run(self, output: str, **kwargs: Any) -> MatchResult:
tol, ref = kwargs["tol"], kwargs["ref"]
assert isinstance(tol, float) or isinstance(ref, int)
assert isinstance(ref, float) or isinstance(ref, int)
# grep result
for line in reversed(output.split("\n")):
match = self.regex.search(line)
if match:
if self.regex_mode and match.groups():
value_str = match.group(1)
else:
value_str = line.split()[self.col - 1]
break
else:
error = f"Result not found: '{self.pattern}'.\n"
return MatchResult("WRONG RESULT", error, value=None)
# parse result
try:
value = float(value_str.replace("D", "E"))
if self.abs_value:
value = abs(value)
except:
error = f"Could not parse result as float: '{value_str}'.\n"
return MatchResult("WRONG RESULT", error, value=None)
# compare result to reference
diff = value - ref
rel_error = abs(diff / ref if ref != 0.0 else diff)
if rel_error > tol:
error = f"Difference too large: {rel_error:.2e} > {tol}, value: {value}.\n"
return MatchResult("WRONG RESULT", error, value)
return MatchResult("OK", error=None, value=value) # passed
# ======================================================================================
class TextPresenceMatcher(Matcher):
def __init__(self, text: str):
self.text = text
def run(self, output: str, **kwargs: Any) -> MatchResult:
if self.text not in output:
return MatchResult(
"WRONG RESULT", f"Text not found: '{self.text}'.\n", value=None
)
return MatchResult("OK", error=None, value=None)
# ======================================================================================
class MatcherRegistry(Dict[str, Matcher]):
def __setitem__(self, key: str, value: Matcher) -> None:

View file

@ -88,7 +88,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_hip_Mi100 psmp
# Run build test.

View file

@ -88,7 +88,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_hip_Mi50 psmp
# Run build test.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain ssmp
# Run test for aiida.

View file

@ -72,7 +72,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_arm64 psmp
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_asan psmp
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain ssmp
# Run test for ase.

View file

@ -71,7 +71,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_conventions psmp
# Run test for conventions.

View file

@ -72,7 +72,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_coverage psmp
# Run coverage test.

View file

@ -83,7 +83,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_cuda_A100 psmp
# Run regression tests.

View file

@ -83,7 +83,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_cuda_P100 psmp
# Run regression tests.

View file

@ -83,7 +83,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_cuda_V100 psmp
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain psmp
# Run regression tests.

View file

@ -108,7 +108,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh ubuntu ssmp
# Run regression tests.

View file

@ -108,7 +108,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh ubuntu ssmp
# Run regression tests.

View file

@ -108,7 +108,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh ubuntu ssmp
# Run regression tests.

View file

@ -108,7 +108,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh ubuntu ssmp
# Run regression tests.

View file

@ -112,7 +112,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh ubuntu ssmp
# Run regression tests.

View file

@ -112,7 +112,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh ubuntu ssmp
# Run regression tests.

View file

@ -112,7 +112,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh ubuntu ssmp
# Run regression tests.

View file

@ -108,7 +108,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh ubuntu ssmp
# Run regression tests.

View file

@ -70,7 +70,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_generic psmp
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain ssmp
# Run test for gromacs.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain ssmp
# Run test for i-pi.

View file

@ -72,7 +72,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_intel psmp
# Run regression tests.

View file

@ -72,7 +72,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_intel ssmp
# Run regression tests.

View file

@ -72,7 +72,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_intel psmp
# Run regression tests.

View file

@ -72,7 +72,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_intel ssmp
# Run regression tests.

View file

@ -72,7 +72,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain pdbg
# Generate manual.

View file

@ -112,7 +112,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh minimal sdbg
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain psmp
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain pdbg
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain psmp
# Run performance test for toolchain.

View file

@ -83,7 +83,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_cuda_A100 psmp
# Run performance test for toolchain_cuda_A100.

View file

@ -83,7 +83,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_cuda_P100 psmp
# Run performance test for toolchain_cuda_P100.

View file

@ -83,7 +83,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain_cuda_V100 psmp
# Run performance test for toolchain_cuda_V100.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain ssmp
# Run test for phonopy.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain psmp
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain psmp
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain pdbg
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain sdbg
# Run regression tests.

View file

@ -69,7 +69,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh toolchain ssmp
# Run regression tests.

View file

@ -449,7 +449,7 @@ COPY ./cmake ./cmake
COPY ./CMakeLists.txt .
# Compile CP2K.
COPY ./tools/docker/scripts/build_cp2k.sh .
COPY ./tools/docker/scripts/build_cp2k.sh ./tools/docker/scripts/cmake_cp2k.sh ./
RUN ./build_cp2k.sh {profile} {version}
"""
return output

View file

@ -17,7 +17,7 @@ fi
echo "==================== Building CP2K ===================="
# shellcheck disable=SC1091
source ./cmake/cmake_cp2k.sh "${PROFILE}" "${VERSION}"
source ./cmake_cp2k.sh "${PROFILE}" "${VERSION}"
# Compile CP2K
echo -en '\nCompiling CP2K ... '