Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab7 / lab7

.py
Скачиваний:
1
Добавлен:
30.05.2025
Размер:
2.58 Кб
Скачать
import re
import argparse
import sys


def extract_antenna_violators(output, report):
    """
    Usage: extract_antenna_violators.py -o <output text file> <input ARC report>
    Extracts the list of violating nets from an ARC report file"
    """
    pin_pattern = re.compile(r"\s*([\S+]+)\s*\([\S+]+\)\s*\s*")
    layout_pattern = re.compile(r"\s*\b(met3|met2|met1|li1|M2M3_PR|M1M2_PR|L1M1_PR_MR)\b\s*")
    msr_pattern = re.compile(r"\s*(\w+):\s*(\S+)\s*Ratio:\s*(\S+)\s*\((Area|S.Area|C.Area|C.S.Area)\)\s*")
    vios_list = []
    current_pin = ""
    current_layout = ""
    current_values = ""
    printed = False
    with open(report, "r") as f:
        for line in f:
            pin = pin_pattern.match(line)
            layout = layout_pattern.match(line)
            values = msr_pattern.match(line)
            if pin is not None:
                current_pin = pin.group(1)
                printed = False
            if layout is not None:
                current_layout = layout.group(1)
                printed = False
            if values is not None:
                current_values = values.group(2)
                current_values = re.sub(r'[^\d.]', '', current_values)
                current_values = float(current_values)
                normal_values = float(values.group(3))
                printed = False
            if "*" in line and not printed:
                print(f"{current_pin}:{current_layout} {current_values / normal_values:.2f}")
                vios_list.append(f"{current_pin}:{current_layout} {current_values / normal_values:.2f}")
                printed = True
    with open(output, "w") as f:
        f.write("\n".join(vios_list))


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="lab7")
    parser.add_argument('-o', '--output', type=str, help='Ключ для сохранения значения в переменную')
    parser.add_argument('report', type=str, help='Файл с отчетом о запуске')
    args = parser.parse_args()

    if len(args.__dict__) != 2:
        print('Неверное число аргументов')
        sys.exit(1)

    if args.report:
        report = args.report
    else:
        print('Неверное имя файла с отчетом')
        sys.exit(1)

    if args.output:
        output = args.output
    else:
        print('Неверное имя выходного файла')
        sys.exit(1)

    extract_antenna_violators(output, report)
    sys.exit(0)
Соседние файлы в папке lab7