-
-
Notifications
You must be signed in to change notification settings - Fork 18.7k
split up pandas/tests/indexes/test_multi.py #18644 #21514
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
1888a31
5780b7e
750b8c6
2fb312b
e238b94
7a3753f
baaace3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
- Loading branch information
There are no files selected for viewing
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
|
||
import numpy as np | ||
import pandas as pd | ||
import pandas.util.testing as tm | ||
import pytest | ||
from pandas import (CategoricalIndex, DatetimeIndex, Float64Index, Index, | ||
Int64Index, IntervalIndex, MultiIndex, PeriodIndex, | ||
RangeIndex, Series, TimedeltaIndex, UInt64Index, compat, | ||
isna) | ||
from pandas._libs.tslib import iNaT | ||
from pandas.compat import PY3 | ||
from pandas.core.indexes.base import InvalidIndexError | ||
from pandas.core.indexes.datetimelike import DatetimeIndexOpsMixin | ||
from pandas.compat import PY3, PYPY, lrange, lzip, range, u, long | ||
import numpy as np | ||
|
||
|
||
|
||
def test_numeric_compat(_index): | ||
|
||
idx = _index | ||
tm.assert_raises_regex(TypeError, "cannot perform __mul__", | ||
lambda: idx * 1) | ||
tm.assert_raises_regex(TypeError, "cannot perform __rmul__", | ||
lambda: 1 * idx) | ||
|
||
div_err = "cannot perform __truediv__" if PY3 \ | ||
else "cannot perform __div__" | ||
tm.assert_raises_regex(TypeError, div_err, lambda: idx / 1) | ||
div_err = div_err.replace(' __', ' __r') | ||
tm.assert_raises_regex(TypeError, div_err, lambda: 1 / idx) | ||
tm.assert_raises_regex(TypeError, "cannot perform __floordiv__", | ||
lambda: idx // 1) | ||
tm.assert_raises_regex(TypeError, "cannot perform __rfloordiv__", | ||
lambda: 1 // idx) | ||
|
||
|
||
def test_logical_compat(_index): | ||
idx = _index | ||
tm.assert_raises_regex(TypeError, 'cannot perform all', | ||
lambda: idx.all()) | ||
tm.assert_raises_regex(TypeError, 'cannot perform any', | ||
lambda: idx.any()) | ||
|
||
|
||
def test_boolean_context_compat(_index): | ||
|
||
# boolean context compat | ||
idx = _index | ||
|
||
def f(): | ||
if idx: | ||
pass | ||
|
||
tm.assert_raises_regex(ValueError, 'The truth value of a', f) | ||
|
||
|
||
def test_boolean_context_compat2(): | ||
|
||
# boolean context compat | ||
# GH7897 | ||
i1 = MultiIndex.from_tuples([('A', 1), ('A', 2)]) | ||
i2 = MultiIndex.from_tuples([('A', 1), ('A', 3)]) | ||
common = i1.intersection(i2) | ||
|
||
def f(): | ||
if common: | ||
pass | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same here There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same as above |
||
tm.assert_raises_regex(ValueError, 'The truth value of a', f) | ||
|
||
|
||
def test_inplace_mutation_resets_values(): | ||
levels = [['a', 'b', 'c'], [4]] | ||
levels2 = [[1, 2, 3], ['a']] | ||
labels = [[0, 1, 0, 2, 2, 0], [0, 0, 0, 0, 0, 0]] | ||
|
||
mi1 = MultiIndex(levels=levels, labels=labels) | ||
mi2 = MultiIndex(levels=levels2, labels=labels) | ||
vals = mi1.values.copy() | ||
vals2 = mi2.values.copy() | ||
|
||
assert mi1._tuples is not None | ||
|
||
# Make sure level setting works | ||
new_vals = mi1.set_levels(levels2).values | ||
tm.assert_almost_equal(vals2, new_vals) | ||
|
||
# Non-inplace doesn't kill _tuples [implementation detail] | ||
tm.assert_almost_equal(mi1._tuples, vals) | ||
|
||
# ...and values is still same too | ||
tm.assert_almost_equal(mi1.values, vals) | ||
|
||
# Inplace should kill _tuples | ||
mi1.set_levels(levels2, inplace=True) | ||
tm.assert_almost_equal(mi1.values, vals2) | ||
|
||
# Make sure label setting works too | ||
labels2 = [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]] | ||
exp_values = np.empty((6,), dtype=object) | ||
exp_values[:] = [(long(1), 'a')] * 6 | ||
|
||
# Must be 1d array of tuples | ||
assert exp_values.shape == (6,) | ||
new_values = mi2.set_labels(labels2).values | ||
|
||
# Not inplace shouldn't change | ||
tm.assert_almost_equal(mi2._tuples, vals2) | ||
|
||
# Should have correct values | ||
tm.assert_almost_equal(exp_values, new_values) | ||
|
||
# ...and again setting inplace should kill _tuples, etc | ||
mi2.set_labels(labels2, inplace=True) | ||
tm.assert_almost_equal(mi2.values, new_values) | ||
|
||
|
||
def test_ndarray_compat_properties(_index, _compat_props): | ||
idx = _index | ||
assert idx.T.equals(idx) | ||
assert idx.transpose().equals(idx) | ||
|
||
values = idx.values | ||
for prop in _compat_props: | ||
assert getattr(idx, prop) == getattr(values, prop) | ||
|
||
# test for validity | ||
idx.nbytes | ||
idx.values.nbytes | ||
|
||
|
||
def test_compat(indices): | ||
assert indices.tolist() == list(indices) | ||
|
||
def test_pickle_compat_construction(_holder): | ||
# this is testing for pickle compat | ||
if _holder is None: | ||
return | ||
|
||
# need an object to create with | ||
pytest.raises(TypeError, _holder) |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -476,3 +476,34 @@ def test_from_product_iterator(): | |
with tm.assert_raises_regex( | ||
TypeError, "Input must be a list / sequence of iterables."): | ||
MultiIndex.from_product(0) | ||
|
||
|
||
def test_create_index_existing_name(_index): | ||
|
||
# GH11193, when an existing index is passed, and a new name is not | ||
# specified, the new index should inherit the previous object name | ||
index = _index | ||
index.names = ['foo', 'bar'] | ||
result = pd.Index(index) | ||
tm.assert_index_equal( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. write the expected out on a separate line |
||
result, Index(Index([('foo', 'one'), ('foo', 'two'), | ||
('bar', 'one'), ('baz', 'two'), | ||
('qux', 'one'), ('qux', 'two')], | ||
dtype='object'), | ||
names=['foo', 'bar'])) | ||
|
||
result = pd.Index(index, names=['A', 'B']) | ||
tm.assert_index_equal( | ||
result, | ||
Index(Index([('foo', 'one'), ('foo', 'two'), ('bar', 'one'), | ||
('baz', 'two'), ('qux', 'one'), ('qux', 'two')], | ||
dtype='object'), names=['A', 'B'])) | ||
|
||
def test_tuples_with_name_string(): | ||
# GH 15110 and GH 14848 | ||
|
||
li = [(0, 0, 1), (0, 1, 0), (1, 0, 0)] | ||
with pytest.raises(ValueError): | ||
pd.Index(li, name='abc') | ||
with pytest.raises(ValueError): | ||
pd.Index(li, name='a') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can you change to do this with
with
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not following here. What is the need to use a context manager here? None of the functions seems to have a valid
__enter__
or__exit__
methods.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you want something like
with pytest.raises(ValueError):
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yep exactly