Source code for avl._core.scoreboard_indexed

# Copyright 2024 Apheleia
#
# Description:
# Apheleia Verification Library Indexed Scoreboard

from typing import Any

from .component import Component
from .scoreboard import Scoreboard


[docs] class IndexedScoreboard(Scoreboard):
[docs] def __init__(self, name: str, parent: Component) -> None: """ Initializes the indexed scoreboard component. :param name: Name of the indexed scoreboard. :type name: str :param parent: Parent component. :type parent: Component """ super().__init__(name, parent) self.scoreboards = {}
[docs] def set_indices(self, indices: list[Any]) -> None: """ Sets the indices for the scoreboards. :param indices: List of indices. :type indices: list[Any] """ for idx in indices: self.scoreboards[idx] = Scoreboard(f"{self.name}_{idx}", self) self.scoreboards[idx].set_verbose(self.verbose) self.scoreboards[idx].set_min_compare_count(self.min_compare_count)
[docs] def set_verbose(self, verbose: bool) -> None: """ Sets the verbosity of the scoreboards. :param verbose: Verbosity flag. :type verbose: bool """ super().set_verbose(verbose) for v in self.scoreboards.values(): v.set_verbose(verbose)
[docs] def set_min_compare_count(self, count: int) -> None: """ Sets the minimum number of comparisons required for the scoreboards. :param count: Minimum number of comparisons. :type count: int """ super().set_min_compare_count(count) for v in self.scoreboards.values(): v.set_min_compare_count(count)
[docs] def get_index(self, item: Any) -> int: """ Gets the index for the given item. :param item: The item to get the index for. :type item: Any :returns: The index of the item. :rtype: int """ raise NotImplementedError
[docs] async def run_phase(self) -> None: """ Runs the scoreboard phase. """ while True: self.before_item = await self.before_port.blocking_pop() self.scoreboards[self.get_index(self.before_item)].before_port.append(self.before_item) self.after_item = await self.after_port.blocking_pop() self.scoreboards[self.get_index(self.after_item)].after_port.append(self.after_item) self.compare_count += 1 self.after_item = None self.before_item = None
__all__ = ["IndexedScoreboard"]