Currently slicing a tuple gets the original type, which is almost always incorrect (because in that case, the user wouldn't do it...)
It's quite common to take tuple slices between fixed indices, e.g.
foo = 1, 2.4, "str" bar = foo[1:] # tuple of (float, str) baz = foo[::-2] # tuple of (str, int)
This patch gets the correct type if all three parameters (start, stop, step) are either integer literals or left empty. Otherwise it returns an empty tuple. Better would be an unsure-content tuple, but that doesn't exist yet.