def METHOD_NAME(reader: PdfReaderProtocol, index: int) -> str:
    """
    See 7.9.7 "Number Trees".
    Args:
        reader: The PdfReader
        index: The index of the page
    Returns:
        The label of the page, e.g. "iv" or "4".
    """
    root = reader.trailer["/Root"]
    if "/PageLabels" not in root:
        return str(index + 1)  # Fallback
    number_tree = root["/PageLabels"]
    if "/Nums" in number_tree:
        # [Nums] shall be an array of the form
        #   [ key 1 value 1 key 2 value 2 ... key n value n ]
        # where each key_i is an integer and the corresponding
        # value_i shall be the object associated with that key.
        # The keys shall be sorted in numerical order,
        # analogously to the arrangement of keys in a name tree
        # as described in 7.9.6, "Name Trees."
        nums = number_tree["/Nums"]
        i = 0
        value = None
        start_index = 0
        while i < len(nums):
            start_index = nums[i]
            value = nums[i + 1].get_object()
            if i + 2 == len(nums):
                break
            if nums[i + 2] > index:
                break
            i += 2
        m = {
            None: lambda n: "",
            "/D": lambda n: str(n),
            "/R": number2uppercase_roman_numeral,
            "/r": number2lowercase_roman_numeral,
            "/A": number2uppercase_letter,
            "/a": number2lowercase_letter,
        }
        # if /Nums array is not following the specification or if /Nums is empty
        if not isinstance(value, dict):
            return str(index + 1)  # Fallback
        start = value.get("/St", 1)
        prefix = value.get("/P", "")
        return prefix + m[value.get("/S")](index - start_index + start)
    if "/Kids" in number_tree or "/Limits" in number_tree:
        logger_warning(
            (
                "/Kids or /Limits found in PageLabels. "
                "Please share this PDF with pypdf: "
                "https://github.com/py-pdf/pypdf/pull/1519"
            ),
            __name__,
        )
    # TODO: Implement /Kids and /Limits for number tree
    return str(index + 1)  # Fallback if /Nums is not in the number_tree