def find_point_in_section_list(point, section_list):
    """Returns the start of the section the given point belongs to.

    The given list is assumed to contain start points of consecutive
    sections, except for the final point, assumed to be the end point of the
    last section. For example, the list [5, 8, 30, 31] is interpreted as the
    following list of sections: [5-8), [8-30), [30-31], so the points -32, 4.5,
    32 and 100 all match no section, while 5 and 7.5 match [5-8) and so for
    them the function returns 5, and 30, 30.7 and 31 all match [30-31].

    Parameters
    ---------
    point : float
        The point for which to match a section.
    section_list : sortedcontainers.SortedList
        A list of start points of consecutive sections.

    Returns
    -------
    float
        The start of the section the given point belongs to. None if no match
        was found.

    Example
    -------
    >>> from sortedcontainers import SortedList
    >>> seclist = SortedList([5, 8, 30, 31])
    >>> find_point_in_section_list(4, seclist)

    >>> find_point_in_section_list(5, seclist)
    5
    >>> find_point_in_section_list(27, seclist)
    8
    >>> find_point_in_section_list(31, seclist)
    30
    """
    if point < section_list[0] or point > section_list[-1]:
        return None
    if point in section_list:
        if point == section_list[-1]:
            return section_list[-2]
        ind = section_list.bisect(point) - 1
        if ind == 0:
            return section_list[0]
        return section_list[ind]
    try:
        ind = section_list.bisect(point)
        return section_list[ind - 1]
    except IndexError:
        return None
