Skip to content

Remove unused fastpath kwarg from Blocks #19265

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
merged 7 commits into from
Jan 19, 2018
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
109 changes: 50 additions & 59 deletions pandas/core/internals.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ class Block(PandasObject):
_holder = None
_concatenator = staticmethod(np.concatenate)

def __init__(self, values, placement, ndim=None, fastpath=False):
def __init__(self, values, placement, ndim=None):
if ndim is None:
ndim = values.ndim
elif values.ndim != ndim:
Expand Down Expand Up @@ -204,7 +204,7 @@ def array_dtype(self):
"""
return self.dtype

def make_block(self, values, placement=None, ndim=None, **kwargs):
def make_block(self, values, placement=None, ndim=None):
"""
Create a new block, with type inference propagate any values that are
not specified
Expand All @@ -214,21 +214,20 @@ def make_block(self, values, placement=None, ndim=None, **kwargs):
if ndim is None:
ndim = self.ndim

return make_block(values, placement=placement, ndim=ndim, **kwargs)
return make_block(values, placement=placement, ndim=ndim)

def make_block_scalar(self, values, **kwargs):
def make_block_scalar(self, values):
"""
Create a ScalarBlock
"""
return ScalarBlock(values)

def make_block_same_class(self, values, placement=None, fastpath=True,
**kwargs):
def make_block_same_class(self, values, placement=None, ndim=None):
""" Wrap given values in a block of same type as self. """
if placement is None:
placement = self.mgr_locs
return make_block(values, placement=placement, klass=self.__class__,
fastpath=fastpath, **kwargs)
return make_block(values, placement=placement, ndim=ndim,
klass=self.__class__)

def __unicode__(self):

Expand Down Expand Up @@ -339,7 +338,7 @@ def reindex_axis(self, indexer, method=None, axis=1, fill_value=None,

new_values = algos.take_nd(self.values, indexer, axis,
fill_value=fill_value, mask_info=mask_info)
return self.make_block(new_values, fastpath=True)
return self.make_block(new_values)

def iget(self, i):
return self.values[i]
Expand Down Expand Up @@ -458,7 +457,7 @@ def make_a_block(nv, ref_loc):
except (AttributeError, NotImplementedError):
pass
block = self.make_block(values=nv,
placement=ref_loc, fastpath=True)
placement=ref_loc)
return block

# ndim == 1
Expand Down Expand Up @@ -517,7 +516,7 @@ def downcast(self, dtypes=None, mgr=None):
dtypes = 'infer'

nv = maybe_downcast_to_dtype(values, dtypes)
return self.make_block(nv, fastpath=True)
return self.make_block(nv)

# ndim > 1
if dtypes is None:
Expand Down Expand Up @@ -908,7 +907,7 @@ def _is_empty_indexer(indexer):

# coerce and try to infer the dtypes of the result
values = self._try_coerce_and_cast_result(values, dtype)
block = self.make_block(transf(values), fastpath=True)
block = self.make_block(transf(values))
return block

def putmask(self, mask, new, align=True, inplace=False, axis=0,
Expand Down Expand Up @@ -1024,7 +1023,7 @@ def f(m, v, i):
if transpose:
new_values = new_values.T

return [self.make_block(new_values, fastpath=True)]
return [self.make_block(new_values)]

def coerce_to_target_dtype(self, other):
"""
Expand Down Expand Up @@ -1159,7 +1158,7 @@ def _interpolate_with_fill(self, method='pad', axis=0, inplace=False,
dtype=self.dtype)
values = self._try_coerce_result(values)

blocks = [self.make_block(values, klass=self.__class__, fastpath=True)]
blocks = [self.make_block_same_class(values, ndim=self.ndim)]
return self._maybe_downcast(blocks, downcast)

def _interpolate(self, method=None, index=None, values=None,
Expand Down Expand Up @@ -1199,8 +1198,7 @@ def func(x):
# interp each column independently
interp_values = np.apply_along_axis(func, axis, data)

blocks = [self.make_block(interp_values, klass=self.__class__,
fastpath=True)]
blocks = [self.make_block_same_class(interp_values)]
return self._maybe_downcast(blocks, downcast)

def take_nd(self, indexer, axis, new_mgr_locs=None, fill_tuple=None):
Expand Down Expand Up @@ -1244,7 +1242,7 @@ def take_nd(self, indexer, axis, new_mgr_locs=None, fill_tuple=None):
def diff(self, n, axis=1, mgr=None):
""" return block for the diff of the values """
new_values = algos.diff(self.values, n, axis=axis)
return [self.make_block(values=new_values, fastpath=True)]
return [self.make_block(values=new_values)]

def shift(self, periods, axis=0, mgr=None):
""" shift the block by periods, possibly upcast """
Expand Down Expand Up @@ -1274,7 +1272,7 @@ def shift(self, periods, axis=0, mgr=None):
if f_ordered:
new_values = new_values.T

return [self.make_block(new_values, fastpath=True)]
return [self.make_block(new_values)]

def eval(self, func, other, errors='raise', try_cast=False, mgr=None):
"""
Expand Down Expand Up @@ -1414,7 +1412,7 @@ def handle_error():
result = self._try_cast_result(result)

result = _block_shape(result, ndim=self.ndim)
return [self.make_block(result, fastpath=True, )]
return [self.make_block(result)]

def where(self, other, cond, align=True, errors='raise',
try_cast=False, axis=0, transpose=False, mgr=None):
Expand Down Expand Up @@ -1694,7 +1692,7 @@ class NonConsolidatableMixIn(object):
_validate_ndim = False
_holder = None

def __init__(self, values, placement, ndim=None, fastpath=False, **kwargs):
def __init__(self, values, placement, ndim=None):

# Placement must be converted to BlockPlacement via property setter
# before ndim logic, because placement may be a slice which doesn't
Expand Down Expand Up @@ -1951,12 +1949,12 @@ class TimeDeltaBlock(DatetimeLikeBlockMixin, IntBlock):
_can_hold_na = True
is_numeric = False

def __init__(self, values, placement, fastpath=False, **kwargs):
def __init__(self, values, placement, ndim=None):
if values.dtype != _TD_DTYPE:
values = conversion.ensure_timedelta64ns(values)

super(TimeDeltaBlock, self).__init__(values, fastpath=True,
placement=placement, **kwargs)
super(TimeDeltaBlock, self).__init__(values,
placement=placement, ndim=ndim)

@property
def _box_func(self):
Expand Down Expand Up @@ -2089,13 +2087,12 @@ class ObjectBlock(Block):
is_object = True
_can_hold_na = True

def __init__(self, values, ndim=2, fastpath=False, placement=None,
**kwargs):
def __init__(self, values, placement=None, ndim=2):
if issubclass(values.dtype.type, compat.string_types):
values = np.array(values, dtype=object)

super(ObjectBlock, self).__init__(values, ndim=ndim, fastpath=fastpath,
placement=placement, **kwargs)
super(ObjectBlock, self).__init__(values, ndim=ndim,
placement=placement)

@property
def is_bool(self):
Expand Down Expand Up @@ -2342,12 +2339,11 @@ class CategoricalBlock(NonConsolidatableMixIn, ObjectBlock):
_holder = Categorical
_concatenator = staticmethod(_concat._concat_categorical)

def __init__(self, values, placement, fastpath=False, **kwargs):
def __init__(self, values, placement, ndim=None):

# coerce to categorical if we can
super(CategoricalBlock, self).__init__(_maybe_to_categorical(values),
fastpath=True,
placement=placement, **kwargs)
placement=placement, ndim=ndim)

@property
def is_view(self):
Expand Down Expand Up @@ -2464,12 +2460,12 @@ class DatetimeBlock(DatetimeLikeBlockMixin, Block):
is_datetime = True
_can_hold_na = True

def __init__(self, values, placement, fastpath=False, **kwargs):
def __init__(self, values, placement, ndim=None):
if values.dtype != _NS_DTYPE:
values = conversion.ensure_datetime64ns(values)

super(DatetimeBlock, self).__init__(values, fastpath=True,
placement=placement, **kwargs)
super(DatetimeBlock, self).__init__(values,
placement=placement, ndim=ndim)

def _astype(self, dtype, mgr=None, **kwargs):
"""
Expand Down Expand Up @@ -2600,13 +2596,11 @@ class DatetimeTZBlock(NonConsolidatableMixIn, DatetimeBlock):
_concatenator = staticmethod(_concat._concat_datetime)
is_datetimetz = True

def __init__(self, values, placement, ndim=2, **kwargs):
def __init__(self, values, placement, ndim=2, dtype=None):

if not isinstance(values, self._holder):
values = self._holder(values)

dtype = kwargs.pop('dtype', None)

if dtype is not None:
if isinstance(dtype, compat.string_types):
dtype = DatetimeTZDtype.construct_from_string(dtype)
Expand All @@ -2616,7 +2610,7 @@ def __init__(self, values, placement, ndim=2, **kwargs):
raise ValueError("cannot create a DatetimeTZBlock without a tz")

super(DatetimeTZBlock, self).__init__(values, placement=placement,
ndim=ndim, **kwargs)
ndim=ndim)

def copy(self, deep=True, mgr=None):
""" copy constructor """
Expand Down Expand Up @@ -2822,7 +2816,7 @@ def copy(self, deep=True, mgr=None):

def make_block_same_class(self, values, placement, sparse_index=None,
kind=None, dtype=None, fill_value=None,
copy=False, fastpath=True, **kwargs):
copy=False, ndim=None):
""" return a new block """
if dtype is None:
dtype = values.dtype
Expand All @@ -2841,8 +2835,7 @@ def make_block_same_class(self, values, placement, sparse_index=None,
# won't take space since there's 0 items, plus it will preserve
# the dtype.
return self.make_block(np.empty(values.shape, dtype=dtype),
placement,
fastpath=True)
placement)
elif nitems > 1:
raise ValueError("Only 1-item 2d sparse blocks are supported")
else:
Expand All @@ -2851,7 +2844,7 @@ def make_block_same_class(self, values, placement, sparse_index=None,
new_values = SparseArray(values, sparse_index=sparse_index,
kind=kind or self.kind, dtype=dtype,
fill_value=fill_value, copy=copy)
return self.make_block(new_values, fastpath=fastpath,
return self.make_block(new_values,
placement=placement)

def interpolate(self, method='pad', axis=0, inplace=False, limit=None,
Expand Down Expand Up @@ -2960,16 +2953,20 @@ def get_block_type(values, dtype=None):


def make_block(values, placement, klass=None, ndim=None, dtype=None,
fastpath=False):
fastpath=None):
if fastpath is not None:
# GH#19265 pyarrow is passing this
warnings.warn("fastpath argument is deprecated, will be removed "
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this needs a test

"in a future release.", DeprecationWarning)
if klass is None:
dtype = dtype or values.dtype
klass = get_block_type(values, dtype)

elif klass is DatetimeTZBlock and not is_datetimetz(values):
return klass(values, ndim=ndim, fastpath=fastpath,
return klass(values, ndim=ndim,
placement=placement, dtype=dtype)

return klass(values, ndim=ndim, fastpath=fastpath, placement=placement)
return klass(values, ndim=ndim, placement=placement)

# TODO: flexible with index=None and/or items=None

Expand Down Expand Up @@ -3029,7 +3026,7 @@ class BlockManager(PandasObject):
__slots__ = ['axes', 'blocks', '_ndim', '_shape', '_known_consolidated',
'_is_consolidated', '_blknos', '_blklocs']

def __init__(self, blocks, axes, do_integrity_check=True, fastpath=True):
def __init__(self, blocks, axes, do_integrity_check=True):
self.axes = [_ensure_index(ax) for ax in axes]
self.blocks = tuple(blocks)

Expand Down Expand Up @@ -3640,8 +3637,7 @@ def get_slice(self, slobj, axis=0):
new_axes = list(self.axes)
new_axes[axis] = new_axes[axis][slobj]

bm = self.__class__(new_blocks, new_axes, do_integrity_check=False,
fastpath=True)
bm = self.__class__(new_blocks, new_axes, do_integrity_check=False)
bm._consolidate_inplace()
return bm

Expand Down Expand Up @@ -3796,7 +3792,7 @@ def xs(self, key, axis=1, copy=True, takeable=False):
# we must copy here as we are mixed type
for blk in self.blocks:
newb = make_block(values=blk.values[slicer],
klass=blk.__class__, fastpath=True,
klass=blk.__class__,
placement=blk.mgr_locs)
new_blocks.append(newb)
elif len(self.blocks) == 1:
Expand All @@ -3806,8 +3802,7 @@ def xs(self, key, axis=1, copy=True, takeable=False):
vals = vals.copy()
new_blocks = [make_block(values=vals,
placement=block.mgr_locs,
klass=block.__class__,
fastpath=True, )]
klass=block.__class__)]

return self.__class__(new_blocks, new_axes)

Expand Down Expand Up @@ -3910,7 +3905,7 @@ def iget(self, i, fastpath=True):
return SingleBlockManager(
[block.make_block_same_class(values,
placement=slice(0, len(values)),
ndim=1, fastpath=True)],
ndim=1)],
self.axes[1])

def get_scalar(self, tup):
Expand Down Expand Up @@ -4432,8 +4427,7 @@ def __init__(self, block, axis, do_integrity_check=False, fastpath=False):
block = block[0]

if not isinstance(block, Block):
block = make_block(block, placement=slice(0, len(axis)), ndim=1,
fastpath=True)
block = make_block(block, placement=slice(0, len(axis)), ndim=1)

self.blocks = [block]

Expand Down Expand Up @@ -4725,7 +4719,6 @@ def form_blocks(arrays, names, axes):
if len(items_dict['DatetimeTZBlock']):
dttz_blocks = [make_block(array,
klass=DatetimeTZBlock,
fastpath=True,
placement=[i])
for i, _, array in items_dict['DatetimeTZBlock']]
blocks.extend(dttz_blocks)
Expand All @@ -4743,8 +4736,7 @@ def form_blocks(arrays, names, axes):
blocks.extend(sparse_blocks)

if len(items_dict['CategoricalBlock']) > 0:
cat_blocks = [make_block(array, klass=CategoricalBlock, fastpath=True,
placement=[i])
cat_blocks = [make_block(array, klass=CategoricalBlock, placement=[i])
for i, _, array in items_dict['CategoricalBlock']]
blocks.extend(cat_blocks)

Expand Down Expand Up @@ -4800,8 +4792,7 @@ def _sparse_blockify(tuples, dtype=None):
new_blocks = []
for i, names, array in tuples:
array = _maybe_to_sparse(array)
block = make_block(array, klass=SparseBlock, fastpath=True,
placement=[i])
block = make_block(array, klass=SparseBlock, placement=[i])
new_blocks.append(block)

return new_blocks
Expand Down Expand Up @@ -4885,7 +4876,7 @@ def _merge_blocks(blocks, dtype=None, _can_consolidate=True):
new_values = new_values[argsort]
new_mgr_locs = new_mgr_locs[argsort]

return make_block(new_values, fastpath=True, placement=new_mgr_locs)
return make_block(new_values, placement=new_mgr_locs)

# no merge
return blocks
Expand Down
8 changes: 8 additions & 0 deletions pandas/tests/internals/test_internals.py
Original file line number Diff line number Diff line change
Expand Up @@ -1254,3 +1254,11 @@ def test_binop_other(self, op, value, dtype):
result = op(s, e).dtypes
expected = op(s, value).dtypes
assert_series_equal(result, expected)


def test_deprecated_fastpath():
# GH#19265
values = np.random.rand(3, 3)
with tm.assert_produces_warning(DeprecationWarning,
check_stacklevel=False):
make_block(values, placement=np.arange(3), fastpath=True)