
class Sliplink(object):
    def __init__(self, source, destination, label=None, length=0.0):
        self.source = source
        self.destination = destination
        self.label = label
        self.fixedLength = length
        source.outgoingLinks += [self]
        destination.incomingLinks += [self]

    def degreeOfAssociation(self):
        if self.fixedLength > 0 or not self.label:
            return 100.0 - self.fixedLength
        return self.label.degreeOfAssociation()

    def intrinsicDegreeOfAssociation(self):
        if self.fixedLength > 1:
            return 100.0 - self.fixedLength
        if self.label:
            return 100.0 - self.label.intrinsicLinkLength
        return 0.0

    def spread_activation(self):
        self.destination.buffer += self.intrinsicDegreeOfAssociation()

    def points_at(self, other):
        return self.destination == other
