Skip to content

Commit 31e77b0

Browse files
TST: correct constructor in extension array tests + rename to _from_sequence (#20746)
1 parent a80c783 commit 31e77b0

File tree

10 files changed

+29
-32
lines changed

10 files changed

+29
-32
lines changed

pandas/core/arrays/base.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ExtensionArray(object):
2727
The interface includes the following abstract methods that must be
2828
implemented by subclasses:
2929
30-
* _constructor_from_sequence
30+
* _from_sequence
3131
* _from_factorized
3232
* __getitem__
3333
* __len__
@@ -78,7 +78,7 @@ class ExtensionArray(object):
7878
# Constructors
7979
# ------------------------------------------------------------------------
8080
@classmethod
81-
def _constructor_from_sequence(cls, scalars):
81+
def _from_sequence(cls, scalars):
8282
"""Construct a new ExtensionArray from a sequence of scalars.
8383
8484
Parameters
@@ -365,7 +365,7 @@ def fillna(self, value=None, method=None, limit=None):
365365
func = pad_1d if method == 'pad' else backfill_1d
366366
new_values = func(self.astype(object), limit=limit,
367367
mask=mask)
368-
new_values = self._constructor_from_sequence(new_values)
368+
new_values = self._from_sequence(new_values)
369369
else:
370370
# fill with value
371371
new_values = self.copy()
@@ -384,7 +384,7 @@ def unique(self):
384384
from pandas import unique
385385

386386
uniques = unique(self.astype(object))
387-
return self._constructor_from_sequence(uniques)
387+
return self._from_sequence(uniques)
388388

389389
def _values_for_factorize(self):
390390
# type: () -> Tuple[ndarray, Any]

pandas/core/arrays/categorical.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ def _constructor(self):
422422
return Categorical
423423

424424
@classmethod
425-
def _constructor_from_sequence(cls, scalars):
425+
def _from_sequence(cls, scalars):
426426
return Categorical(scalars)
427427

428428
def copy(self):

pandas/tests/extension/base/constructors.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class BaseConstructorsTests(BaseExtensionTests):
1111

1212
def test_array_from_scalars(self, data):
1313
scalars = [data[0], data[1], data[2]]
14-
result = data._constructor_from_sequence(scalars)
14+
result = data._from_sequence(scalars)
1515
assert isinstance(result, type(data))
1616

1717
def test_series_constructor(self, data):

pandas/tests/extension/base/getitem.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ def test_take_series(self, data):
145145
s = pd.Series(data)
146146
result = s.take([0, -1])
147147
expected = pd.Series(
148-
data._constructor_from_sequence([data[0], data[len(data) - 1]]),
148+
data._from_sequence([data[0], data[len(data) - 1]]),
149149
index=[0, len(data) - 1])
150150
self.assert_series_equal(result, expected)
151151

@@ -158,12 +158,11 @@ def test_reindex(self, data, na_value):
158158
n = len(data)
159159
result = s.reindex([-1, 0, n])
160160
expected = pd.Series(
161-
data._constructor_from_sequence([na_value, data[0], na_value]),
161+
data._from_sequence([na_value, data[0], na_value]),
162162
index=[-1, 0, n])
163163
self.assert_series_equal(result, expected)
164164

165165
result = s.reindex([n, n + 1])
166-
expected = pd.Series(
167-
data._constructor_from_sequence([na_value, na_value]),
168-
index=[n, n + 1])
166+
expected = pd.Series(data._from_sequence([na_value, na_value]),
167+
index=[n, n + 1])
169168
self.assert_series_equal(result, expected)

pandas/tests/extension/base/methods.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def test_sort_values_frame(self, data_for_sorting, ascending):
7676
@pytest.mark.parametrize('box', [pd.Series, lambda x: x])
7777
@pytest.mark.parametrize('method', [lambda x: x.unique(), pd.unique])
7878
def test_unique(self, data, box, method):
79-
duplicated = box(data._constructor_from_sequence([data[0], data[0]]))
79+
duplicated = box(data._from_sequence([data[0], data[0]]))
8080

8181
result = method(duplicated)
8282

pandas/tests/extension/base/missing.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ def test_fillna_series(self, data_missing):
7070
ser = pd.Series(data_missing)
7171

7272
result = ser.fillna(fill_value)
73-
expected = pd.Series(type(data_missing)([fill_value, fill_value]))
73+
expected = pd.Series(
74+
data_missing._from_sequence([fill_value, fill_value]))
7475
self.assert_series_equal(result, expected)
7576

7677
# Fill with a series
@@ -89,7 +90,8 @@ def test_fillna_series_method(self, data_missing, method):
8990
data_missing = type(data_missing)(data_missing[::-1])
9091

9192
result = pd.Series(data_missing).fillna(method=method)
92-
expected = pd.Series(type(data_missing)([fill_value, fill_value]))
93+
expected = pd.Series(
94+
data_missing._from_sequence([fill_value, fill_value]))
9395

9496
self.assert_series_equal(result, expected)
9597

@@ -102,7 +104,7 @@ def test_fillna_frame(self, data_missing):
102104
}).fillna(fill_value)
103105

104106
expected = pd.DataFrame({
105-
"A": type(data_missing)([fill_value, fill_value]),
107+
"A": data_missing._from_sequence([fill_value, fill_value]),
106108
"B": [1, 2],
107109
})
108110

pandas/tests/extension/base/reshaping.py

+8-10
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ def test_align(self, data, na_value):
4747
r1, r2 = pd.Series(a).align(pd.Series(b, index=[1, 2, 3]))
4848

4949
# Assumes that the ctor can take a list of scalars of the type
50-
e1 = pd.Series(type(data)(list(a) + [na_value]))
51-
e2 = pd.Series(type(data)([na_value] + list(b)))
50+
e1 = pd.Series(data._from_sequence(list(a) + [na_value]))
51+
e2 = pd.Series(data._from_sequence([na_value] + list(b)))
5252
self.assert_series_equal(r1, e1)
5353
self.assert_series_equal(r2, e2)
5454

@@ -60,8 +60,8 @@ def test_align_frame(self, data, na_value):
6060
)
6161

6262
# Assumes that the ctor can take a list of scalars of the type
63-
e1 = pd.DataFrame({'A': type(data)(list(a) + [na_value])})
64-
e2 = pd.DataFrame({'A': type(data)([na_value] + list(b))})
63+
e1 = pd.DataFrame({'A': data._from_sequence(list(a) + [na_value])})
64+
e2 = pd.DataFrame({'A': data._from_sequence([na_value] + list(b))})
6565
self.assert_frame_equal(r1, e1)
6666
self.assert_frame_equal(r2, e2)
6767

@@ -71,9 +71,8 @@ def test_align_series_frame(self, data, na_value):
7171
df = pd.DataFrame({"col": np.arange(len(ser) + 1)})
7272
r1, r2 = ser.align(df)
7373

74-
e1 = pd.Series(
75-
data._constructor_from_sequence(list(data) + [na_value]),
76-
name=ser.name)
74+
e1 = pd.Series(data._from_sequence(list(data) + [na_value]),
75+
name=ser.name)
7776

7877
self.assert_series_equal(r1, e1)
7978
self.assert_frame_equal(r2, df)
@@ -105,14 +104,13 @@ def test_merge(self, data, na_value):
105104
res = pd.merge(df1, df2)
106105
exp = pd.DataFrame(
107106
{'int1': [1, 1, 2], 'int2': [1, 2, 3], 'key': [0, 0, 1],
108-
'ext': data._constructor_from_sequence(
109-
[data[0], data[0], data[1]])})
107+
'ext': data._from_sequence([data[0], data[0], data[1]])})
110108
self.assert_frame_equal(res, exp[['ext', 'int1', 'key', 'int2']])
111109

112110
res = pd.merge(df1, df2, how='outer')
113111
exp = pd.DataFrame(
114112
{'int1': [1, 1, 2, 3, np.nan], 'int2': [1, 2, 3, np.nan, 4],
115113
'key': [0, 0, 1, 2, 3],
116-
'ext': data._constructor_from_sequence(
114+
'ext': data._from_sequence(
117115
[data[0], data[0], data[1], data[2], na_value])})
118116
self.assert_frame_equal(res, exp[['ext', 'int1', 'key', 'int2']])

pandas/tests/extension/base/setitem.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def test_setitem_sequence_mismatched_length_raises(self, data, as_array):
2727
ser = pd.Series(data)
2828
value = [data[0]]
2929
if as_array:
30-
value = type(data)(value)
30+
value = data._from_sequence(value)
3131

3232
xpr = 'cannot set using a {} indexer with a different length'
3333
with tm.assert_raises_regex(ValueError, xpr.format('list-like')):

pandas/tests/extension/decimal/array.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def __init__(self, values):
3636
self._items = self._data = self.data = self.values
3737

3838
@classmethod
39-
def _constructor_from_sequence(cls, scalars):
39+
def _from_sequence(cls, scalars):
4040
return cls(scalars)
4141

4242
@classmethod

pandas/tests/extension/json/array.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def __init__(self, values):
3434
self.data = values
3535

3636
@classmethod
37-
def _constructor_from_sequence(cls, scalars):
37+
def _from_sequence(cls, scalars):
3838
return cls(scalars)
3939

4040
@classmethod
@@ -45,9 +45,7 @@ def __getitem__(self, item):
4545
if isinstance(item, numbers.Integral):
4646
return self.data[item]
4747
elif isinstance(item, np.ndarray) and item.dtype == 'bool':
48-
return self._constructor_from_sequence([
49-
x for x, m in zip(self, item) if m
50-
])
48+
return self._from_sequence([x for x, m in zip(self, item) if m])
5149
elif isinstance(item, collections.Iterable):
5250
# fancy indexing
5351
return type(self)([self.data[i] for i in item])
@@ -95,7 +93,7 @@ def take(self, indexer, allow_fill=True, fill_value=None):
9593
except IndexError:
9694
raise IndexError("Index is out of bounds or cannot do a "
9795
"non-empty take from an empty array.")
98-
return self._constructor_from_sequence(output)
96+
return self._from_sequence(output)
9997

10098
def copy(self, deep=False):
10199
return type(self)(self.data[:])

0 commit comments

Comments
 (0)