@@ -705,13 +705,21 @@ def _difference(self, other, sort=None):
705
705
else :
706
706
return super ()._difference (other , sort = sort )
707
707
708
+ elif len (overlap ) == 2 and overlap [0 ] == first [0 ] and overlap [- 1 ] == first [- 1 ]:
709
+ # e.g. range(-8, 20, 7) and range(13, -9, -3)
710
+ return self [1 :- 1 ]
711
+
708
712
if overlap .step == first .step :
709
713
if overlap [0 ] == first .start :
710
714
# The difference is everything after the intersection
711
715
new_rng = range (overlap [- 1 ] + first .step , first .stop , first .step )
712
716
elif overlap [- 1 ] == first [- 1 ]:
713
717
# The difference is everything before the intersection
714
718
new_rng = range (first .start , overlap [0 ], first .step )
719
+ elif overlap ._range == first [1 :- 1 ]:
720
+ # e.g. range(4) and range(1, 3)
721
+ step = len (first ) - 1
722
+ new_rng = first [::step ]
715
723
else :
716
724
# The difference is not range-like
717
725
# e.g. range(1, 10, 1) and range(3, 7, 1)
@@ -725,16 +733,19 @@ def _difference(self, other, sort=None):
725
733
if overlap .step == first .step * 2 :
726
734
if overlap [0 ] == first [0 ] and overlap [- 1 ] in (first [- 1 ], first [- 2 ]):
727
735
# e.g. range(1, 10, 1) and range(1, 10, 2)
728
- return self [1 ::2 ]
736
+ new_rng = first [1 ::2 ]
729
737
730
738
elif overlap [0 ] == first [1 ] and overlap [- 1 ] in (first [- 1 ], first [- 2 ]):
731
739
# e.g. range(1, 10, 1) and range(2, 10, 2)
732
- return self [::2 ]
740
+ new_rng = first [::2 ]
733
741
734
- # We can get here with e.g. range(20) and range(0, 10, 2)
742
+ else :
743
+ # We can get here with e.g. range(20) and range(0, 10, 2)
744
+ return super ()._difference (other , sort = sort )
735
745
736
- # e.g. range(10) and range(0, 10, 3)
737
- return super ()._difference (other , sort = sort )
746
+ else :
747
+ # e.g. range(10) and range(0, 10, 3)
748
+ return super ()._difference (other , sort = sort )
738
749
739
750
new_index = type (self )._simple_new (new_rng , name = res_name )
740
751
if first is not self ._range :
0 commit comments