def METHOD_NAME(slices1, slices2, shape):
    null_slice = slice(None, None, None)
    if not isinstance(slices1, tuple):
        slices1 = (slices1,)
    if not isinstance(slices2, tuple):
        slices2 = (slices2,)
    if all([s == null_slice for s in slices2]):
        return slices1
    if all([s == null_slice for s in slices1]):
        return slices2
    # Handle the Ellipsis case for slice1
    # can handle Ellipsis leading, central and training
    # in slices 1 because it is the primary slice
    # This will pad slice1 to be the same size as shape
    if Ellipsis in slices1:
        assert sum(e is Ellipsis for e in slices1) == 1
        el_idx = slices1.index(Ellipsis)
        before = slices1[:el_idx]
        after = slices1[el_idx + 1:]
        to_add = len(shape) - (len(before) + (len(after)))
        _null = (null_slice,) * to_add
        slices1 = before + _null + after
    # Handle the Ellipsis case for slice2
    # need to work on this to handle leading or central Ellipsis
    # trailing ellipsis is supported as the padding is implemented after
    if Ellipsis in slices2:
        if Ellipsis != slices2[-1] or sum(e is Ellipsis for e in slices1) > 1:
            raise IndexError("No support for Ellipsis in subslice except at end")
        slices2 = slices2[:-1]
    # Must pad slices1 to length of array itself so that
    # we can use it as a reference for padding slices2
    while len(slices1) < len(shape):
        slices1 = slices1 + (null_slice,)
    # If slice1 contains integers we must pad slices2 for combining
    # This section of code is not complete/robust, there are cases
    # where slices1 is all non-integer but slices2 is not of the same length!
    # e.g. slices1 = (slice(0, 64), slice(0, 64)) and slices2 = (slice(0, 32),)
    # need to have logic for slicing only the first dimension here
    s2_gen = iter(slices2)
    _slices2 = []
    for s1 in slices1:
        if isinstance(s1, int):
            _slices2.append(null_slice)
        else:
            _slices2.append(next(s2_gen, null_slice))
    next_el = next(s2_gen, None)
    assert next_el is None
    slices2 = tuple(_slices2)
    combined_slices = []
    for _slice1, _slice2, _dimension in itertools.zip_longest(slices1, slices2, shape,
                                                              fillvalue=null_slice):
        combined_slice = combine_slices(_slice1, _slice2, _dimension)
        combined_slices.append(combined_slice)
    return tuple(combined_slices)