|
10 | 10 | from pandas import Index, Series, DataFrame, date_range
|
11 | 11 | from pandas.core.indexes.datetimes import Timestamp
|
12 | 12 |
|
13 |
| -from pandas.compat import range |
| 13 | +from pandas.compat import range, lzip, isidentifier, string_types |
14 | 14 | from pandas import compat
|
15 | 15 | import pandas.io.formats.printing as printing
|
16 | 16 | from pandas.util.testing import (assert_series_equal,
|
@@ -234,6 +234,39 @@ def test_tab_completion(self):
|
234 | 234 | assert 'str' not in dir(s)
|
235 | 235 | assert 'dt' in dir(s) # as it is a datetime categorical
|
236 | 236 |
|
| 237 | + def test_index_tab_completion(self): |
| 238 | + # dir contains string-like values of the Index. |
| 239 | + for index in [tm.makeUnicodeIndex(10), |
| 240 | + tm.makeStringIndex(100), |
| 241 | + tm.makeCategoricalIndex(100), |
| 242 | + Index(['foo', 'foo', |
| 243 | + 'bar', 'bar', |
| 244 | + 'baz', 'baz']), |
| 245 | + tm.makeDateIndex(100), |
| 246 | + tm.makePeriodIndex(100), |
| 247 | + tm.makeTimedeltaIndex(100), |
| 248 | + tm.makeIntIndex(100), |
| 249 | + tm.makeUIntIndex(100), |
| 250 | + tm.makeIntIndex(100), |
| 251 | + tm.makeFloatIndex(100), |
| 252 | + Index([True, False]), |
| 253 | + ]: |
| 254 | + s = pd.Series(index=index) |
| 255 | + dir_s = dir(s) |
| 256 | + for x in s.index: |
| 257 | + assert (not isinstance(x, string_types) or |
| 258 | + not isidentifier(x) or x in dir_s) |
| 259 | + |
| 260 | + # dir contains string-like values of the MultiIndex first level. |
| 261 | + for index in [pd.MultiIndex.from_tuples(lzip('ABCD', 'EFGH')), |
| 262 | + pd.MultiIndex.from_tuples(lzip([0, 1, 2, 3], 'EFGH')), |
| 263 | + ]: |
| 264 | + s = pd.Series(index=index) |
| 265 | + dir_s = dir(s) |
| 266 | + for x in s.index: |
| 267 | + assert (not isinstance(x[0], string_types) or |
| 268 | + not isidentifier(x[0]) or x[0] in dir_s) |
| 269 | + |
237 | 270 | def test_not_hashable(self):
|
238 | 271 | s_empty = Series()
|
239 | 272 | s = Series([1])
|
|
0 commit comments