[docs]@withify()
@dataclass
class Leg(Point, Targeting, Connector):
shape: Optional[str] = field(default=None, metadata={"type": "Attribute"})
"""Shape of the leg end"""
sense: str = field(
default=None, metadata={}
) # TODO why is this a string and not a bool?!?
"""Sense of the leg, either 'incoming' or 'outgoing'"""
external: Optional[str] = field(
default=None, metadata={"xml_attribute": True, "type": "Attribute"}
)
"""External text for leg"""
[docs] def is_incoming(self):
"""Return True if the leg is incoming, False otherwise."""
return "in" == self.sense[:2] or self.sense[:8] == "anti-out"
[docs] def is_outgoing(self):
"""Return True if the leg is outgoing, False otherwise."""
return "out" == self.sense[:3] or self.sense[:7] == "anti-in"
[docs] def with_incoming(self):
"""Set the leg to be incoming."""
self.sense = "incoming"
return self
[docs] def goes_into(self, vertex):
"""Return True if the leg goes into the vertex, False otherwise."""
return self.target == vertex.id and self.is_incoming()
[docs] def goes_out_of(self, vertex):
"""Return True if the leg goes out of the vertex, False otherwise."""
return self.target == vertex.id and self.is_outgoing()
incoming = with_incoming
[docs] def with_outgoing(self):
"""Set the leg to be outgoing."""
self.sense = "outgoing"
return self
outgoing = with_outgoing
[docs] def conjugate(self):
"""Set incoming to outgoing and vice versa."""
if self.is_incoming():
return self.with_outgoing()
elif self.is_outgoing():
return self.with_incoming()