def make_data_iterator(data_entries, *iterables):
    """Make an iterator from an iterable of data entries and constant values.

    All iterables should have the same number of entries. Any passed values
    that are not iterators, lists, or tuples will have that same value
    repeated for the entire length of `data_entries`.

    Parameters
    ----------
    data_entries : iterable
        Iterable of data entries.
    *iterables
        One or more iterables or constant values to serve as additional
        data entries. These are zipped into an iterator with `data_entries`.

    Returns
    -------
    iterator : Iterator of tuples, each with an item in `data_entries`
               followed by corresponding items in `iterables`.
    """
    from itertools import repeat, cycle
    from collections import Iterator
    new_iterables = [iter(data_entries)]
    for iterable in iterables:
        if isinstance(iterable, Iterator) or isinstance(iterable, list
            ) or isinstance(iterable, tuple):
            new_iterables.append(cycle(iterable))
        else:
            new_iterables.append(repeat(iterable))
    return zip(*new_iterables)
