def get_times(ts_full, ts_system, len_state, sys_position, sys_length):
    """
    This is a function specifically designed for TEDOPA systems. It calculates
    the proper 'ts' and 'subsystems' input lists for :func:`tmps.evolve` from a
    list of times where the full state shall be returned and a list of times
    where only the reduced state of the system in question shall be returned.
    ts then basically is a concatenation of ts_full and ts_system,
    while subsystems will indicate that at the respective time in ts either
    the full state or only a reduced density matrix should be returned.

    Args:
        ts_full (list[float]):
            List of times where the full state including environment chain
            should be returned
        ts_system (list[float]):
            List of times where only the reduced density matrix of the system
            should be returned
        len_state (int):
            The length of the state
        sys_position (int):
            The position of the system (first site would be 0)
        sys_length (int):
            Length of the system, i.e. number of sites the system is
            comprised of

    Returns:
        tuple(list[float], list[list[int]]):
            Times and subsystems in the form that has to be provided to
            :func:`tmps.evolve`
    """
    ts = list(ts_full) + list(ts_system)
    subsystems = [[0, len_state]] * len(ts_full) + \
                 [[sys_position, sys_position + sys_length]] * len(ts_system)
    return ts, subsystems