Skip to content

Commit 2039d4c

Browse files
authored
TST: collect tests by method from test_api (#37472)
1 parent 72acb78 commit 2039d4c

File tree

4 files changed

+171
-172
lines changed

4 files changed

+171
-172
lines changed
+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import numpy as np
2+
import pytest
3+
4+
from pandas import Series, Timestamp
5+
import pandas._testing as tm
6+
7+
8+
class TestCopy:
9+
@pytest.mark.parametrize("deep", [None, False, True])
10+
def test_copy(self, deep):
11+
12+
ser = Series(np.arange(10), dtype="float64")
13+
14+
# default deep is True
15+
if deep is None:
16+
ser2 = ser.copy()
17+
else:
18+
ser2 = ser.copy(deep=deep)
19+
20+
ser2[::2] = np.NaN
21+
22+
if deep is None or deep is True:
23+
# Did not modify original Series
24+
assert np.isnan(ser2[0])
25+
assert not np.isnan(ser[0])
26+
else:
27+
# we DID modify the original Series
28+
assert np.isnan(ser2[0])
29+
assert np.isnan(ser[0])
30+
31+
@pytest.mark.parametrize("deep", [None, False, True])
32+
def test_copy_tzaware(self, deep):
33+
# GH#11794
34+
# copy of tz-aware
35+
expected = Series([Timestamp("2012/01/01", tz="UTC")])
36+
expected2 = Series([Timestamp("1999/01/01", tz="UTC")])
37+
38+
ser = Series([Timestamp("2012/01/01", tz="UTC")])
39+
40+
if deep is None:
41+
ser2 = ser.copy()
42+
else:
43+
ser2 = ser.copy(deep=deep)
44+
45+
ser2[0] = Timestamp("1999/01/01", tz="UTC")
46+
47+
# default deep is True
48+
if deep is None or deep is True:
49+
# Did not modify original Series
50+
tm.assert_series_equal(ser2, expected2)
51+
tm.assert_series_equal(ser, expected)
52+
else:
53+
# we DID modify the original Series
54+
tm.assert_series_equal(ser2, expected2)
55+
tm.assert_series_equal(ser, expected2)
56+
57+
def test_copy_name(self, datetime_series):
58+
result = datetime_series.copy()
59+
assert result.name == datetime_series.name
60+
61+
def test_copy_index_name_checking(self, datetime_series):
62+
# don't want to be able to modify the index stored elsewhere after
63+
# making a copy
64+
65+
datetime_series.index.name = None
66+
assert datetime_series.index.name is None
67+
assert datetime_series is datetime_series
68+
69+
cp = datetime_series.copy()
70+
cp.index.name = "foo"
71+
assert datetime_series.index.name is None

pandas/tests/series/test_api.py

-172
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from collections import OrderedDict
21
import pydoc
32
import warnings
43

@@ -25,67 +24,12 @@
2524
import pandas._testing as tm
2625
from pandas.core.arrays import PeriodArray
2726

28-
import pandas.io.formats.printing as printing
29-
3027

3128
class TestSeriesMisc:
32-
def test_scalarop_preserve_name(self, datetime_series):
33-
result = datetime_series * 2
34-
assert result.name == datetime_series.name
35-
36-
def test_copy_name(self, datetime_series):
37-
result = datetime_series.copy()
38-
assert result.name == datetime_series.name
39-
40-
def test_copy_index_name_checking(self, datetime_series):
41-
# don't want to be able to modify the index stored elsewhere after
42-
# making a copy
43-
44-
datetime_series.index.name = None
45-
assert datetime_series.index.name is None
46-
assert datetime_series is datetime_series
47-
48-
cp = datetime_series.copy()
49-
cp.index.name = "foo"
50-
printing.pprint_thing(datetime_series.index.name)
51-
assert datetime_series.index.name is None
52-
5329
def test_append_preserve_name(self, datetime_series):
5430
result = datetime_series[:5].append(datetime_series[5:])
5531
assert result.name == datetime_series.name
5632

57-
def test_binop_maybe_preserve_name(self, datetime_series):
58-
# names match, preserve
59-
result = datetime_series * datetime_series
60-
assert result.name == datetime_series.name
61-
result = datetime_series.mul(datetime_series)
62-
assert result.name == datetime_series.name
63-
64-
result = datetime_series * datetime_series[:-2]
65-
assert result.name == datetime_series.name
66-
67-
# names don't match, don't preserve
68-
cp = datetime_series.copy()
69-
cp.name = "something else"
70-
result = datetime_series + cp
71-
assert result.name is None
72-
result = datetime_series.add(cp)
73-
assert result.name is None
74-
75-
ops = ["add", "sub", "mul", "div", "truediv", "floordiv", "mod", "pow"]
76-
ops = ops + ["r" + op for op in ops]
77-
for op in ops:
78-
# names match, preserve
79-
s = datetime_series.copy()
80-
result = getattr(s, op)(s)
81-
assert result.name == datetime_series.name
82-
83-
# names don't match, don't preserve
84-
cp = datetime_series.copy()
85-
cp.name = "changed"
86-
result = getattr(s, op)(cp)
87-
assert result.name is None
88-
8933
def test_getitem_preserve_name(self, datetime_series):
9034
result = datetime_series[datetime_series > 0]
9135
assert result.name == datetime_series.name
@@ -111,73 +55,6 @@ def _pickle_roundtrip(self, obj):
11155
unpickled = pd.read_pickle(path)
11256
return unpickled
11357

114-
def test_constructor_dict(self):
115-
d = {"a": 0.0, "b": 1.0, "c": 2.0}
116-
result = Series(d)
117-
expected = Series(d, index=sorted(d.keys()))
118-
tm.assert_series_equal(result, expected)
119-
120-
result = Series(d, index=["b", "c", "d", "a"])
121-
expected = Series([1, 2, np.nan, 0], index=["b", "c", "d", "a"])
122-
tm.assert_series_equal(result, expected)
123-
124-
def test_constructor_subclass_dict(self, dict_subclass):
125-
data = dict_subclass((x, 10.0 * x) for x in range(10))
126-
series = Series(data)
127-
expected = Series(dict(data.items()))
128-
tm.assert_series_equal(series, expected)
129-
130-
def test_constructor_ordereddict(self):
131-
# GH3283
132-
data = OrderedDict((f"col{i}", np.random.random()) for i in range(12))
133-
134-
series = Series(data)
135-
expected = Series(list(data.values()), list(data.keys()))
136-
tm.assert_series_equal(series, expected)
137-
138-
# Test with subclass
139-
class A(OrderedDict):
140-
pass
141-
142-
series = Series(A(data))
143-
tm.assert_series_equal(series, expected)
144-
145-
def test_constructor_dict_multiindex(self):
146-
d = {("a", "a"): 0.0, ("b", "a"): 1.0, ("b", "c"): 2.0}
147-
_d = sorted(d.items())
148-
result = Series(d)
149-
expected = Series(
150-
[x[1] for x in _d], index=pd.MultiIndex.from_tuples([x[0] for x in _d])
151-
)
152-
tm.assert_series_equal(result, expected)
153-
154-
d["z"] = 111.0
155-
_d.insert(0, ("z", d["z"]))
156-
result = Series(d)
157-
expected = Series(
158-
[x[1] for x in _d], index=Index([x[0] for x in _d], tupleize_cols=False)
159-
)
160-
result = result.reindex(index=expected.index)
161-
tm.assert_series_equal(result, expected)
162-
163-
def test_constructor_dict_timedelta_index(self):
164-
# GH #12169 : Resample category data with timedelta index
165-
# construct Series from dict as data and TimedeltaIndex as index
166-
# will result NaN in result Series data
167-
expected = Series(
168-
data=["A", "B", "C"], index=pd.to_timedelta([0, 10, 20], unit="s")
169-
)
170-
171-
result = Series(
172-
data={
173-
pd.to_timedelta(0, unit="s"): "A",
174-
pd.to_timedelta(10, unit="s"): "B",
175-
pd.to_timedelta(20, unit="s"): "C",
176-
},
177-
index=pd.to_timedelta([0, 10, 20], unit="s"),
178-
)
179-
tm.assert_series_equal(result, expected)
180-
18158
def test_sparse_accessor_updates_on_inplace(self):
18259
s = Series([1, 1, 2, 3], dtype="Sparse[int]")
18360
return_value = s.drop([0, 1], inplace=True)
@@ -324,55 +201,6 @@ def test_raise_on_info(self):
324201
with pytest.raises(AttributeError, match=msg):
325202
s.info()
326203

327-
def test_copy(self):
328-
329-
for deep in [None, False, True]:
330-
s = Series(np.arange(10), dtype="float64")
331-
332-
# default deep is True
333-
if deep is None:
334-
s2 = s.copy()
335-
else:
336-
s2 = s.copy(deep=deep)
337-
338-
s2[::2] = np.NaN
339-
340-
if deep is None or deep is True:
341-
# Did not modify original Series
342-
assert np.isnan(s2[0])
343-
assert not np.isnan(s[0])
344-
else:
345-
# we DID modify the original Series
346-
assert np.isnan(s2[0])
347-
assert np.isnan(s[0])
348-
349-
def test_copy_tzaware(self):
350-
# GH#11794
351-
# copy of tz-aware
352-
expected = Series([Timestamp("2012/01/01", tz="UTC")])
353-
expected2 = Series([Timestamp("1999/01/01", tz="UTC")])
354-
355-
for deep in [None, False, True]:
356-
357-
s = Series([Timestamp("2012/01/01", tz="UTC")])
358-
359-
if deep is None:
360-
s2 = s.copy()
361-
else:
362-
s2 = s.copy(deep=deep)
363-
364-
s2[0] = pd.Timestamp("1999/01/01", tz="UTC")
365-
366-
# default deep is True
367-
if deep is None or deep is True:
368-
# Did not modify original Series
369-
tm.assert_series_equal(s2, expected2)
370-
tm.assert_series_equal(s, expected)
371-
else:
372-
# we DID modify the original Series
373-
tm.assert_series_equal(s2, expected2)
374-
tm.assert_series_equal(s, expected2)
375-
376204
def test_axis_alias(self):
377205
s = Series([1, 2, np.nan])
378206
tm.assert_series_equal(s.dropna(axis="rows"), s.dropna(axis="index"))

pandas/tests/series/test_arithmetic.py

+38
Original file line numberDiff line numberDiff line change
@@ -741,3 +741,41 @@ def test_series_ops_name_retention(flex, box, names, all_binary_operators):
741741
assert result.name == names[2]
742742
else:
743743
assert result.name == names[0]
744+
745+
746+
class TestNamePreservation:
747+
def test_binop_maybe_preserve_name(self, datetime_series):
748+
# names match, preserve
749+
result = datetime_series * datetime_series
750+
assert result.name == datetime_series.name
751+
result = datetime_series.mul(datetime_series)
752+
assert result.name == datetime_series.name
753+
754+
result = datetime_series * datetime_series[:-2]
755+
assert result.name == datetime_series.name
756+
757+
# names don't match, don't preserve
758+
cp = datetime_series.copy()
759+
cp.name = "something else"
760+
result = datetime_series + cp
761+
assert result.name is None
762+
result = datetime_series.add(cp)
763+
assert result.name is None
764+
765+
ops = ["add", "sub", "mul", "div", "truediv", "floordiv", "mod", "pow"]
766+
ops = ops + ["r" + op for op in ops]
767+
for op in ops:
768+
# names match, preserve
769+
ser = datetime_series.copy()
770+
result = getattr(ser, op)(ser)
771+
assert result.name == datetime_series.name
772+
773+
# names don't match, don't preserve
774+
cp = datetime_series.copy()
775+
cp.name = "changed"
776+
result = getattr(ser, op)(cp)
777+
assert result.name is None
778+
779+
def test_scalarop_preserve_name(self, datetime_series):
780+
result = datetime_series * 2
781+
assert result.name == datetime_series.name

pandas/tests/series/test_constructors.py

+62
Original file line numberDiff line numberDiff line change
@@ -1062,6 +1062,11 @@ def test_constructor_periodindex(self):
10621062

10631063
def test_constructor_dict(self):
10641064
d = {"a": 0.0, "b": 1.0, "c": 2.0}
1065+
1066+
result = Series(d)
1067+
expected = Series(d, index=sorted(d.keys()))
1068+
tm.assert_series_equal(result, expected)
1069+
10651070
result = Series(d, index=["b", "c", "d", "a"])
10661071
expected = Series([1, 2, np.nan, 0], index=["b", "c", "d", "a"])
10671072
tm.assert_series_equal(result, expected)
@@ -1526,6 +1531,63 @@ def test_constructor_list_of_periods_infers_period_dtype(self):
15261531
)
15271532
assert series.dtype == "Period[D]"
15281533

1534+
def test_constructor_subclass_dict(self, dict_subclass):
1535+
data = dict_subclass((x, 10.0 * x) for x in range(10))
1536+
series = Series(data)
1537+
expected = Series(dict(data.items()))
1538+
tm.assert_series_equal(series, expected)
1539+
1540+
def test_constructor_ordereddict(self):
1541+
# GH3283
1542+
data = OrderedDict((f"col{i}", np.random.random()) for i in range(12))
1543+
1544+
series = Series(data)
1545+
expected = Series(list(data.values()), list(data.keys()))
1546+
tm.assert_series_equal(series, expected)
1547+
1548+
# Test with subclass
1549+
class A(OrderedDict):
1550+
pass
1551+
1552+
series = Series(A(data))
1553+
tm.assert_series_equal(series, expected)
1554+
1555+
def test_constructor_dict_multiindex(self):
1556+
d = {("a", "a"): 0.0, ("b", "a"): 1.0, ("b", "c"): 2.0}
1557+
_d = sorted(d.items())
1558+
result = Series(d)
1559+
expected = Series(
1560+
[x[1] for x in _d], index=pd.MultiIndex.from_tuples([x[0] for x in _d])
1561+
)
1562+
tm.assert_series_equal(result, expected)
1563+
1564+
d["z"] = 111.0
1565+
_d.insert(0, ("z", d["z"]))
1566+
result = Series(d)
1567+
expected = Series(
1568+
[x[1] for x in _d], index=Index([x[0] for x in _d], tupleize_cols=False)
1569+
)
1570+
result = result.reindex(index=expected.index)
1571+
tm.assert_series_equal(result, expected)
1572+
1573+
def test_constructor_dict_timedelta_index(self):
1574+
# GH #12169 : Resample category data with timedelta index
1575+
# construct Series from dict as data and TimedeltaIndex as index
1576+
# will result NaN in result Series data
1577+
expected = Series(
1578+
data=["A", "B", "C"], index=pd.to_timedelta([0, 10, 20], unit="s")
1579+
)
1580+
1581+
result = Series(
1582+
data={
1583+
pd.to_timedelta(0, unit="s"): "A",
1584+
pd.to_timedelta(10, unit="s"): "B",
1585+
pd.to_timedelta(20, unit="s"): "C",
1586+
},
1587+
index=pd.to_timedelta([0, 10, 20], unit="s"),
1588+
)
1589+
tm.assert_series_equal(result, expected)
1590+
15291591

15301592
class TestSeriesConstructorIndexCoercion:
15311593
def test_series_constructor_datetimelike_index_coercion(self):

0 commit comments

Comments
 (0)