Source code for elasticai.creator.vhdl.design.ports

from collections.abc import Iterator
from itertools import chain

from elasticai.creator.vhdl.design.signal import Signal


[docs] class Port: def __init__(self, incoming: list[Signal], outgoing: list[Signal]): self._incoming = set(incoming) self._outgoing = set(outgoing) @property def incoming(self) -> list[Signal]: return list(self._incoming) @property def outgoing(self) -> list[Signal]: return list(self._outgoing) @property def signals(self) -> list[Signal]: return self.outgoing + self.incoming @property def signal_names(self) -> list[str]: return [s.name for s in self.signals]
[docs] def __getitem__(self, item: str) -> Signal: for signal in self.signals: if signal.name == item: return signal raise AttributeError(f"Port has no signal {item}")
[docs] def __contains__(self, item: str | Signal) -> bool: if isinstance(item, str): return item in self.signal_names else: return item in self.signals
[docs] def __iter__(self) -> Iterator[Signal]: yield from chain(self._incoming, self._outgoing)