Source code for fvm.toolchains.questa_pkg.parsers.parse_xverify

# Copyright 2024-2026 Universidad de Sevilla
# SPDX-License-Identifier: Apache-2.0

"""
Parser for xverify reports.

This module provides functions to parse checks with their types and results,
count occurrences, and group them by results.

It is specifically for Questa X-Check results.
"""
import re
from collections import defaultdict

[docs] def group_by_result(data): """ Group all xverify items by their results. :param data: List of dictionaries with "Type" and "Result" keys :type data: list of dict :return: Dictionary with counts and type per result :rtype: dict """ result = { 'Corruptible': {'count': 0, 'checks': defaultdict(int)}, 'Incorruptible': {'count': 0, 'checks': defaultdict(int)} } for item in data: result_name = item['Result'] type_name = item['Type'] if result_name not in result: result[result_name] = {'count': 0, 'checks': defaultdict(int)} result[result_name]['count'] += 1 result[result_name]['checks'][type_name] += 1 for result_name, info in result.items(): info['checks'] = dict(info['checks']) return result
[docs] def parse_type_and_result(file_path): """ Parse a xverify report file and extract Type and Result information. :param file_path: Path to the report file :type file_path: str :return: List of dictionaries with "Type" and "Result" :rtype: list of dict """ with open(file_path, 'r', encoding='utf-8') as file: content = file.read() case_pattern = re.compile( r'Type\s*:\s*(.*?)\n' r'Result\s*:\s*(.*?)\n', re.DOTALL ) matches = case_pattern.findall(content) parsed_data = [{"Type": match[0].strip(), "Result": match[1].strip()} for match in matches] return parsed_data