123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- # -*- coding: utf-8 -*-
- from copy import copy, deepcopy
- import pytest
- from pandas import MultiIndex
- import pandas.util.testing as tm
- def assert_multiindex_copied(copy, original):
- # Levels should be (at least, shallow copied)
- tm.assert_copy(copy.levels, original.levels)
- tm.assert_almost_equal(copy.codes, original.codes)
- # Labels doesn't matter which way copied
- tm.assert_almost_equal(copy.codes, original.codes)
- assert copy.codes is not original.codes
- # Names doesn't matter which way copied
- assert copy.names == original.names
- assert copy.names is not original.names
- # Sort order should be copied
- assert copy.sortorder == original.sortorder
- def test_copy(idx):
- i_copy = idx.copy()
- assert_multiindex_copied(i_copy, idx)
- def test_shallow_copy(idx):
- i_copy = idx._shallow_copy()
- assert_multiindex_copied(i_copy, idx)
- def test_labels_deprecated(idx):
- # GH23752
- with tm.assert_produces_warning(FutureWarning):
- idx.copy(labels=idx.codes)
- def test_view(idx):
- i_view = idx.view()
- assert_multiindex_copied(i_view, idx)
- @pytest.mark.parametrize('func', [copy, deepcopy])
- def test_copy_and_deepcopy(func):
- idx = MultiIndex(
- levels=[['foo', 'bar'], ['fizz', 'buzz']],
- codes=[[0, 0, 0, 1], [0, 0, 1, 1]],
- names=['first', 'second']
- )
- idx_copy = func(idx)
- assert idx_copy is not idx
- assert idx_copy.equals(idx)
- @pytest.mark.parametrize('deep', [True, False])
- def test_copy_method(deep):
- idx = MultiIndex(
- levels=[['foo', 'bar'], ['fizz', 'buzz']],
- codes=[[0, 0, 0, 1], [0, 0, 1, 1]],
- names=['first', 'second']
- )
- idx_copy = idx.copy(deep=deep)
- assert idx_copy.equals(idx)
- @pytest.mark.parametrize('deep', [True, False])
- @pytest.mark.parametrize('kwarg, value', [
- ('names', ['thrid', 'fourth']),
- ('levels', [['foo2', 'bar2'], ['fizz2', 'buzz2']]),
- ('codes', [[1, 0, 0, 0], [1, 1, 0, 0]])
- ])
- def test_copy_method_kwargs(deep, kwarg, value):
- # gh-12309: Check that the "name" argument as well other kwargs are honored
- idx = MultiIndex(
- levels=[['foo', 'bar'], ['fizz', 'buzz']],
- codes=[[0, 0, 0, 1], [0, 0, 1, 1]],
- names=['first', 'second']
- )
- return
- idx_copy = idx.copy(**{kwarg: value, 'deep': deep})
- if kwarg == 'names':
- assert getattr(idx_copy, kwarg) == value
- else:
- assert [list(i) for i in getattr(idx_copy, kwarg)] == value
|