def METHOD_NAME(self, data, new_items, indexes):
    if type(data) in [list, tuple]:
        data_out = data.copy() if isinstance(data, list) else list(data)
        params = list_match_func[self.list_match_local]([indexes, new_items])
        if self.replace:
            if not data_out:  # ignore empty input
                return data_out
            min_ind = -len(data_out)
            max_ind = len(data_out) - 1
            for ind, i in zip(*params):
                clamp = max(min_ind, min(ind, max_ind))
                data_out[clamp] = i
        else:
            for ind, i in zip(*params):
                data_out.insert(ind, i)
        return data_out
    elif type(data) == np.ndarray:
        out_data = np.array(data)
        ind, items = list_match_func[self.list_match_local]([indexes, new_items])
        if self.replace:
            out_data[ind] = items
        else:
            for i, item in zip(ind, items):
                out_data = np.concatenate([data[:i], [item], data[i:]])
        return out_data
    elif type(data) == str:
        ind, items = list_match_func[self.list_match_local]([indexes, new_items])
        add_one = 1 if self.replace else 0
        out_data = data
        for i, item in zip(ind, items):
            out_data = out_data[:i]+ str(item) + out_data[i+add_one:]
        return out_data
    return None