Skip to content

Commit 98a52cb

Browse files
committed
TST: Move some Series ctor tests to SharedWithSparse
1 parent 4efe656 commit 98a52cb

File tree

3 files changed

+96
-63
lines changed

3 files changed

+96
-63
lines changed

pandas/tests/series/test_api.py

+77-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
# coding=utf-8
22
# pylint: disable-msg=E1101,W0612
3+
from collections import OrderedDict
34

45
import pytest
56

67
import numpy as np
78
import pandas as pd
89

9-
from pandas import Index, Series, DataFrame, date_range
10+
from pandas import Index, Series, SparseSeries, DataFrame, date_range
1011
from pandas.core.indexes.datetimes import Timestamp
1112

1213
from pandas.compat import range
@@ -21,6 +22,12 @@
2122

2223
class SharedWithSparse(object):
2324

25+
def _assert_series_equal(self, left, right):
26+
"""Helper dispatching to series class dependent assertion"""
27+
if isinstance(left, SparseSeries) or isinstance(right, SparseSeries):
28+
return tm.assert_sp_series_equal(left, right)
29+
return tm.assert_series_equal(left, right)
30+
2431
def test_scalarop_preserve_name(self):
2532
result = self.ts * 2
2633
assert result.name == self.ts.name
@@ -117,9 +124,78 @@ def test_to_sparse_pass_name(self):
117124
result = self.ts.to_sparse()
118125
assert result.name == self.ts.name
119126

127+
def test_constructor_dict(self):
128+
d = {'a': 0., 'b': 1., 'c': 2.}
129+
result = self.series_klass(d)
130+
expected = self.series_klass(d, index=sorted(d.keys()))
131+
self._assert_series_equal(result, expected)
132+
133+
result = self.series_klass(d, index=['b', 'c', 'd', 'a'])
134+
expected = self.series_klass([1, 2, np.nan, 0], index=['b', 'c', 'd', 'a'])
135+
self._assert_series_equal(result, expected)
136+
137+
def test_constructor_subclass_dict(self):
138+
data = tm.TestSubDict((x, 10.0 * x) for x in range(10))
139+
series = self.series_klass(data)
140+
expected = self.series_klass(dict(compat.iteritems(data)))
141+
self._assert_series_equal(series, expected)
142+
143+
def test_constructor_ordereddict(self):
144+
# GH3283
145+
data = OrderedDict(
146+
('col%s' % i, np.random.random()) for i in range(12))
147+
148+
series = self.series_klass(data)
149+
expected = self.series_klass(list(data.values()), list(data.keys()))
150+
self._assert_series_equal(series, expected)
151+
152+
# Test with subclass
153+
class A(OrderedDict):
154+
pass
155+
156+
series = self.series_klass(A(data))
157+
self._assert_series_equal(series, expected)
158+
159+
def test_constructor_dict_multiindex(self):
160+
d = {('a', 'a'): 0., ('b', 'a'): 1., ('b', 'c'): 2.}
161+
_d = sorted(d.items())
162+
result = self.series_klass(d)
163+
expected = self.series_klass(
164+
[x[1] for x in _d],
165+
index=pd.MultiIndex.from_tuples([x[0] for x in _d]))
166+
self._assert_series_equal(result, expected)
167+
168+
d['z'] = 111.
169+
_d.insert(0, ('z', d['z']))
170+
result = self.series_klass(d)
171+
expected = self.series_klass([x[1] for x in _d],
172+
index=pd.Index([x[0] for x in _d],
173+
tupleize_cols=False))
174+
result = result.reindex(index=expected.index)
175+
self._assert_series_equal(result, expected)
176+
177+
def test_constructor_dict_timedelta_index(self):
178+
# GH #12169 : Resample category data with timedelta index
179+
# construct Series from dict as data and TimedeltaIndex as index
180+
# will result NaN in result Series data
181+
expected = self.series_klass(
182+
data=['A', 'B', 'C'],
183+
index=pd.to_timedelta([0, 10, 20], unit='s')
184+
)
185+
186+
result = self.series_klass(
187+
data={pd.to_timedelta(0, unit='s'): 'A',
188+
pd.to_timedelta(10, unit='s'): 'B',
189+
pd.to_timedelta(20, unit='s'): 'C'},
190+
index=pd.to_timedelta([0, 10, 20], unit='s')
191+
)
192+
self._assert_series_equal(result, expected)
193+
120194

121195
class TestSeriesMisc(TestData, SharedWithSparse):
122196

197+
series_klass = Series
198+
123199
def test_tab_completion(self):
124200
# GH 9910
125201
s = Series(list('abcd'))

pandas/tests/series/test_constructors.py

-62
Original file line numberDiff line numberDiff line change
@@ -605,48 +605,6 @@ def test_constructor_dict(self):
605605
expected.iloc[1] = 1
606606
assert_series_equal(result, expected)
607607

608-
def test_constructor_dict_multiindex(self):
609-
check = lambda result, expected: tm.assert_series_equal(
610-
result, expected, check_dtype=True, check_series_type=True)
611-
d = {('a', 'a'): 0., ('b', 'a'): 1., ('b', 'c'): 2.}
612-
_d = sorted(d.items())
613-
ser = Series(d)
614-
expected = Series([x[1] for x in _d],
615-
index=MultiIndex.from_tuples([x[0] for x in _d]))
616-
check(ser, expected)
617-
618-
d['z'] = 111.
619-
_d.insert(0, ('z', d['z']))
620-
ser = Series(d)
621-
expected = Series([x[1] for x in _d], index=Index(
622-
[x[0] for x in _d], tupleize_cols=False))
623-
ser = ser.reindex(index=expected.index)
624-
check(ser, expected)
625-
626-
def test_constructor_dict_timedelta_index(self):
627-
# GH #12169 : Resample category data with timedelta index
628-
# construct Series from dict as data and TimedeltaIndex as index
629-
# will result NaN in result Series data
630-
expected = Series(
631-
data=['A', 'B', 'C'],
632-
index=pd.to_timedelta([0, 10, 20], unit='s')
633-
)
634-
635-
result = Series(
636-
data={pd.to_timedelta(0, unit='s'): 'A',
637-
pd.to_timedelta(10, unit='s'): 'B',
638-
pd.to_timedelta(20, unit='s'): 'C'},
639-
index=pd.to_timedelta([0, 10, 20], unit='s')
640-
)
641-
# this should work
642-
assert_series_equal(result, expected)
643-
644-
def test_constructor_subclass_dict(self):
645-
data = tm.TestSubDict((x, 10.0 * x) for x in range(10))
646-
series = Series(data)
647-
refseries = Series(dict(compat.iteritems(data)))
648-
assert_series_equal(refseries, series)
649-
650608
def test_constructor_dict_datetime64_index(self):
651609
# GH 9456
652610

@@ -670,26 +628,6 @@ def create_data(constructor):
670628
assert_series_equal(result_datetime, expected)
671629
assert_series_equal(result_Timestamp, expected)
672630

673-
def test_orderedDict_ctor(self):
674-
# GH3283
675-
import pandas
676-
import random
677-
data = OrderedDict([('col%s' % i, random.random()) for i in range(12)])
678-
s = pandas.Series(data)
679-
assert all(s.values == list(data.values()))
680-
681-
def test_orderedDict_subclass_ctor(self):
682-
# GH3283
683-
import pandas
684-
import random
685-
686-
class A(OrderedDict):
687-
pass
688-
689-
data = A([('col%s' % i, random.random()) for i in range(12)])
690-
s = pandas.Series(data)
691-
assert all(s.values == list(data.values()))
692-
693631
def test_constructor_list_of_tuples(self):
694632
data = [(1, 1), (2, 2), (2, 3)]
695633
s = Series(data)

pandas/tests/sparse/test_series.py

+19
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# pylint: disable-msg=E1101,W0612
22

33
import operator
4+
from datetime import datetime
5+
46
import pytest
57

68
from numpy import nan
@@ -58,6 +60,8 @@ def _test_data2_zero():
5860

5961
class TestSparseSeries(SharedWithSparse):
6062

63+
series_klass = SparseSeries
64+
6165
def setup_method(self, method):
6266
arr, index = _test_data1()
6367

@@ -1379,3 +1383,18 @@ def test_numpy_func_call(self):
13791383
for func in funcs:
13801384
for series in ('bseries', 'zbseries'):
13811385
getattr(np, func)(getattr(self, series))
1386+
1387+
1388+
@pytest.mark.parametrize(
1389+
'datetime_type', (np.datetime64,
1390+
pd.Timestamp,
1391+
lambda x: datetime.strptime(x, '%Y-%m-%d')))
1392+
def test_constructor_dict_datetime64_index(datetime_type):
1393+
# GH 9456
1394+
dates = ['1984-02-19', '1988-11-06', '1989-12-03', '1990-03-15']
1395+
values = [42544017.198965244, 1234565, 40512335.181958228, -1]
1396+
1397+
result = SparseSeries(dict(zip(map(datetime_type, dates), values)))
1398+
expected = SparseSeries(values, map(pd.Timestamp, dates))
1399+
1400+
tm.assert_sp_series_equal(result, expected)

0 commit comments

Comments
 (0)