Skip to content

Commit c5f2084

Browse files
jbrockmendeljreback
authored andcommitted
CLN: test code no longer shared with sparse (#30007)
1 parent c4e5fdf commit c5f2084

File tree

2 files changed

+58
-111
lines changed

2 files changed

+58
-111
lines changed

pandas/tests/frame/test_api.py

+34-69
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,11 @@
66
import pytest
77

88
import pandas as pd
9-
from pandas import (
10-
Categorical,
11-
DataFrame,
12-
Series,
13-
SparseDtype,
14-
compat,
15-
date_range,
16-
timedelta_range,
17-
)
9+
from pandas import Categorical, DataFrame, Series, compat, date_range, timedelta_range
1810
import pandas.util.testing as tm
1911

2012

21-
class SharedWithSparse:
22-
"""
23-
A collection of tests DataFrame and SparseDataFrame can share.
24-
25-
In generic tests on this class, use ``self._assert_frame_equal()`` and
26-
``self._assert_series_equal()`` which are implemented in sub-classes
27-
and dispatch correctly.
28-
"""
29-
30-
def _assert_frame_equal(self, left, right):
31-
"""Dispatch to frame class dependent assertion"""
32-
raise NotImplementedError
33-
34-
def _assert_series_equal(self, left, right):
35-
"""Dispatch to series class dependent assertion"""
36-
raise NotImplementedError
37-
13+
class TestDataFrameMisc:
3814
def test_copy_index_name_checking(self, float_frame):
3915
# don't want to be able to modify the index stored elsewhere after
4016
# making a copy
@@ -141,16 +117,16 @@ def test_tab_completion(self):
141117
def test_not_hashable(self):
142118
empty_frame = DataFrame()
143119

144-
df = self.klass([1])
145-
msg = "'(Sparse)?DataFrame' objects are mutable, thus they cannot be hashed"
120+
df = DataFrame([1])
121+
msg = "'DataFrame' objects are mutable, thus they cannot be hashed"
146122
with pytest.raises(TypeError, match=msg):
147123
hash(df)
148124
with pytest.raises(TypeError, match=msg):
149125
hash(empty_frame)
150126

151127
def test_new_empty_index(self):
152-
df1 = self.klass(np.random.randn(0, 3))
153-
df2 = self.klass(np.random.randn(0, 3))
128+
df1 = DataFrame(np.random.randn(0, 3))
129+
df2 = DataFrame(np.random.randn(0, 3))
154130
df1.index.name = "foo"
155131
assert df2.index.name is None
156132

@@ -161,7 +137,7 @@ def test_array_interface(self, float_frame):
161137
assert result.index is float_frame.index
162138
assert result.columns is float_frame.columns
163139

164-
self._assert_frame_equal(result, float_frame.apply(np.sqrt))
140+
tm.assert_frame_equal(result, float_frame.apply(np.sqrt))
165141

166142
def test_get_agg_axis(self, float_frame):
167143
cols = float_frame._get_agg_axis(0)
@@ -187,9 +163,9 @@ def test_nonzero(self, float_frame, float_string_frame):
187163
assert not df.empty
188164

189165
def test_iteritems(self):
190-
df = self.klass([[1, 2, 3], [4, 5, 6]], columns=["a", "a", "b"])
166+
df = DataFrame([[1, 2, 3], [4, 5, 6]], columns=["a", "a", "b"])
191167
for k, v in df.items():
192-
assert isinstance(v, self.klass._constructor_sliced)
168+
assert isinstance(v, DataFrame._constructor_sliced)
193169

194170
def test_items(self):
195171
# GH 17213, GH 13918
@@ -206,23 +182,23 @@ def test_iter(self, float_frame):
206182
def test_iterrows(self, float_frame, float_string_frame):
207183
for k, v in float_frame.iterrows():
208184
exp = float_frame.loc[k]
209-
self._assert_series_equal(v, exp)
185+
tm.assert_series_equal(v, exp)
210186

211187
for k, v in float_string_frame.iterrows():
212188
exp = float_string_frame.loc[k]
213-
self._assert_series_equal(v, exp)
189+
tm.assert_series_equal(v, exp)
214190

215191
def test_iterrows_iso8601(self):
216192
# GH 19671
217-
s = self.klass(
193+
s = DataFrame(
218194
{
219195
"non_iso8601": ["M1701", "M1802", "M1903", "M2004"],
220196
"iso8601": date_range("2000-01-01", periods=4, freq="M"),
221197
}
222198
)
223199
for k, v in s.iterrows():
224200
exp = s.loc[k]
225-
self._assert_series_equal(v, exp)
201+
tm.assert_series_equal(v, exp)
226202

227203
def test_iterrows_corner(self):
228204
# gh-12222
@@ -248,19 +224,19 @@ def test_iterrows_corner(self):
248224

249225
def test_itertuples(self, float_frame):
250226
for i, tup in enumerate(float_frame.itertuples()):
251-
s = self.klass._constructor_sliced(tup[1:])
227+
s = DataFrame._constructor_sliced(tup[1:])
252228
s.name = tup[0]
253229
expected = float_frame.iloc[i, :].reset_index(drop=True)
254-
self._assert_series_equal(s, expected)
230+
tm.assert_series_equal(s, expected)
255231

256-
df = self.klass(
232+
df = DataFrame(
257233
{"floats": np.random.randn(5), "ints": range(5)}, columns=["floats", "ints"]
258234
)
259235

260236
for tup in df.itertuples(index=False):
261237
assert isinstance(tup[1], int)
262238

263-
df = self.klass(data={"a": [1, 2, 3], "b": [4, 5, 6]})
239+
df = DataFrame(data={"a": [1, 2, 3], "b": [4, 5, 6]})
264240
dfaa = df[["a", "a"]]
265241

266242
assert list(dfaa.itertuples()) == [(0, 1, 1), (1, 2, 2), (2, 3, 3)]
@@ -315,7 +291,7 @@ def test_sequence_like_with_categorical(self):
315291
def test_len(self, float_frame):
316292
assert len(float_frame) == len(float_frame.index)
317293

318-
def test_values(self, float_frame, float_string_frame):
294+
def test_values_mixed_dtypes(self, float_frame, float_string_frame):
319295
frame = float_frame
320296
arr = frame.values
321297

@@ -332,7 +308,7 @@ def test_values(self, float_frame, float_string_frame):
332308
arr = float_string_frame[["foo", "A"]].values
333309
assert arr[0, 0] == "bar"
334310

335-
df = self.klass({"complex": [1j, 2j, 3j], "real": [1, 2, 3]})
311+
df = DataFrame({"complex": [1j, 2j, 3j], "real": [1, 2, 3]})
336312
arr = df.values
337313
assert arr[0, 0] == 1j
338314

@@ -372,17 +348,17 @@ def test_transpose(self, float_frame):
372348

373349
# mixed type
374350
index, data = tm.getMixedTypeDict()
375-
mixed = self.klass(data, index=index)
351+
mixed = DataFrame(data, index=index)
376352

377353
mixed_T = mixed.T
378354
for col, s in mixed_T.items():
379355
assert s.dtype == np.object_
380356

381357
def test_swapaxes(self):
382-
df = self.klass(np.random.randn(10, 5))
383-
self._assert_frame_equal(df.T, df.swapaxes(0, 1))
384-
self._assert_frame_equal(df.T, df.swapaxes(1, 0))
385-
self._assert_frame_equal(df, df.swapaxes(0, 0))
358+
df = DataFrame(np.random.randn(10, 5))
359+
tm.assert_frame_equal(df.T, df.swapaxes(0, 1))
360+
tm.assert_frame_equal(df.T, df.swapaxes(1, 0))
361+
tm.assert_frame_equal(df, df.swapaxes(0, 0))
386362
msg = (
387363
"No axis named 2 for object type"
388364
r" <class 'pandas.core(.sparse)?.frame.(Sparse)?DataFrame'>"
@@ -413,7 +389,7 @@ def test_more_values(self, float_string_frame):
413389
assert values.shape[1] == len(float_string_frame.columns)
414390

415391
def test_repr_with_mi_nat(self, float_string_frame):
416-
df = self.klass(
392+
df = DataFrame(
417393
{"X": [1, 2]}, index=[[pd.NaT, pd.Timestamp("20130101")], ["a", "b"]]
418394
)
419395
result = repr(df)
@@ -430,26 +406,26 @@ def test_series_put_names(self, float_string_frame):
430406
assert v.name == k
431407

432408
def test_empty_nonzero(self):
433-
df = self.klass([1, 2, 3])
409+
df = DataFrame([1, 2, 3])
434410
assert not df.empty
435-
df = self.klass(index=[1], columns=[1])
411+
df = DataFrame(index=[1], columns=[1])
436412
assert not df.empty
437-
df = self.klass(index=["a", "b"], columns=["c", "d"]).dropna()
413+
df = DataFrame(index=["a", "b"], columns=["c", "d"]).dropna()
438414
assert df.empty
439415
assert df.T.empty
440416
empty_frames = [
441-
self.klass(),
442-
self.klass(index=[1]),
443-
self.klass(columns=[1]),
444-
self.klass({1: []}),
417+
DataFrame(),
418+
DataFrame(index=[1]),
419+
DataFrame(columns=[1]),
420+
DataFrame({1: []}),
445421
]
446422
for df in empty_frames:
447423
assert df.empty
448424
assert df.T.empty
449425

450426
def test_with_datetimelikes(self):
451427

452-
df = self.klass(
428+
df = DataFrame(
453429
{
454430
"A": date_range("20130101", periods=10),
455431
"B": timedelta_range("1 day", periods=10),
@@ -458,20 +434,9 @@ def test_with_datetimelikes(self):
458434
t = df.T
459435

460436
result = t.dtypes.value_counts()
461-
if self.klass is DataFrame:
462-
expected = Series({np.dtype("object"): 10})
463-
else:
464-
expected = Series({SparseDtype(dtype=object): 10})
437+
expected = Series({np.dtype("object"): 10})
465438
tm.assert_series_equal(result, expected)
466439

467-
468-
class TestDataFrameMisc(SharedWithSparse):
469-
470-
klass = DataFrame
471-
# SharedWithSparse tests use generic, klass-agnostic assertion
472-
_assert_frame_equal = staticmethod(tm.assert_frame_equal)
473-
_assert_series_equal = staticmethod(tm.assert_series_equal)
474-
475440
def test_values(self, float_frame):
476441
float_frame.values[:, 0] = 5.0
477442
assert (float_frame.values[:, 0] == 5).all()

pandas/tests/series/test_api.py

+24-42
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,7 @@
2424
import pandas.io.formats.printing as printing
2525

2626

27-
class SharedWithSparse:
28-
"""
29-
A collection of tests Series and SparseSeries can share.
30-
31-
In generic tests on this class, use ``self._assert_series_equal()``
32-
which is implemented in sub-classes.
33-
"""
34-
35-
def _assert_series_equal(self, left, right):
36-
"""Dispatch to series class dependent assertion"""
37-
raise NotImplementedError
38-
27+
class TestSeriesMisc:
3928
def test_scalarop_preserve_name(self, datetime_series):
4029
result = datetime_series * 2
4130
assert result.name == datetime_series.name
@@ -132,85 +121,78 @@ def test_sort_index_name(self, datetime_series):
132121

133122
def test_constructor_dict(self):
134123
d = {"a": 0.0, "b": 1.0, "c": 2.0}
135-
result = self.series_klass(d)
136-
expected = self.series_klass(d, index=sorted(d.keys()))
137-
self._assert_series_equal(result, expected)
124+
result = Series(d)
125+
expected = Series(d, index=sorted(d.keys()))
126+
tm.assert_series_equal(result, expected)
138127

139-
result = self.series_klass(d, index=["b", "c", "d", "a"])
140-
expected = self.series_klass([1, 2, np.nan, 0], index=["b", "c", "d", "a"])
141-
self._assert_series_equal(result, expected)
128+
result = Series(d, index=["b", "c", "d", "a"])
129+
expected = Series([1, 2, np.nan, 0], index=["b", "c", "d", "a"])
130+
tm.assert_series_equal(result, expected)
142131

143132
def test_constructor_subclass_dict(self):
144133
data = tm.TestSubDict((x, 10.0 * x) for x in range(10))
145-
series = self.series_klass(data)
146-
expected = self.series_klass(dict(data.items()))
147-
self._assert_series_equal(series, expected)
134+
series = Series(data)
135+
expected = Series(dict(data.items()))
136+
tm.assert_series_equal(series, expected)
148137

149138
def test_constructor_ordereddict(self):
150139
# GH3283
151140
data = OrderedDict(
152141
("col{i}".format(i=i), np.random.random()) for i in range(12)
153142
)
154143

155-
series = self.series_klass(data)
156-
expected = self.series_klass(list(data.values()), list(data.keys()))
157-
self._assert_series_equal(series, expected)
144+
series = Series(data)
145+
expected = Series(list(data.values()), list(data.keys()))
146+
tm.assert_series_equal(series, expected)
158147

159148
# Test with subclass
160149
class A(OrderedDict):
161150
pass
162151

163-
series = self.series_klass(A(data))
164-
self._assert_series_equal(series, expected)
152+
series = Series(A(data))
153+
tm.assert_series_equal(series, expected)
165154

166155
def test_constructor_dict_multiindex(self):
167156
d = {("a", "a"): 0.0, ("b", "a"): 1.0, ("b", "c"): 2.0}
168157
_d = sorted(d.items())
169-
result = self.series_klass(d)
170-
expected = self.series_klass(
158+
result = Series(d)
159+
expected = Series(
171160
[x[1] for x in _d], index=pd.MultiIndex.from_tuples([x[0] for x in _d])
172161
)
173-
self._assert_series_equal(result, expected)
162+
tm.assert_series_equal(result, expected)
174163

175164
d["z"] = 111.0
176165
_d.insert(0, ("z", d["z"]))
177-
result = self.series_klass(d)
178-
expected = self.series_klass(
166+
result = Series(d)
167+
expected = Series(
179168
[x[1] for x in _d], index=pd.Index([x[0] for x in _d], tupleize_cols=False)
180169
)
181170
result = result.reindex(index=expected.index)
182-
self._assert_series_equal(result, expected)
171+
tm.assert_series_equal(result, expected)
183172

184173
def test_constructor_dict_timedelta_index(self):
185174
# GH #12169 : Resample category data with timedelta index
186175
# construct Series from dict as data and TimedeltaIndex as index
187176
# will result NaN in result Series data
188-
expected = self.series_klass(
177+
expected = Series(
189178
data=["A", "B", "C"], index=pd.to_timedelta([0, 10, 20], unit="s")
190179
)
191180

192-
result = self.series_klass(
181+
result = Series(
193182
data={
194183
pd.to_timedelta(0, unit="s"): "A",
195184
pd.to_timedelta(10, unit="s"): "B",
196185
pd.to_timedelta(20, unit="s"): "C",
197186
},
198187
index=pd.to_timedelta([0, 10, 20], unit="s"),
199188
)
200-
self._assert_series_equal(result, expected)
189+
tm.assert_series_equal(result, expected)
201190

202191
def test_sparse_accessor_updates_on_inplace(self):
203192
s = pd.Series([1, 1, 2, 3], dtype="Sparse[int]")
204193
s.drop([0, 1], inplace=True)
205194
assert s.sparse.density == 1.0
206195

207-
208-
class TestSeriesMisc(SharedWithSparse):
209-
210-
series_klass = Series
211-
# SharedWithSparse tests use generic, series_klass-agnostic assertion
212-
_assert_series_equal = staticmethod(tm.assert_series_equal)
213-
214196
def test_tab_completion(self):
215197
# GH 9910
216198
s = Series(list("abcd"))

0 commit comments

Comments
 (0)