File: compare_volk_profiles

package info (click to toggle)
volk 3.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,164 kB
  • sloc: ansic: 50,363; cpp: 2,840; asm: 918; python: 897; xml: 385; sh: 157; makefile: 14
file content (69 lines) | stat: -rwxr-xr-x 1,812 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
#!/bin/env python3
# Copyright 2022, 2025 Marcus Müller
# SPDX-License-Identifier: GPL-3.0
# Takes in a list of volk profiles, ignores empty and identical lines, prints a table of differences.
# Hacky as hell

from sys import argv


def keepline(line: str) -> bool:
    if not line:
        return False
    line = line.strip()
    if line.startswith("#"):
        return False
    return True


def kernel(line: str) -> str:
    return line.split(" ")[0]


def impls(line: str) -> tuple[str, str]:
    return tuple(line.strip().split(" ")[1:])


machines = [
    {kernel(line): impls(line) for line in open(f_name) if keepline(line)}
    for f_name in argv[1:]
]
kernels = [set(d.keys()) for d in machines]
common_kernels = [
    kernel for kernel in kernels[0] if all((kernel in ks for ks in kernels[1:]))
]

differing_kernels = dict()
for kernel in common_kernels:
    first_impl = machines[0][kernel]
    if all(machine[kernel] == first_impl for machine in machines[1:]):
        continue
    differing_kernels[kernel] = {
        argv[idx + 1]: machine[kernel] for idx, machine in enumerate(machines)
    }

max_kernel_len = max(len(kernel) for kernel in common_kernels)
max_impl_len = max(
    max(max(len(alignment) for alignment in impl) for impl in kernel.values())
    for kernel in differing_kernels.values()
)

print(
    f"|{'Kernel':<{max_kernel_len}}|"
    + "|".join(
        f"{fname + ' a':<{max_impl_len}}|{fname + ' u':<{max_impl_len}}"
        for fname in argv[1:]
    )
    + "|"
)
for kernel, impls in differing_kernels.items():
    print(
        f"|{kernel:<{max_kernel_len}}|"
        + "|".join(
            "|".join(
                f"{impl:<{max_impl_len}}" for impl in differing_kernels[kernel][fname]
            )
            for fname in argv[1:]
        )
        + "|"
    )