From b099f6ca8589f1e3493411db7f1bda39cf124588 Mon Sep 17 00:00:00 2001 From: "H. Vetinari" Date: Tue, 28 Aug 2018 08:18:16 +0200 Subject: [PATCH 1/3] TST: fixturize series/test_alter_axes.py --- pandas/tests/series/conftest.py | 31 ++++++++++ pandas/tests/series/test_alter_axes.py | 82 ++++++++++++-------------- 2 files changed, 69 insertions(+), 44 deletions(-) create mode 100644 pandas/tests/series/conftest.py diff --git a/pandas/tests/series/conftest.py b/pandas/tests/series/conftest.py new file mode 100644 index 0000000000000..d93a28e285920 --- /dev/null +++ b/pandas/tests/series/conftest.py @@ -0,0 +1,31 @@ +import pytest + +import pandas.util.testing as tm + +from pandas import Series + + +@pytest.fixture +def ts(): + ts = tm.makeTimeSeries() + ts.name = 'ts' + return ts + + +@pytest.fixture +def series(): + series = tm.makeStringSeries() + series.name = 'series' + return series + + +@pytest.fixture +def objSeries(): + objSeries = tm.makeObjectSeries() + objSeries.name = 'objects' + return objSeries + + +@pytest.fixture +def empty(): + return Series([], index=[]) diff --git a/pandas/tests/series/test_alter_axes.py b/pandas/tests/series/test_alter_axes.py index ed3191cf849c0..1ac15c61aeefd 100644 --- a/pandas/tests/series/test_alter_axes.py +++ b/pandas/tests/series/test_alter_axes.py @@ -6,44 +6,38 @@ from datetime import datetime import numpy as np -import pandas as pd -from pandas import Index, Series -from pandas.core.index import MultiIndex, RangeIndex +from pandas import Series, DataFrame, Index, MultiIndex, RangeIndex from pandas.compat import lrange, range, zip -from pandas.util.testing import assert_series_equal, assert_frame_equal import pandas.util.testing as tm -from .common import TestData +class TestSeriesAlterAxes(): -class TestSeriesAlterAxes(TestData): - - def test_setindex(self): + def test_setindex(self, series): # wrong type - series = self.series.copy() pytest.raises(TypeError, setattr, series, 'index', None) # wrong length - series = self.series.copy() pytest.raises(Exception, setattr, series, 'index', np.arange(len(series) - 1)) # works - series = self.series.copy() series.index = np.arange(len(series)) assert isinstance(series.index, Index) - def test_rename(self): + # Renaming + + def test_rename(self, ts): renamer = lambda x: x.strftime('%Y%m%d') - renamed = self.ts.rename(renamer) - assert renamed.index[0] == renamer(self.ts.index[0]) + renamed = ts.rename(renamer) + assert renamed.index[0] == renamer(ts.index[0]) # dict - rename_dict = dict(zip(self.ts.index, renamed.index)) - renamed2 = self.ts.rename(rename_dict) - assert_series_equal(renamed, renamed2) + rename_dict = dict(zip(ts.index, renamed.index)) + renamed2 = ts.rename(rename_dict) + tm.assert_series_equal(renamed, renamed2) # partial dict s = Series(np.arange(4), index=['a', 'b', 'c', 'd'], dtype='int64') @@ -105,12 +99,12 @@ def test_set_name(self): assert s.name is None assert s is not s2 - def test_rename_inplace(self): + def test_rename_inplace(self, ts): renamer = lambda x: x.strftime('%Y%m%d') - expected = renamer(self.ts.index[0]) + expected = renamer(ts.index[0]) - self.ts.rename(renamer, inplace=True) - assert self.ts.index[0] == expected + ts.rename(renamer, inplace=True) + assert ts.index[0] == expected def test_set_index_makes_timeseries(self): idx = tm.makeDateIndex(10) @@ -135,7 +129,7 @@ def test_reset_index(self): s = ser.reset_index(drop=True) s2 = ser s2.reset_index(drop=True, inplace=True) - assert_series_equal(s, s2) + tm.assert_series_equal(s, s2) # level index = MultiIndex(levels=[['bar'], ['one', 'two', 'three'], [0, 1]], @@ -150,8 +144,8 @@ def test_reset_index(self): assert isinstance(rs, Series) def test_reset_index_level(self): - df = pd.DataFrame([[1, 2, 3], [4, 5, 6]], - columns=['A', 'B', 'C']) + df = DataFrame([[1, 2, 3], [4, 5, 6]], + columns=['A', 'B', 'C']) for levels in ['A', 'B'], [0, 1]: # With MultiIndex @@ -189,19 +183,19 @@ def test_reset_index_level(self): s.reset_index(level=[0, 1, 2]) # Check that .reset_index([],drop=True) doesn't fail - result = pd.Series(range(4)).reset_index([], drop=True) - expected = pd.Series(range(4)) - assert_series_equal(result, expected) + result = Series(range(4)).reset_index([], drop=True) + expected = Series(range(4)) + tm.assert_series_equal(result, expected) def test_reset_index_range(self): # GH 12071 - s = pd.Series(range(2), name='A', dtype='int64') + s = Series(range(2), name='A', dtype='int64') series_result = s.reset_index() assert isinstance(series_result.index, RangeIndex) - series_expected = pd.DataFrame([[0, 0], [1, 1]], - columns=['index', 'A'], - index=RangeIndex(stop=2)) - assert_frame_equal(series_result, series_expected) + series_expected = DataFrame([[0, 0], [1, 1]], + columns=['index', 'A'], + index=RangeIndex(stop=2)) + tm.assert_frame_equal(series_result, series_expected) def test_reorder_levels(self): index = MultiIndex(levels=[['bar'], ['one', 'two', 'three'], [0, 1]], @@ -212,11 +206,11 @@ def test_reorder_levels(self): # no change, position result = s.reorder_levels([0, 1, 2]) - assert_series_equal(s, result) + tm.assert_series_equal(s, result) # no change, labels result = s.reorder_levels(['L0', 'L1', 'L2']) - assert_series_equal(s, result) + tm.assert_series_equal(s, result) # rotate, position result = s.reorder_levels([1, 2, 0]) @@ -225,17 +219,17 @@ def test_reorder_levels(self): [0, 0, 0, 0, 0, 0]], names=['L1', 'L2', 'L0']) expected = Series(np.arange(6), index=e_idx) - assert_series_equal(result, expected) + tm.assert_series_equal(result, expected) - def test_rename_axis_inplace(self): + def test_rename_axis_inplace(self, ts): # GH 15704 - series = self.ts.copy() + series = ts.copy() expected = series.rename_axis('foo') result = series.copy() no_return = result.rename_axis('foo', inplace=True) assert no_return is None - assert_series_equal(result, expected) + tm.assert_series_equal(result, expected) def test_set_axis_inplace_axes(self, axis_series): # GH14636 @@ -291,25 +285,25 @@ def test_reset_index_drop_errors(self): # GH 20925 # KeyError raised for series index when passed level name is missing - s = pd.Series(range(4)) + s = Series(range(4)) with tm.assert_raises_regex(KeyError, 'must be same as name'): s.reset_index('wrong', drop=True) with tm.assert_raises_regex(KeyError, 'must be same as name'): s.reset_index('wrong') # KeyError raised for series when level to be dropped is missing - s = pd.Series(range(4), index=pd.MultiIndex.from_product([[1, 2]] * 2)) + s = Series(range(4), index=MultiIndex.from_product([[1, 2]] * 2)) with tm.assert_raises_regex(KeyError, 'not found'): s.reset_index('wrong', drop=True) def test_droplevel(self): # GH20342 - ser = pd.Series([1, 2, 3, 4]) - ser.index = pd.MultiIndex.from_arrays([(1, 2, 3, 4), (5, 6, 7, 8)], - names=['a', 'b']) + ser = Series([1, 2, 3, 4]) + ser.index = MultiIndex.from_arrays([(1, 2, 3, 4), (5, 6, 7, 8)], + names=['a', 'b']) expected = ser.reset_index('b', drop=True) result = ser.droplevel('b', axis='index') - assert_series_equal(result, expected) + tm.assert_series_equal(result, expected) # test that droplevel raises ValueError on axis != 0 with pytest.raises(ValueError): ser.droplevel(1, axis='columns') From 70ee3bfb6943455d9de00e0bf65d851273ca8832 Mon Sep 17 00:00:00 2001 From: "H. Vetinari" Date: Fri, 31 Aug 2018 08:13:30 +0200 Subject: [PATCH 2/3] Review (jreback) --- pandas/tests/series/conftest.py | 44 ++++++++++++++++++-------- pandas/tests/series/test_alter_axes.py | 32 +++++++++---------- 2 files changed, 47 insertions(+), 29 deletions(-) diff --git a/pandas/tests/series/conftest.py b/pandas/tests/series/conftest.py index d93a28e285920..6f26cf18a40a1 100644 --- a/pandas/tests/series/conftest.py +++ b/pandas/tests/series/conftest.py @@ -6,26 +6,44 @@ @pytest.fixture -def ts(): - ts = tm.makeTimeSeries() - ts.name = 'ts' - return ts +def datetime_series(): + """ + Fixture for Series of floats with DatetimeIndex + + See pandas.util.testing.makeTimeSeries + """ + s = tm.makeTimeSeries() + s.name = 'ts' + return s @pytest.fixture -def series(): - series = tm.makeStringSeries() - series.name = 'series' - return series +def string_series(): + """ + Fixture for Series of floats with Index of unique strings + + See pandas.util.testing.makeStringSeries + """ + s = tm.makeStringSeries() + s.name = 'series' + return s @pytest.fixture -def objSeries(): - objSeries = tm.makeObjectSeries() - objSeries.name = 'objects' - return objSeries +def object_series(): + """ + Fixture for Series of dtype datetime64[ns] with Index of unique strings + + See pandas.util.testing.makeObjectSeries + """ + s = tm.makeObjectSeries() + s.name = 'objects' + return s @pytest.fixture -def empty(): +def empty_series(): + """ + Fixture for empty Series + """ return Series([], index=[]) diff --git a/pandas/tests/series/test_alter_axes.py b/pandas/tests/series/test_alter_axes.py index 1ac15c61aeefd..c3e4cb8bc3abc 100644 --- a/pandas/tests/series/test_alter_axes.py +++ b/pandas/tests/series/test_alter_axes.py @@ -13,23 +13,24 @@ import pandas.util.testing as tm -class TestSeriesAlterAxes(): +class TestSeriesAlterAxes(object): - def test_setindex(self, series): + def test_setindex(self, string_series): # wrong type - pytest.raises(TypeError, setattr, series, 'index', None) + pytest.raises(TypeError, setattr, string_series, 'index', None) # wrong length - pytest.raises(Exception, setattr, series, 'index', - np.arange(len(series) - 1)) + pytest.raises(Exception, setattr, string_series, 'index', + np.arange(len(string_series) - 1)) # works - series.index = np.arange(len(series)) - assert isinstance(series.index, Index) + string_series.index = np.arange(len(string_series)) + assert isinstance(string_series.index, Index) # Renaming - def test_rename(self, ts): + def test_rename(self, datetime_series): + ts = datetime_series renamer = lambda x: x.strftime('%Y%m%d') renamed = ts.rename(renamer) assert renamed.index[0] == renamer(ts.index[0]) @@ -99,12 +100,12 @@ def test_set_name(self): assert s.name is None assert s is not s2 - def test_rename_inplace(self, ts): + def test_rename_inplace(self, datetime_series): renamer = lambda x: x.strftime('%Y%m%d') - expected = renamer(ts.index[0]) + expected = renamer(datetime_series.index[0]) - ts.rename(renamer, inplace=True) - assert ts.index[0] == expected + datetime_series.rename(renamer, inplace=True) + assert datetime_series.index[0] == expected def test_set_index_makes_timeseries(self): idx = tm.makeDateIndex(10) @@ -221,11 +222,10 @@ def test_reorder_levels(self): expected = Series(np.arange(6), index=e_idx) tm.assert_series_equal(result, expected) - def test_rename_axis_inplace(self, ts): + def test_rename_axis_inplace(self, datetime_series): # GH 15704 - series = ts.copy() - expected = series.rename_axis('foo') - result = series.copy() + expected = datetime_series.rename_axis('foo') + result = datetime_series no_return = result.rename_axis('foo', inplace=True) assert no_return is None From 4270363c720abdf5ca65e931586a3e3e8690c6d0 Mon Sep 17 00:00:00 2001 From: "H. Vetinari" Date: Wed, 5 Sep 2018 01:05:46 +0200 Subject: [PATCH 3/3] Review (jreback) --- pandas/tests/series/conftest.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pandas/tests/series/conftest.py b/pandas/tests/series/conftest.py index 6f26cf18a40a1..80a4e81c443ed 100644 --- a/pandas/tests/series/conftest.py +++ b/pandas/tests/series/conftest.py @@ -9,8 +9,6 @@ def datetime_series(): """ Fixture for Series of floats with DatetimeIndex - - See pandas.util.testing.makeTimeSeries """ s = tm.makeTimeSeries() s.name = 'ts' @@ -21,8 +19,6 @@ def datetime_series(): def string_series(): """ Fixture for Series of floats with Index of unique strings - - See pandas.util.testing.makeStringSeries """ s = tm.makeStringSeries() s.name = 'series' @@ -33,8 +29,6 @@ def string_series(): def object_series(): """ Fixture for Series of dtype datetime64[ns] with Index of unique strings - - See pandas.util.testing.makeObjectSeries """ s = tm.makeObjectSeries() s.name = 'objects'