2
2
# pylint: disable=W0102
3
3
4
4
from datetime import datetime , date
5
-
5
+ import sys
6
6
import pytest
7
7
import numpy as np
8
8
9
9
import re
10
+ from distutils .version import LooseVersion
10
11
import itertools
11
12
from pandas import (Index , MultiIndex , DataFrame , DatetimeIndex ,
12
13
Series , Categorical )
22
23
randn , assert_series_equal )
23
24
from pandas .compat import zip , u
24
25
26
+ # in 3.6.1 a c-api slicing function changed, see src/compat_helper.h
27
+ PY361 = sys .version >= LooseVersion ('3.6.1' )
28
+
25
29
26
30
@pytest .fixture
27
31
def mgr ():
@@ -1128,8 +1132,10 @@ def assert_as_slice_equals(arr, slc):
1128
1132
assert_as_slice_equals ([0 , 100 ], slice (0 , 200 , 100 ))
1129
1133
1130
1134
assert_as_slice_equals ([2 , 1 ], slice (2 , 0 , - 1 ))
1131
- assert_as_slice_equals ([2 , 1 , 0 ], slice (2 , None , - 1 ))
1132
- assert_as_slice_equals ([100 , 0 ], slice (100 , None , - 100 ))
1135
+
1136
+ if not PY361 :
1137
+ assert_as_slice_equals ([2 , 1 , 0 ], slice (2 , None , - 1 ))
1138
+ assert_as_slice_equals ([100 , 0 ], slice (100 , None , - 100 ))
1133
1139
1134
1140
def test_not_slice_like_arrays (self ):
1135
1141
def assert_not_slice_like (arr ):
@@ -1150,8 +1156,9 @@ def test_slice_iter(self):
1150
1156
assert list (BlockPlacement (slice (0 , 0 ))) == []
1151
1157
assert list (BlockPlacement (slice (3 , 0 ))) == []
1152
1158
1153
- assert list (BlockPlacement (slice (3 , 0 , - 1 ))) == [3 , 2 , 1 ]
1154
- assert list (BlockPlacement (slice (3 , None , - 1 ))) == [3 , 2 , 1 , 0 ]
1159
+ if not PY361 :
1160
+ assert list (BlockPlacement (slice (3 , 0 , - 1 ))) == [3 , 2 , 1 ]
1161
+ assert list (BlockPlacement (slice (3 , None , - 1 ))) == [3 , 2 , 1 , 0 ]
1155
1162
1156
1163
def test_slice_to_array_conversion (self ):
1157
1164
def assert_as_array_equals (slc , asarray ):
@@ -1164,8 +1171,10 @@ def assert_as_array_equals(slc, asarray):
1164
1171
assert_as_array_equals (slice (3 , 0 ), [])
1165
1172
1166
1173
assert_as_array_equals (slice (3 , 0 , - 1 ), [3 , 2 , 1 ])
1167
- assert_as_array_equals (slice (3 , None , - 1 ), [3 , 2 , 1 , 0 ])
1168
- assert_as_array_equals (slice (31 , None , - 10 ), [31 , 21 , 11 , 1 ])
1174
+
1175
+ if not PY361 :
1176
+ assert_as_array_equals (slice (3 , None , - 1 ), [3 , 2 , 1 , 0 ])
1177
+ assert_as_array_equals (slice (31 , None , - 10 ), [31 , 21 , 11 , 1 ])
1169
1178
1170
1179
def test_blockplacement_add (self ):
1171
1180
bpl = BlockPlacement (slice (0 , 5 ))
@@ -1180,23 +1189,26 @@ def assert_add_equals(val, inc, result):
1180
1189
assert_add_equals (slice (0 , 0 ), 0 , [])
1181
1190
assert_add_equals (slice (1 , 4 ), 0 , [1 , 2 , 3 ])
1182
1191
assert_add_equals (slice (3 , 0 , - 1 ), 0 , [3 , 2 , 1 ])
1183
- assert_add_equals (slice (2 , None , - 1 ), 0 , [2 , 1 , 0 ])
1184
1192
assert_add_equals ([1 , 2 , 4 ], 0 , [1 , 2 , 4 ])
1185
1193
1186
1194
assert_add_equals (slice (0 , 0 ), 10 , [])
1187
1195
assert_add_equals (slice (1 , 4 ), 10 , [11 , 12 , 13 ])
1188
1196
assert_add_equals (slice (3 , 0 , - 1 ), 10 , [13 , 12 , 11 ])
1189
- assert_add_equals (slice (2 , None , - 1 ), 10 , [12 , 11 , 10 ])
1190
1197
assert_add_equals ([1 , 2 , 4 ], 10 , [11 , 12 , 14 ])
1191
1198
1192
1199
assert_add_equals (slice (0 , 0 ), - 1 , [])
1193
1200
assert_add_equals (slice (1 , 4 ), - 1 , [0 , 1 , 2 ])
1194
- assert_add_equals (slice (3 , 0 , - 1 ), - 1 , [2 , 1 , 0 ])
1195
1201
assert_add_equals ([1 , 2 , 4 ], - 1 , [0 , 1 , 3 ])
1196
1202
1197
1203
with pytest .raises (ValueError ):
1198
1204
BlockPlacement (slice (1 , 4 )).add (- 10 )
1199
1205
with pytest .raises (ValueError ):
1200
1206
BlockPlacement ([1 , 2 , 4 ]).add (- 10 )
1201
- with pytest .raises (ValueError ):
1202
- BlockPlacement (slice (2 , None , - 1 )).add (- 1 )
1207
+
1208
+ if not PY361 :
1209
+ assert_add_equals (slice (3 , 0 , - 1 ), - 1 , [2 , 1 , 0 ])
1210
+ assert_add_equals (slice (2 , None , - 1 ), 0 , [2 , 1 , 0 ])
1211
+ assert_add_equals (slice (2 , None , - 1 ), 10 , [12 , 11 , 10 ])
1212
+
1213
+ with pytest .raises (ValueError ):
1214
+ BlockPlacement (slice (2 , None , - 1 )).add (- 1 )
0 commit comments