human
Complete this python program:
def _make_with_custom_variables(func, variables):
assistant
#Here is the Python code you requested.

    """Calls func and replaces any trainable variables.
    This returns the output of func, but whenever `get_variable` is called it
    will replace any trainable variables with the tensors in `variables`, in the
    same order. Non-trainable variables will re-use any variables already
    created.
    Args:
    func: Function to be called.
    variables: A list of tensors replacing the trainable variables.
    Returns:
    The return value of func is returned.
    """
    variables = collections.deque(variables)
    def custom_getter(getter, name, **kwargs):
        if kwargs['trainable']:
            return variables.popleft()
        else:
            kwargs['reuse'] = True
            return getter(name, **kwargs)
    return _wrap_variable_creation(func, custom_getter)