Source code for hwt.synthesizer.exceptions

from hwt.synthesizer.interfaceLevel.mainBases import InterfaceBase
from typing import Set


[docs]class TypeConversionErr(TypeError): pass
[docs]class ConfErr(Exception): pass
[docs]class IntfLvlConfErr(ConfErr): """ Interface level synthesizer user configuration error """ pass
[docs]class SigLvlConfErr(ConfErr): """ Signal level synthesizer user configuration error """ pass
[docs]class InterfaceStructureErr(IntfLvlConfErr): """ An exception which means that the two interfaces have non compatible sub-interfaces. (E.g. they do have a differently named signals) :ivar exclude: a set of sub-interfaces which should be excluded during the comparison """
[docs] def __init__(self, dst: InterfaceBase, src: InterfaceBase, exclude: Set[InterfaceBase]): super(InterfaceStructureErr, self).__init__() self.src = src self.dst = dst self.exclude = exclude
def __str__(self): return self.__repr__() def __repr__(self): missing_on_src = [] missing_on_dst = [] dst = self.dst src = self.src exclude = self.exclude for i in src._interfaces: i2 = getattr(dst, i._name, None) if i2 is None and (not exclude or i not in exclude): missing_on_dst.append(i._name) for i in dst._interfaces: i2 = getattr(src, i._name, None) if i2 is None and (not exclude or i not in exclude): missing_on_src.append(i._name) buff = [f"<{self.__class__.__name__} {dst} <= {src}"] if missing_on_dst: buff.append(f", missing on dst: {missing_on_dst}") if missing_on_src: buff.append(f", missing on src: {missing_on_src}") buff.append(">") return "".join(buff) def __copy__(self): return self.__class__(self.dst, self.src, self.exclude)