-
-
Notifications
You must be signed in to change notification settings - Fork 18.7k
Closed
Labels
Needs TestsUnit test(s) needed to prevent regressionsUnit test(s) needed to prevent regressions
Description
All these tests aren't actually being run:
pandas/pandas/tests/generic/test_generic.py
Lines 53 to 306 in 2ffb748
class Generic: | |
@pytest.mark.parametrize( | |
"func", | |
[ | |
str.lower, | |
{x: x.lower() for x in list("ABCD")}, | |
Series({x: x.lower() for x in list("ABCD")}), | |
], | |
) | |
def test_rename(self, frame_or_series, func): | |
# single axis | |
idx = list("ABCD") | |
for axis in frame_or_series._AXIS_ORDERS: | |
kwargs = {axis: idx} | |
obj = construct(4, **kwargs) | |
# rename a single axis | |
result = obj.rename(**{axis: func}) | |
expected = obj.copy() | |
setattr(expected, axis, list("abcd")) | |
tm.assert_equal(result, expected) | |
def test_get_numeric_data(self, frame_or_series): | |
n = 4 | |
kwargs = { | |
frame_or_series._get_axis_name(i): list(range(n)) | |
for i in range(frame_or_series._AXIS_LEN) | |
} | |
# get the numeric data | |
o = construct(n, **kwargs) | |
result = o._get_numeric_data() | |
tm.assert_equal(result, o) | |
# non-inclusion | |
result = o._get_bool_data() | |
expected = construct(n, value="empty", **kwargs) | |
if isinstance(o, DataFrame): | |
# preserve columns dtype | |
expected.columns = o.columns[:0] | |
tm.assert_equal(result, expected) | |
# get the bool data | |
arr = np.array([True, True, False, True]) | |
o = construct(n, value=arr, **kwargs) | |
result = o._get_numeric_data() | |
tm.assert_equal(result, o) | |
def test_nonzero(self, frame_or_series): | |
# GH 4633 | |
# look at the boolean/nonzero behavior for objects | |
obj = construct(frame_or_series, shape=4) | |
msg = f"The truth value of a {frame_or_series.__name__} is ambiguous" | |
with pytest.raises(ValueError, match=msg): | |
bool(obj == 0) | |
with pytest.raises(ValueError, match=msg): | |
bool(obj == 1) | |
with pytest.raises(ValueError, match=msg): | |
bool(obj) | |
obj = construct(frame_or_series, shape=4, value=1) | |
with pytest.raises(ValueError, match=msg): | |
bool(obj == 0) | |
with pytest.raises(ValueError, match=msg): | |
bool(obj == 1) | |
with pytest.raises(ValueError, match=msg): | |
bool(obj) | |
obj = construct(frame_or_series, shape=4, value=np.nan) | |
with pytest.raises(ValueError, match=msg): | |
bool(obj == 0) | |
with pytest.raises(ValueError, match=msg): | |
bool(obj == 1) | |
with pytest.raises(ValueError, match=msg): | |
bool(obj) | |
# empty | |
obj = construct(frame_or_series, shape=0) | |
with pytest.raises(ValueError, match=msg): | |
bool(obj) | |
# invalid behaviors | |
obj1 = construct(frame_or_series, shape=4, value=1) | |
obj2 = construct(frame_or_series, shape=4, value=1) | |
with pytest.raises(ValueError, match=msg): | |
if obj1: | |
pass | |
with pytest.raises(ValueError, match=msg): | |
obj1 and obj2 | |
with pytest.raises(ValueError, match=msg): | |
obj1 or obj2 | |
with pytest.raises(ValueError, match=msg): | |
not obj1 | |
def test_frame_or_series_compound_dtypes(self, frame_or_series): | |
# see gh-5191 | |
# Compound dtypes should raise NotImplementedError. | |
def f(dtype): | |
return construct(frame_or_series, shape=3, value=1, dtype=dtype) | |
msg = ( | |
"compound dtypes are not implemented " | |
f"in the {frame_or_series.__name__} frame_or_series" | |
) | |
with pytest.raises(NotImplementedError, match=msg): | |
f([("A", "datetime64[h]"), ("B", "str"), ("C", "int32")]) | |
# these work (though results may be unexpected) | |
f("int64") | |
f("float64") | |
f("M8[ns]") | |
def test_metadata_propagation(self, frame_or_series): | |
# check that the metadata matches up on the resulting ops | |
o = construct(frame_or_series, shape=3) | |
o.name = "foo" | |
o2 = construct(frame_or_series, shape=3) | |
o2.name = "bar" | |
# ---------- | |
# preserving | |
# ---------- | |
# simple ops with scalars | |
for op in ["__add__", "__sub__", "__truediv__", "__mul__"]: | |
result = getattr(o, op)(1) | |
tm.assert_metadata_equivalent(o, result) | |
# ops with like | |
for op in ["__add__", "__sub__", "__truediv__", "__mul__"]: | |
result = getattr(o, op)(o) | |
tm.assert_metadata_equivalent(o, result) | |
# simple boolean | |
for op in ["__eq__", "__le__", "__ge__"]: | |
v1 = getattr(o, op)(o) | |
tm.assert_metadata_equivalent(o, v1) | |
tm.assert_metadata_equivalent(o, v1 & v1) | |
tm.assert_metadata_equivalent(o, v1 | v1) | |
# combine_first | |
result = o.combine_first(o2) | |
tm.assert_metadata_equivalent(o, result) | |
# --------------------------- | |
# non-preserving (by default) | |
# --------------------------- | |
# add non-like | |
result = o + o2 | |
tm.assert_metadata_equivalent(result) | |
# simple boolean | |
for op in ["__eq__", "__le__", "__ge__"]: | |
# this is a name matching op | |
v1 = getattr(o, op)(o) | |
v2 = getattr(o, op)(o2) | |
tm.assert_metadata_equivalent(v2) | |
tm.assert_metadata_equivalent(v1 & v2) | |
tm.assert_metadata_equivalent(v1 | v2) | |
def test_size_compat(self, frame_or_series): | |
# GH8846 | |
# size property should be defined | |
o = construct(frame_or_series, shape=10) | |
assert o.size == np.prod(o.shape) | |
assert o.size == 10 ** len(o.axes) | |
def test_split_compat(self, frame_or_series): | |
# xref GH8846 | |
o = construct(frame_or_series, shape=10) | |
assert len(np.array_split(o, 5)) == 5 | |
assert len(np.array_split(o, 2)) == 2 | |
# See gh-12301 | |
def test_stat_unexpected_keyword(self, frame_or_series): | |
obj = construct(frame_or_series, 5) | |
starwars = "Star Wars" | |
errmsg = "unexpected keyword" | |
with pytest.raises(TypeError, match=errmsg): | |
obj.max(epic=starwars) # stat_function | |
with pytest.raises(TypeError, match=errmsg): | |
obj.var(epic=starwars) # stat_function_ddof | |
with pytest.raises(TypeError, match=errmsg): | |
obj.sum(epic=starwars) # cum_function | |
with pytest.raises(TypeError, match=errmsg): | |
obj.any(epic=starwars) # logical_function | |
@pytest.mark.parametrize("func", ["sum", "cumsum", "any", "var"]) | |
def test_api_compat(self, func, frame_or_series): | |
# GH 12021 | |
# compat for __name__, __qualname__ | |
obj = (frame_or_series, 5) | |
f = getattr(obj, func) | |
assert f.__name__ == func | |
assert f.__qualname__.endswith(func) | |
def test_stat_non_defaults_args(self, frame_or_series): | |
obj = construct(frame_or_series, 5) | |
out = np.array([0]) | |
errmsg = "the 'out' parameter is not supported" | |
with pytest.raises(ValueError, match=errmsg): | |
obj.max(out=out) # stat_function | |
with pytest.raises(ValueError, match=errmsg): | |
obj.var(out=out) # stat_function_ddof | |
with pytest.raises(ValueError, match=errmsg): | |
obj.sum(out=out) # cum_function | |
with pytest.raises(ValueError, match=errmsg): | |
obj.any(out=out) # logical_function | |
def test_truncate_out_of_bounds(self, frame_or_series): | |
# GH11382 | |
# small | |
shape = [2000] + ([1] * (frame_or_series._AXIS_LEN - 1)) | |
small = construct(frame_or_series, shape, dtype="int8", value=1) | |
tm.assert_equal(small.truncate(), small) | |
tm.assert_equal(small.truncate(before=0, after=3e3), small) | |
tm.assert_equal(small.truncate(before=-1, after=2e3), small) | |
# big | |
shape = [2_000_000] + ([1] * (frame_or_series._AXIS_LEN - 1)) | |
big = construct(frame_or_series, shape, dtype="int8", value=1) | |
tm.assert_equal(big.truncate(), big) | |
tm.assert_equal(big.truncate(before=0, after=3e6), big) | |
tm.assert_equal(big.truncate(before=-1, after=2e6), big) | |
@pytest.mark.parametrize( | |
"func", | |
[copy, deepcopy, lambda x: x.copy(deep=False), lambda x: x.copy(deep=True)], | |
) | |
@pytest.mark.parametrize("shape", [0, 1, 2]) | |
def test_copy_and_deepcopy(self, frame_or_series, shape, func): | |
# GH 15444 | |
obj = construct(frame_or_series, shape) | |
obj_copy = func(obj) | |
assert obj_copy is not obj | |
tm.assert_equal(obj_copy, obj) |
that's because the class name is Generic
, rather than TestGeneric
They're all uncovered in the coverage report: https://app.codecov.io/gh/pandas-dev/pandas/blob/main/pandas/tests/generic/test_generic.py
Similar to #50378, the class needs renaming, and the tests fixing up
Metadata
Metadata
Assignees
Labels
Needs TestsUnit test(s) needed to prevent regressionsUnit test(s) needed to prevent regressions