def _combine_ranges_on_length(self, data_len, first, second):
        '''
        Combines a first range with a second range, where the second
        range is considered within the scope of the first.
        '''
        first = get_true_slice(first, data_len)
        second = get_true_slice(second, data_len)
        final_start, final_step, final_stop = (None, None, None)

        # Get our start
        if first.start == None and second.start == None:
            final_start = None
        else:
            final_start = (first.start if first.start else 0)+(second.start if second.start else 0)

        # Get our stop
        if second.stop == None:
            final_stop = first.stop
        elif first.stop == None:
            final_stop = (first.start if first.start else 0) + second.stop
        else:
            final_stop = min(first.stop, (first.start if first.start else 0) + second.stop)

        # Get our step
        if first.step == None and second.step == None:
            final_step = None
        else:
            final_step = (first.step if first.step else 1)*(second.step if second.step else 1)

        # If we have a start above our stop, set them to be equal
        if final_start > final_stop:
            final_start = final_stop

        return slice(final_start, final_stop, final_step)
def _combine_ranges_on_length ( self , data_len , first , second ) : first = get_true_slice ( first , data_len ) second = get_true_slice ( second , data_len ) final_start , final_step , final_stop = ( None , None , None ) if first . start == None and second . start == None : final_start = None else : final_start = ( first . start if first . start else 0 ) + ( second . start if second . start else 0 ) if second . stop == None : final_stop = first . stop elif first . stop == None : final_stop = ( first . start if first . start else 0 ) + second . stop else : final_stop = min ( first . stop , ( first . start if first . start else 0 ) + second . stop ) if first . step == None and second . step == None : final_step = None else : final_step = ( first . step if first . step else 1 ) * ( second . step if second . step else 1 ) if final_start > final_stop : final_start = final_stop return slice ( final_start , final_stop , final_step )
Combines a first range with a second range, where the second
        range is considered within the scope of the first.