Source code for spydrnet.ir.innerpin

from spydrnet.ir import Pin


class InnerPin(Pin):
    """Pins that correspond to definitions.

    These pins can be thought of as on the inside of a definition. There can be
    many outer pins for each inner pin
    """

    __slots__ = ["_port"]

[docs] def __init__(self): super().__init__() self._port = None
@property def port(self): """Return the port that the inner pin is a part of. This object cannot be modified directly by the end user.""" return self._port def _clone_rip_and_replace(self, memo): """Remove from its current environment and place it into the new cloned environment with references held in the memo dictionary""" if self._wire is not None: assert ( self._wire in memo ), "wire must have been cloned in order to rip and replace innerpin" self._wire = memo[self._wire] def _clone_rip(self): """Remove from its current environmnet. This will remove all pin pointers and create a floating stand alone instance.""" self._wire = None def _clone(self, memo): """Not api safe clone function. Clone leaving all references in tact. the element can then either be ripped or ripped and replaced""" assert ( self not in memo ), "the object should not have been copied twice in this pass" from spydrnet.ir import InnerPin as InnerPinExtended c = InnerPinExtended() memo[self] = c c._wire = self._wire c._port = None return c
[docs] def clone(self): """Clone the inner pin in an api safe way. The following conditions will be met: * The inner pin will be orphaned from any ports * The pin will not be connected to any wires * The pin will not be referenced to by any wires or outer pins """ c = self._clone({}) c._clone_rip() return c