human
I wrote the below code

    def __init__(self, input, names):
        ProxyInputSource.__init__(self, input)
        assert isinstance(names, (list, tuple)), names
        self._names = tuple(names)
    def _setup(self, inputs):
        self._all_placehdrs = [v.build_placeholder_reuse() for v in inputs]
        inputs_subset = get_sublist_by_names(inputs, self._names)
        self._input.setup(inputs_subset)
    def _get_input_tensors(self):
        ret = self._input.get_input_tensors()
        assert (len(ret) == len(self._names))
        return get_tensors_inputs(self._all_placehdrs, ret, self._names)
    oldcls = type(input)
    cls = type(('Remapped' + oldcls.__name__), (ProxyInputSource, oldcls), {'__init__': __init__, '_setup': _setup, '_get_input_tensors': _get_input_tensors})
    return cls(input, names)

What's a good function header?
assistant
#Here's a good function header.

def remap_input_source(input, names):