def _calculate_port_pos_on_line(self, port_num, side_length, port_width=None):
        """Calculate the position of a port on a line

        The position depends on the number of element. Elements are equally spaced. If the end of the line is
        reached, ports are stacked.
        :param int port_num: The number of the port of that type
        :param float side_length: The length of the side the element is placed on
        :param float port_width: The width of one port
        :return: The position on the line for the given port
        :rtype: float
        """
        if port_width is None:
            port_width = 2 * self.border_width
        border_size = self.border_width
        pos = 0.5 * border_size + port_num * port_width
        outermost_pos = max(side_length / 2., side_length - 0.5 * border_size - port_width)
        pos = min(pos, outermost_pos)
        return pos