def cyclic_fetch_elements_in_array(array, start_index, searchable_size):
    """
    Fetch elements without worrying about reaching the end of the array

    Args:
        array (list of Any): anything in the form of array, can be an array of ADT
        start_index (int): the starting index to slice from
        searchable_size (int): the number of elements included from start_index

    Returns:
        list of Any
    """
    array_length = len(array)
    # Determine if start_index + searchable_size will cause an overflow, and if so,
    # calculate how many elements will exceed.
    overflow_n = start_index + searchable_size - array_length
    # If it is larger than 0, that means we have an overflow
    if overflow_n > 0:
        # We need to return 2 concatenated arrays:
        # 1. Elements from the current index to the maximum length of the array
        # 2. Elements from the start to the overflow_n
        return array[start_index:array_length] + array[0:overflow_n]
    else:
        # Else, return elements as usual using slicing
        return array[start_index:(start_index + searchable_size)]