def _nointersecting_y(self, row, starting_col, ending_col, default=None):
        """
        Return the correct y coordinate for a point on an edge that will not lead to the following edge segment
        intersect with any node between `min_col` and `max_col`.

        :param int row:             Row of this point.
        :param int starting_col:    The starting column of the next edge segment.
        :param int ending_col:      The ending column of the next edge segment.
        :param float default:       The default y coordinate to use if we fail to determine a desired y coordinate.
        :return:                    The desired y coordinate.
        :rtype:                     float
        """

        max_y = None

        if starting_col < ending_col:
            min_col, max_col = starting_col, ending_col
        else:
            min_col, max_col = ending_col, starting_col

        for col in range(min_col, max_col + 1):
            key = (col, row)
            if key not in self._grid_coordinates:
                continue
            _, y = self._grid_coordinates[key]
            new_y = y + self._row_heights[row]
            if max_y is None or new_y > max_y:
                max_y = new_y

        return max_y if max_y is not None else default

        Return the correct y coordinate for a point on an edge that will not lead to the following edge segment
        intersect with any node between `min_col` and `max_col`.

        :param int row:             Row of this point.
        :param int starting_col:    The starting column of the next edge segment.
        :param int ending_col:      The ending column of the next edge segment.
        :param float default:       The default y coordinate to use if we fail to determine a desired y coordinate.
        :return:                    The desired y coordinate.
        :rtype:                     float
        
angrmanagement/utils/graph_layouter.py