class Node:
    def __init__(self, node_id: int, size: float, color: float, node_type: int, desc: str):
        self.id = node_id
        self.size = size
        self.color = color
        self.type = node_type
        self.desc = desc


class Branch:
    def __init__(self, from_node: int, to_node: int, width: float, arrow_size: float, cluster: int):
        self.from_node = from_node
        self.to_node = to_node
        self.width = width
        self.arrow_size = arrow_size
        self.cluster = cluster


class Arrow:
    def __init__(self, head_x: float, head_y: float, tail_x: float = 0,
                 tail_y: float = 0, size: float = 0, annotation: str = ''):
        self.head_x = head_x
        self.head_y = head_y
        self.tail_x = tail_x
        self.tail_y = tail_y
        self.size = size
        self._annotation = annotation

    def set_annotation(self, annotation: str):
        self._annotation = annotation

    def get_annotation(self) -> str:
        return self._annotation

class Node:
    def __init__(self, node_id: int, size: float, color: float, node_type: int, desc: str):
        self.id = node_id
        self.size = size
        self.color = color
        self.type = node_type
        self.desc = desc


class Branch:
    def __init__(self, from_node: int, to_node: int, width: float, arrow_size: float, cluster: int):
        self.from_node = from_node
        self.to_node = to_node
        self.width = width
        self.arrow_size = arrow_size
        self.cluster = cluster


class Arrow:
    def __init__(self, head_x: float, head_y: float, tail_x: float = 0,
                 tail_y: float = 0, size: float = 0, annotation: str = ''):
        self.head_x = head_x
        self.head_y = head_y
        self.tail_x = tail_x
        self.tail_y = tail_y
        self.size = size
        self._annotation = annotation

    def set_annotation(self, annotation: str):
        self._annotation = annotation

    def get_annotation(self) -> str:
        return self._annotation
