Source code for avl._core.covercross

# Apheleia Verification Library Hierachical component
# Copyright 2024 Apheleia
#
# Description:
# Apheleia Verification Library Coverpoint

from __future__ import annotations

from itertools import product
from typing import TYPE_CHECKING

from .coverbin import Coverbin
from .coverpoint import Coverpoint

if TYPE_CHECKING:
    from .covergroup import Covergroup

[docs] class Covercross(Coverpoint):
[docs] def __init__(self, name: str, parent: Covergroup) -> None: """ Initialize an instance of the class. :param name: The name of the instance :type name: str :param parent: The parent instance :type parent: object """ super().__init__(name, parent, var=None) self._points_ = []
[docs] def add_points(self, args: list[Coverpoint]) -> None: """ Add coverpoints to the cross. :param args: Coverpoints to be crossed :type args: list[Coverpoint] :raises ValueError: If the covercross already exists """ self._points_ = args p = [arg._bins_ for arg in args] for c in product(*p): name = ", ".join([str(x) for x in c]) self._bins_[name] = Coverbin(name, self, c)
[docs] def sample(self) -> None: """ Sample values from each bin in the `_bins_` attribute. This method iterates over all bins stored in the `_bins_` attribute and calls the `sample` method on each bin, passing the result of `self.var()` as an argument. """ bins = [] for p in self._points_: b = p.get_hit() if b is not None: bins.append(b.get_name()) else: return v = tuple(bins) for b in self._bins_.values(): b.sample(v)
__all__ = ["Covercross"]