Skip to content

TST: correct constructor in extension array tests #20746

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions pandas/core/arrays/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class ExtensionArray(object):
The interface includes the following abstract methods that must be
implemented by subclasses:

* _constructor_from_sequence
* _from_sequence
* _from_factorized
* __getitem__
* __len__
Expand Down Expand Up @@ -78,7 +78,7 @@ class ExtensionArray(object):
# Constructors
# ------------------------------------------------------------------------
@classmethod
def _constructor_from_sequence(cls, scalars):
def _from_sequence(cls, scalars):
"""Construct a new ExtensionArray from a sequence of scalars.

Parameters
Expand Down Expand Up @@ -365,7 +365,7 @@ def fillna(self, value=None, method=None, limit=None):
func = pad_1d if method == 'pad' else backfill_1d
new_values = func(self.astype(object), limit=limit,
mask=mask)
new_values = self._constructor_from_sequence(new_values)
new_values = self._from_sequence(new_values)
else:
# fill with value
new_values = self.copy()
Expand All @@ -384,7 +384,7 @@ def unique(self):
from pandas import unique

uniques = unique(self.astype(object))
return self._constructor_from_sequence(uniques)
return self._from_sequence(uniques)

def _values_for_factorize(self):
# type: () -> Tuple[ndarray, Any]
Expand Down
2 changes: 1 addition & 1 deletion pandas/core/arrays/categorical.py
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ def _constructor(self):
return Categorical

@classmethod
def _constructor_from_sequence(cls, scalars):
def _from_sequence(cls, scalars):
return Categorical(scalars)

def copy(self):
Expand Down
2 changes: 1 addition & 1 deletion pandas/tests/extension/base/constructors.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class BaseConstructorsTests(BaseExtensionTests):

def test_array_from_scalars(self, data):
scalars = [data[0], data[1], data[2]]
result = data._constructor_from_sequence(scalars)
result = data._from_sequence(scalars)
assert isinstance(result, type(data))

def test_series_constructor(self, data):
Expand Down
9 changes: 4 additions & 5 deletions pandas/tests/extension/base/getitem.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ def test_take_series(self, data):
s = pd.Series(data)
result = s.take([0, -1])
expected = pd.Series(
data._constructor_from_sequence([data[0], data[len(data) - 1]]),
data._from_sequence([data[0], data[len(data) - 1]]),
index=[0, len(data) - 1])
self.assert_series_equal(result, expected)

Expand All @@ -158,12 +158,11 @@ def test_reindex(self, data, na_value):
n = len(data)
result = s.reindex([-1, 0, n])
expected = pd.Series(
data._constructor_from_sequence([na_value, data[0], na_value]),
data._from_sequence([na_value, data[0], na_value]),
index=[-1, 0, n])
self.assert_series_equal(result, expected)

result = s.reindex([n, n + 1])
expected = pd.Series(
data._constructor_from_sequence([na_value, na_value]),
index=[n, n + 1])
expected = pd.Series(data._from_sequence([na_value, na_value]),
index=[n, n + 1])
self.assert_series_equal(result, expected)
2 changes: 1 addition & 1 deletion pandas/tests/extension/base/methods.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ def test_sort_values_frame(self, data_for_sorting, ascending):
@pytest.mark.parametrize('box', [pd.Series, lambda x: x])
@pytest.mark.parametrize('method', [lambda x: x.unique(), pd.unique])
def test_unique(self, data, box, method):
duplicated = box(data._constructor_from_sequence([data[0], data[0]]))
duplicated = box(data._from_sequence([data[0], data[0]]))

result = method(duplicated)

Expand Down
8 changes: 5 additions & 3 deletions pandas/tests/extension/base/missing.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ def test_fillna_series(self, data_missing):
ser = pd.Series(data_missing)

result = ser.fillna(fill_value)
expected = pd.Series(type(data_missing)([fill_value, fill_value]))
expected = pd.Series(
data_missing._from_sequence([fill_value, fill_value]))
self.assert_series_equal(result, expected)

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

result = pd.Series(data_missing).fillna(method=method)
expected = pd.Series(type(data_missing)([fill_value, fill_value]))
expected = pd.Series(
data_missing._from_sequence([fill_value, fill_value]))

self.assert_series_equal(result, expected)

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

expected = pd.DataFrame({
"A": type(data_missing)([fill_value, fill_value]),
"A": data_missing._from_sequence([fill_value, fill_value]),
"B": [1, 2],
})

Expand Down
18 changes: 8 additions & 10 deletions pandas/tests/extension/base/reshaping.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ def test_align(self, data, na_value):
r1, r2 = pd.Series(a).align(pd.Series(b, index=[1, 2, 3]))

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

Expand All @@ -60,8 +60,8 @@ def test_align_frame(self, data, na_value):
)

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

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

e1 = pd.Series(
data._constructor_from_sequence(list(data) + [na_value]),
name=ser.name)
e1 = pd.Series(data._from_sequence(list(data) + [na_value]),
name=ser.name)

self.assert_series_equal(r1, e1)
self.assert_frame_equal(r2, df)
Expand Down Expand Up @@ -105,14 +104,13 @@ def test_merge(self, data, na_value):
res = pd.merge(df1, df2)
exp = pd.DataFrame(
{'int1': [1, 1, 2], 'int2': [1, 2, 3], 'key': [0, 0, 1],
'ext': data._constructor_from_sequence(
[data[0], data[0], data[1]])})
'ext': data._from_sequence([data[0], data[0], data[1]])})
self.assert_frame_equal(res, exp[['ext', 'int1', 'key', 'int2']])

res = pd.merge(df1, df2, how='outer')
exp = pd.DataFrame(
{'int1': [1, 1, 2, 3, np.nan], 'int2': [1, 2, 3, np.nan, 4],
'key': [0, 0, 1, 2, 3],
'ext': data._constructor_from_sequence(
'ext': data._from_sequence(
[data[0], data[0], data[1], data[2], na_value])})
self.assert_frame_equal(res, exp[['ext', 'int1', 'key', 'int2']])
2 changes: 1 addition & 1 deletion pandas/tests/extension/base/setitem.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def test_setitem_sequence_mismatched_length_raises(self, data, as_array):
ser = pd.Series(data)
value = [data[0]]
if as_array:
value = type(data)(value)
value = data._from_sequence(value)

xpr = 'cannot set using a {} indexer with a different length'
with tm.assert_raises_regex(ValueError, xpr.format('list-like')):
Expand Down
2 changes: 1 addition & 1 deletion pandas/tests/extension/decimal/array.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def __init__(self, values):
self._items = self._data = self.data = self.values

@classmethod
def _constructor_from_sequence(cls, scalars):
def _from_sequence(cls, scalars):
return cls(scalars)

@classmethod
Expand Down
8 changes: 3 additions & 5 deletions pandas/tests/extension/json/array.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def __init__(self, values):
self.data = values

@classmethod
def _constructor_from_sequence(cls, scalars):
def _from_sequence(cls, scalars):
return cls(scalars)

@classmethod
Expand All @@ -45,9 +45,7 @@ def __getitem__(self, item):
if isinstance(item, numbers.Integral):
return self.data[item]
elif isinstance(item, np.ndarray) and item.dtype == 'bool':
return self._constructor_from_sequence([
x for x, m in zip(self, item) if m
])
return self._from_sequence([x for x, m in zip(self, item) if m])
elif isinstance(item, collections.Iterable):
# fancy indexing
return type(self)([self.data[i] for i in item])
Expand Down Expand Up @@ -95,7 +93,7 @@ def take(self, indexer, allow_fill=True, fill_value=None):
except IndexError:
raise IndexError("Index is out of bounds or cannot do a "
"non-empty take from an empty array.")
return self._constructor_from_sequence(output)
return self._from_sequence(output)

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