File: compare_checksums.py

package info (click to toggle)
ectrans 1.7.0-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,976 kB
  • sloc: f90: 51,064; ansic: 5,942; cpp: 1,112; python: 488; sh: 127; makefile: 46
file content (73 lines) | stat: -rwxr-xr-x 2,817 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env python3

import sys
import os
import filecmp
class colors:
    SUCCESS = '\033[94m'
    FAILURE = '\033[91m'
    ENDC = '\033[0m'

def compare_checksums(folder_path, ntasks, nthreads):
    if not os.path.isdir(folder_path):
        print(f"Error: '{folder_path}' is not a valid directory.")
        return False

    print(f"Check files in folder {folder_path}:")

    success_count = 0
    error_count = 0
    total_count = 0
    failed_list = []
    for file_name in os.listdir(folder_path):
        if (".checksums" in file_name and "benchmark" in file_name  and "mpi0_omp1" in file_name):
            file_path = os.path.join(folder_path, file_name)
            if os.path.isfile(file_path):
                print(f"{file_name}")
                found = False
                for mpi in ntasks:
                    for omp in nthreads:
                        other_file_name = file_name.replace("mpi0_omp1",f"mpi{mpi}_omp{omp}")
                        if other_file_name == file_name:
                            continue
                        other_file_path = os.path.join(folder_path, other_file_name)
                        if os.path.isfile(other_file_path):
                            total_count = total_count + 1
                            found = True
                            if (filecmp.cmp(file_path, other_file_path)):
                                print(f"    {other_file_name} ...{colors.SUCCESS}Passed{colors.ENDC}")
                                success_count = success_count +1
                            else:
                                print(f"    {other_file_name} ...***{colors.FAILURE}Failed{colors.ENDC}")
                                error_count = error_count + 1
                                failed_list.append(f"{file_path} {other_file_path}")
                if (not found):
                    print(f"    No comparison found")
                    return False
    percentage = int(100*(success_count/total_count))
    if (error_count> 0):
        print(f"{percentage}% comparison passed, {colors.FAILURE}{error_count} comparison failed out of {total_count}{colors.ENDC}")

        print("The following comparisons FAILED:")

        for failed in failed_list:
            print(f"    {colors.FAILURE}{failed}{colors.ENDC}")
    else:
        print(f"{percentage}% checks passed")

    if (error_count > 0):
        return False
    return True

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Usage: python compare_checksums.py <folder_path> <ntasks list> <nthreads list>")
        exit(1)
    else:
        folder = sys.argv[1]
        ntasks = sys.argv[2].split(",")
        nthreads = sys.argv[3].split(",")
        if compare_checksums(folder, ntasks, nthreads):
            exit(0)
        else:
            exit(1)