From aa19aa4cb8667fe77a83e58f0cf1ae7393cfd362 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Wed, 20 Mar 2019 09:18:09 -0500 Subject: [PATCH 01/15] #25790 Updated type hints to Python3 style in files outside core/arrays/ --- pandas/core/base.py | 6 ++---- pandas/core/common.py | 3 +-- pandas/core/dtypes/base.py | 17 ++++++----------- pandas/core/frame.py | 14 ++++++++------ pandas/core/groupby/groupby.py | 14 ++++++-------- pandas/core/indexes/base.py | 3 +-- pandas/core/indexes/datetimelike.py | 5 ++--- pandas/core/indexes/period.py | 2 +- pandas/core/internals/blocks.py | 12 +++++++----- pandas/core/internals/managers.py | 4 ++-- 10 files changed, 36 insertions(+), 44 deletions(-) diff --git a/pandas/core/base.py b/pandas/core/base.py index ce91c232bb92d..9951e9eacb1c6 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -786,8 +786,7 @@ def base(self): return self.values.base @property - def array(self): - # type: () -> ExtensionArray + def array(self) -> ExtensionArray: """ The ExtensionArray of the data backing this Series or Index. @@ -962,8 +961,7 @@ def to_numpy(self, dtype=None, copy=False): return result @property - def _ndarray_values(self): - # type: () -> np.ndarray + def _ndarray_values(self) -> np.ndarray: """ The data as an ndarray, possibly losing information. diff --git a/pandas/core/common.py b/pandas/core/common.py index 77b7b94e7a1f7..43c9aea0e0a0e 100644 --- a/pandas/core/common.py +++ b/pandas/core/common.py @@ -93,8 +93,7 @@ def maybe_box_datetimelike(value): values_from_object = lib.values_from_object -def is_bool_indexer(key): - # type: (Any) -> bool +def is_bool_indexer(key: Any) -> bool: """ Check whether `key` is a valid boolean indexer. diff --git a/pandas/core/dtypes/base.py b/pandas/core/dtypes/base.py index 8269f8c88ffd3..7b06e20420a98 100644 --- a/pandas/core/dtypes/base.py +++ b/pandas/core/dtypes/base.py @@ -1,5 +1,5 @@ """Extend pandas with custom array types""" -from typing import List, Optional, Type +from typing import List, Optional import numpy as np @@ -65,8 +65,7 @@ def __ne__(self, other): return not self.__eq__(other) @property - def names(self): - # type: () -> Optional[List[str]] + def names(self) -> Optional[List[str]]: """Ordered list of field names, or None if there are no fields. This is for compatibility with NumPy arrays, and may be removed in the @@ -116,8 +115,7 @@ def is_dtype(cls, dtype): return False @property - def _is_numeric(self): - # type: () -> bool + def _is_numeric(self) -> bool: """ Whether columns with this dtype should be considered numeric. @@ -128,8 +126,7 @@ def _is_numeric(self): return False @property - def _is_boolean(self): - # type: () -> bool + def _is_boolean(self) -> bool: """ Whether this dtype should be considered boolean. @@ -212,8 +209,7 @@ def __str__(self): return self.name @property - def type(self): - # type: () -> Type + def type(self) -> bool: """ The scalar type for the array, e.g. ``int`` @@ -242,8 +238,7 @@ def kind(self): return 'O' @property - def name(self): - # type: () -> str + def name(self) -> str: """ A string identifying the data type. diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 75f2ac8cbb7e7..61b0a2651188e 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -19,7 +19,7 @@ import sys import warnings from textwrap import dedent -from typing import List, Union +from typing import List, TypeVar, Union import numpy as np import numpy.ma as ma @@ -284,6 +284,10 @@ Index(['value'], dtype='object') """ + +DF = TypeVar('DF', bound='DataFrame') + + # ----------------------------------------------------------------------- # DataFrame class @@ -6243,11 +6247,9 @@ def diff(self, periods=1, axis=0): # Function application def _gotitem(self, - key, # type: Union[str, List[str]] - ndim, # type: int - subset=None # type: Union[Series, DataFrame, None] - ): - # type: (...) -> Union[Series, DataFrame] + key: Union[str, List[str]], + ndim: int, + subset: Union[Series, DF, None] = None) -> Union[Series, DF]: """ Sub-classes to define. Return a sliced object. diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index 96eafbfae2cdb..c2fad0af19b8f 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -1040,8 +1040,7 @@ def _bool_agg(self, val_test, skipna): Shared func to call any / all Cython GroupBy implementations. """ - def objs_to_bool(vals): - # type: (np.ndarray) -> (np.ndarray, Type) + def objs_to_bool(vals: np.ndarray) -> types.Tuple[np.ndarray, Type]: if is_object_dtype(vals): vals = np.array([bool(x) for x in vals]) else: @@ -1049,8 +1048,7 @@ def objs_to_bool(vals): return vals.view(np.uint8), np.bool - def result_to_bool(result, inference): - # type: (np.ndarray, Type) -> np.ndarray + def result_to_bool(result: np.ndarray, inference: Type) -> np.ndarray: return result.astype(inference, copy=False) return self._get_cythonized_result('group_any_all', self.grouper, @@ -1738,8 +1736,8 @@ def quantile(self, q=0.5, interpolation='linear'): b 3.0 """ - def pre_processor(vals): - # type: (np.ndarray) -> (np.ndarray, Optional[Type]) + def pre_processor(vals: np.ndarray) -> \ + types.Tuple[np.ndarray, Optional[Type]]: if is_object_dtype(vals): raise TypeError("'quantile' cannot be performed against " "'object' dtypes!") @@ -1753,8 +1751,8 @@ def pre_processor(vals): return vals, inference - def post_processor(vals, inference): - # type: (np.ndarray, Optional[Type]) -> np.ndarray + def post_processor(vals: np.ndarray, inference: Optional[Type]) -> \ + np.ndarray: if inference: # Check for edge case if not (is_integer_dtype(inference) and diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index f6d7d27eca598..8788ede970064 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -3632,8 +3632,7 @@ def values(self): return self._data.view(np.ndarray) @property - def _values(self): - # type: () -> Union[ExtensionArray, Index, np.ndarray] + def _values(self) -> Union[ExtensionArray, Index, np.ndarray]: # TODO(EA): remove index types as they become extension arrays """ The best array representation. diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 830f234b85757..4575081f52b71 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -56,7 +56,7 @@ class DatetimeIndexOpsMixin(ExtensionOpsMixin): """ common ops mixin to support a unified interface datetimelike Index """ - _data = None # type: DatetimeLikeArrayMixin + _data: DatetimeLikeArrayMixin = None # DatetimeLikeArrayMixin assumes subclasses are mutable, so these are # properties there. They can be made into cache_readonly for Index @@ -129,8 +129,7 @@ def _ndarray_values(self): # Abstract data attributes @property - def values(self): - # type: () -> np.ndarray + def values(self) -> np.ndarray: # Note: PeriodArray overrides this to return an ndarray of objects. return self._data._data diff --git a/pandas/core/indexes/period.py b/pandas/core/indexes/period.py index a4bd7f9017eb4..ae18f63fe3ba4 100644 --- a/pandas/core/indexes/period.py +++ b/pandas/core/indexes/period.py @@ -170,7 +170,7 @@ class PeriodIndex(DatetimeIndexOpsMixin, Int64Index, PeriodDelegateMixin): _is_numeric_dtype = False _infer_as_myclass = True - _data = None # type: PeriodArray + _data: PeriodArray = None _engine_type = libindex.PeriodEngine diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index a61bc30a126e6..c79cf90a9c447 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -3,7 +3,7 @@ import functools import inspect import re -from typing import Any, List +from typing import Any, List, Optional, TypeVar import warnings import numpy as np @@ -1646,6 +1646,9 @@ def _get_unstack_items(self, unstacker, new_columns): return new_placement, new_values, mask +EB = TypeVar('EB', bound='ExtensionBlock') + + class ExtensionBlock(NonConsolidatableMixIn, Block): """Block for holding extension types. @@ -1828,10 +1831,9 @@ def interpolate(self, method='pad', axis=0, inplace=False, limit=None, placement=self.mgr_locs) def shift(self, - periods, # type: int - axis=0, # type: libinternals.BlockPlacement - fill_value=None): # type: Any - # type: (...) -> List[ExtensionBlock] + periods: int, + axis: libinternals.BlockPlacement = 0, + fill_value: Optional[Any] = None) -> List[EB]: """ Shift the block by `periods`. diff --git a/pandas/core/internals/managers.py b/pandas/core/internals/managers.py index b9d478f3f14eb..06dd0596a6183 100644 --- a/pandas/core/internals/managers.py +++ b/pandas/core/internals/managers.py @@ -1863,8 +1863,8 @@ def _shape_compat(x): return stacked, placement -def _interleaved_dtype(blocks): - # type: (List[Block]) -> Optional[Union[np.dtype, ExtensionDtype]] +def _interleaved_dtype(blocks: List[Block]) \ + -> Optional[Union[np.dtype, ExtensionDtype]]: """Find the common dtype for `blocks`. Parameters From 014c48e9e239deb6cc97d72c42f44cd109c950f9 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Wed, 20 Mar 2019 09:22:19 -0500 Subject: [PATCH 02/15] #25790 Added TypeVar to hint in core/indexes/base.py --- pandas/core/indexes/base.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 8788ede970064..504baff8f379f 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -1,7 +1,7 @@ from datetime import datetime, timedelta import operator from textwrap import dedent -from typing import Union +from typing import TypeVar, Union import warnings import numpy as np @@ -164,6 +164,9 @@ def _new_Index(cls, d): return cls.__new__(cls, **d) +INDEXTYPE = TypeVar('INDEXTYPE', bound='Index') + + class Index(IndexOpsMixin, PandasObject): """ Immutable ndarray implementing an ordered, sliceable set. The basic object @@ -3632,7 +3635,7 @@ def values(self): return self._data.view(np.ndarray) @property - def _values(self) -> Union[ExtensionArray, Index, np.ndarray]: + def _values(self) -> Union[ExtensionArray, INDEXTYPE, np.ndarray]: # TODO(EA): remove index types as they become extension arrays """ The best array representation. From 5e991b6794fd85c5a56c1afed128a0e2c1bcdc86 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Wed, 20 Mar 2019 10:12:15 -0500 Subject: [PATCH 03/15] Fixed reference to types.Tuple that should have been to typing.Tuple --- pandas/core/groupby/groupby.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index c2fad0af19b8f..25bbdd81d0a89 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -12,7 +12,7 @@ class providing the base-class of operations. import datetime from functools import partial, wraps import types -from typing import Optional, Type +from typing import Optional, Type, Tuple import warnings import numpy as np @@ -1040,7 +1040,7 @@ def _bool_agg(self, val_test, skipna): Shared func to call any / all Cython GroupBy implementations. """ - def objs_to_bool(vals: np.ndarray) -> types.Tuple[np.ndarray, Type]: + def objs_to_bool(vals: np.ndarray) -> Tuple[np.ndarray, Type]: if is_object_dtype(vals): vals = np.array([bool(x) for x in vals]) else: @@ -1737,7 +1737,7 @@ def quantile(self, q=0.5, interpolation='linear'): """ def pre_processor(vals: np.ndarray) -> \ - types.Tuple[np.ndarray, Optional[Type]]: + Tuple[np.ndarray, Optional[Type]]: if is_object_dtype(vals): raise TypeError("'quantile' cannot be performed against " "'object' dtypes!") From 0efb21d22aef259972ed7718d32a3a28ec29c2b8 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Wed, 20 Mar 2019 10:43:12 -0500 Subject: [PATCH 04/15] Fixed import sort --- pandas/core/groupby/groupby.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index 25bbdd81d0a89..c5a1a78093b2b 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -12,7 +12,7 @@ class providing the base-class of operations. import datetime from functools import partial, wraps import types -from typing import Optional, Type, Tuple +from typing import Optional, Tuple, Type import warnings import numpy as np From d2a542bd6bafd1be9e29c347bc0a90cc9aec449e Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Wed, 20 Mar 2019 12:35:41 -0500 Subject: [PATCH 05/15] Replaced TypeVars with forward references --- pandas/core/frame.py | 8 +++----- pandas/core/indexes/base.py | 7 ++----- pandas/core/internals/blocks.py | 7 ++----- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 61b0a2651188e..f9afe19b12d62 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -19,7 +19,7 @@ import sys import warnings from textwrap import dedent -from typing import List, TypeVar, Union +from typing import List, Union import numpy as np import numpy.ma as ma @@ -285,9 +285,6 @@ """ -DF = TypeVar('DF', bound='DataFrame') - - # ----------------------------------------------------------------------- # DataFrame class @@ -6249,7 +6246,8 @@ def diff(self, periods=1, axis=0): def _gotitem(self, key: Union[str, List[str]], ndim: int, - subset: Union[Series, DF, None] = None) -> Union[Series, DF]: + subset: Union[Series, 'DataFrame', None] = None, + ) -> Union[Series, 'DataFrame']: """ Sub-classes to define. Return a sliced object. diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 504baff8f379f..813127968581c 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -1,7 +1,7 @@ from datetime import datetime, timedelta import operator from textwrap import dedent -from typing import TypeVar, Union +from typing import Union import warnings import numpy as np @@ -164,9 +164,6 @@ def _new_Index(cls, d): return cls.__new__(cls, **d) -INDEXTYPE = TypeVar('INDEXTYPE', bound='Index') - - class Index(IndexOpsMixin, PandasObject): """ Immutable ndarray implementing an ordered, sliceable set. The basic object @@ -3635,7 +3632,7 @@ def values(self): return self._data.view(np.ndarray) @property - def _values(self) -> Union[ExtensionArray, INDEXTYPE, np.ndarray]: + def _values(self) -> Union[ExtensionArray, 'Index', np.ndarray]: # TODO(EA): remove index types as they become extension arrays """ The best array representation. diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index c79cf90a9c447..ddc47b04cc79e 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -3,7 +3,7 @@ import functools import inspect import re -from typing import Any, List, Optional, TypeVar +from typing import Any, List, Optional import warnings import numpy as np @@ -1646,9 +1646,6 @@ def _get_unstack_items(self, unstacker, new_columns): return new_placement, new_values, mask -EB = TypeVar('EB', bound='ExtensionBlock') - - class ExtensionBlock(NonConsolidatableMixIn, Block): """Block for holding extension types. @@ -1833,7 +1830,7 @@ def interpolate(self, method='pad', axis=0, inplace=False, limit=None, def shift(self, periods: int, axis: libinternals.BlockPlacement = 0, - fill_value: Optional[Any] = None) -> List[EB]: + fill_value: Optional[Any] = None) -> List['ExtensionBlock']: """ Shift the block by `periods`. From 1341a1e2e0c56f84c778989ce25c6cad62b08e9c Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Wed, 20 Mar 2019 15:45:05 -0500 Subject: [PATCH 06/15] Made changes requested by @WillAyd --- pandas/core/groupby/groupby.py | 6 ++++-- pandas/core/internals/blocks.py | 12 +++++++----- pandas/core/internals/managers.py | 5 +++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index c5a1a78093b2b..a5eff2644491d 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -1751,8 +1751,10 @@ def pre_processor(vals: np.ndarray) -> \ return vals, inference - def post_processor(vals: np.ndarray, inference: Optional[Type]) -> \ - np.ndarray: + def post_processor( + vals: np.ndarray, + inference: Optional[Type] + ) -> np.ndarray: if inference: # Check for edge case if not (is_integer_dtype(inference) and diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index ddc47b04cc79e..243cd03980a70 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -3,7 +3,7 @@ import functools import inspect import re -from typing import Any, List, Optional +from typing import Any, List import warnings import numpy as np @@ -1827,10 +1827,12 @@ def interpolate(self, method='pad', axis=0, inplace=False, limit=None, limit=limit), placement=self.mgr_locs) - def shift(self, - periods: int, - axis: libinternals.BlockPlacement = 0, - fill_value: Optional[Any] = None) -> List['ExtensionBlock']: + def shift( + self, + periods: int, + axis: libinternals.BlockPlacement = 0, + fill_value: Any = None + ) -> List['ExtensionBlock']: """ Shift the block by `periods`. diff --git a/pandas/core/internals/managers.py b/pandas/core/internals/managers.py index 06dd0596a6183..e12b091f2e0e7 100644 --- a/pandas/core/internals/managers.py +++ b/pandas/core/internals/managers.py @@ -1863,8 +1863,9 @@ def _shape_compat(x): return stacked, placement -def _interleaved_dtype(blocks: List[Block]) \ - -> Optional[Union[np.dtype, ExtensionDtype]]: +def _interleaved_dtype( + blocks: List[Block] +) -> Optional[Union[np.dtype, ExtensionDtype]]: """Find the common dtype for `blocks`. Parameters From 1e6e679b6c82a7d883ce2c061e88362f5796ef92 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Thu, 21 Mar 2019 07:42:56 -0500 Subject: [PATCH 07/15] Removed class and instance variable type hints for 3.5 compatibility --- pandas/core/indexes/datetimelike.py | 2 +- pandas/core/indexes/period.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 4575081f52b71..3fa7acfff6092 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -56,7 +56,7 @@ class DatetimeIndexOpsMixin(ExtensionOpsMixin): """ common ops mixin to support a unified interface datetimelike Index """ - _data: DatetimeLikeArrayMixin = None + _data = None # type: DatetimeLikeArrayMixin # DatetimeLikeArrayMixin assumes subclasses are mutable, so these are # properties there. They can be made into cache_readonly for Index diff --git a/pandas/core/indexes/period.py b/pandas/core/indexes/period.py index ae18f63fe3ba4..a4bd7f9017eb4 100644 --- a/pandas/core/indexes/period.py +++ b/pandas/core/indexes/period.py @@ -170,7 +170,7 @@ class PeriodIndex(DatetimeIndexOpsMixin, Int64Index, PeriodDelegateMixin): _is_numeric_dtype = False _infer_as_myclass = True - _data: PeriodArray = None + _data = None # type: PeriodArray _engine_type = libindex.PeriodEngine From 13fc9ca63034d2cf4ee6ed71d59e596d63db2758 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Thu, 21 Mar 2019 20:46:58 -0500 Subject: [PATCH 08/15] Requested changes --- pandas/core/dtypes/base.py | 2 +- pandas/core/frame.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/core/dtypes/base.py b/pandas/core/dtypes/base.py index 7b06e20420a98..25f084dee18ba 100644 --- a/pandas/core/dtypes/base.py +++ b/pandas/core/dtypes/base.py @@ -209,7 +209,7 @@ def __str__(self): return self.name @property - def type(self) -> bool: + def type(self) -> type: """ The scalar type for the array, e.g. ``int`` diff --git a/pandas/core/frame.py b/pandas/core/frame.py index f9afe19b12d62..d30920da33a04 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -19,7 +19,7 @@ import sys import warnings from textwrap import dedent -from typing import List, Union +from typing import List, Optional, Union import numpy as np import numpy.ma as ma @@ -6246,7 +6246,7 @@ def diff(self, periods=1, axis=0): def _gotitem(self, key: Union[str, List[str]], ndim: int, - subset: Union[Series, 'DataFrame', None] = None, + subset: Optional[Series, 'DataFrame'] = None, ) -> Union[Series, 'DataFrame']: """ Sub-classes to define. Return a sliced object. From 3c07c5ede5020d72d466822b022ba97b47c450bf Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Thu, 21 Mar 2019 21:11:26 -0500 Subject: [PATCH 09/15] Fixed type Optional[] hint --- pandas/core/frame.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index d30920da33a04..41db89cf5cf6c 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -6246,7 +6246,7 @@ def diff(self, periods=1, axis=0): def _gotitem(self, key: Union[str, List[str]], ndim: int, - subset: Optional[Series, 'DataFrame'] = None, + subset: Optional[Union[Series, 'DataFrame']] = None, ) -> Union[Series, 'DataFrame']: """ Sub-classes to define. Return a sliced object. From c774e4aa556096e03f942ffeb787539ce8249c06 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Fri, 22 Mar 2019 11:09:48 -0500 Subject: [PATCH 10/15] Updates to correct errors revealed by mypy --- pandas/core/dtypes/base.py | 4 ++-- pandas/core/frame.py | 4 ++-- pandas/core/groupby/groupby.py | 7 ++++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pandas/core/dtypes/base.py b/pandas/core/dtypes/base.py index 25f084dee18ba..3ec49a4cdf331 100644 --- a/pandas/core/dtypes/base.py +++ b/pandas/core/dtypes/base.py @@ -1,5 +1,5 @@ """Extend pandas with custom array types""" -from typing import List, Optional +from typing import List, Optional, Type import numpy as np @@ -209,7 +209,7 @@ def __str__(self): return self.name @property - def type(self) -> type: + def type(self) -> Type: """ The scalar type for the array, e.g. ``int`` diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 41db89cf5cf6c..7a8e71b8009e4 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -19,7 +19,7 @@ import sys import warnings from textwrap import dedent -from typing import List, Optional, Union +from typing import List, Optional, Set, Union import numpy as np import numpy.ma as ma @@ -367,7 +367,7 @@ def _constructor(self): _constructor_sliced = Series _deprecations = NDFrame._deprecations | frozenset( ['get_value', 'set_value', 'from_csv', 'from_items']) - _accessors = set() + _accessors = set() # type: Set @property def _constructor_expanddim(self): diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index a5eff2644491d..fb310b6e5b722 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -12,7 +12,7 @@ class providing the base-class of operations. import datetime from functools import partial, wraps import types -from typing import Optional, Tuple, Type +from typing import Optional, Tuple, Type, Union import warnings import numpy as np @@ -1736,8 +1736,9 @@ def quantile(self, q=0.5, interpolation='linear'): b 3.0 """ - def pre_processor(vals: np.ndarray) -> \ - Tuple[np.ndarray, Optional[Type]]: + def pre_processor( + vals: np.ndarray + ) -> Tuple[np.ndarray, Optional[Union[str, Type]]]: if is_object_dtype(vals): raise TypeError("'quantile' cannot be performed against " "'object' dtypes!") From a5fd6521f5a58d7fad0c15e6e427a061ae0877e2 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Sat, 23 Mar 2019 22:22:05 -0500 Subject: [PATCH 11/15] Revert "Updates to correct errors revealed by mypy" This reverts commit c774e4aa556096e03f942ffeb787539ce8249c06. --- pandas/core/dtypes/base.py | 4 ++-- pandas/core/frame.py | 4 ++-- pandas/core/groupby/groupby.py | 7 +++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/pandas/core/dtypes/base.py b/pandas/core/dtypes/base.py index 3ec49a4cdf331..25f084dee18ba 100644 --- a/pandas/core/dtypes/base.py +++ b/pandas/core/dtypes/base.py @@ -1,5 +1,5 @@ """Extend pandas with custom array types""" -from typing import List, Optional, Type +from typing import List, Optional import numpy as np @@ -209,7 +209,7 @@ def __str__(self): return self.name @property - def type(self) -> Type: + def type(self) -> type: """ The scalar type for the array, e.g. ``int`` diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 7a8e71b8009e4..41db89cf5cf6c 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -19,7 +19,7 @@ import sys import warnings from textwrap import dedent -from typing import List, Optional, Set, Union +from typing import List, Optional, Union import numpy as np import numpy.ma as ma @@ -367,7 +367,7 @@ def _constructor(self): _constructor_sliced = Series _deprecations = NDFrame._deprecations | frozenset( ['get_value', 'set_value', 'from_csv', 'from_items']) - _accessors = set() # type: Set + _accessors = set() @property def _constructor_expanddim(self): diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index fb310b6e5b722..a5eff2644491d 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -12,7 +12,7 @@ class providing the base-class of operations. import datetime from functools import partial, wraps import types -from typing import Optional, Tuple, Type, Union +from typing import Optional, Tuple, Type import warnings import numpy as np @@ -1736,9 +1736,8 @@ def quantile(self, q=0.5, interpolation='linear'): b 3.0 """ - def pre_processor( - vals: np.ndarray - ) -> Tuple[np.ndarray, Optional[Union[str, Type]]]: + def pre_processor(vals: np.ndarray) -> \ + Tuple[np.ndarray, Optional[Type]]: if is_object_dtype(vals): raise TypeError("'quantile' cannot be performed against " "'object' dtypes!") From dcabf976b5b8988cf8e1d03ac24bf70ebbf8e6e4 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Sat, 23 Mar 2019 22:24:41 -0500 Subject: [PATCH 12/15] Fix line formatting --- pandas/core/groupby/groupby.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index a5eff2644491d..3c3addd06b94a 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -1736,8 +1736,9 @@ def quantile(self, q=0.5, interpolation='linear'): b 3.0 """ - def pre_processor(vals: np.ndarray) -> \ - Tuple[np.ndarray, Optional[Type]]: + def pre_processor( + vals: np.ndarray + ) -> Tuple[np.ndarray, Optional[Type]]: if is_object_dtype(vals): raise TypeError("'quantile' cannot be performed against " "'object' dtypes!") From 75ba127b60f4edf3703d22dd06c188843b8184c4 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Sun, 24 Mar 2019 21:21:29 -0500 Subject: [PATCH 13/15] Replace forward references with ABCs --- pandas/core/frame.py | 7 ++++--- pandas/core/indexes/base.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 41db89cf5cf6c..5ccd10ac564df 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -72,7 +72,8 @@ is_iterator, is_sequence, is_named_tuple) -from pandas.core.dtypes.generic import ABCSeries, ABCIndexClass, ABCMultiIndex +from pandas.core.dtypes.generic import ( + ABCSeries, ABCDataFrame, ABCIndexClass, ABCMultiIndex) from pandas.core.dtypes.missing import isna, notna from pandas.core import algorithms @@ -6246,8 +6247,8 @@ def diff(self, periods=1, axis=0): def _gotitem(self, key: Union[str, List[str]], ndim: int, - subset: Optional[Union[Series, 'DataFrame']] = None, - ) -> Union[Series, 'DataFrame']: + subset: Optional[Union[Series, ABCDataFrame]] = None, + ) -> Union[Series, ABCDataFrame]: """ Sub-classes to define. Return a sliced object. diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 813127968581c..e2e4bad6c147b 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -3632,7 +3632,7 @@ def values(self): return self._data.view(np.ndarray) @property - def _values(self) -> Union[ExtensionArray, 'Index', np.ndarray]: + def _values(self) -> Union[ExtensionArray, ABCIndexClass, np.ndarray]: # TODO(EA): remove index types as they become extension arrays """ The best array representation. From 70fe87e404cd4883f4834d6aafdf3d75a8f4daf6 Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Wed, 27 Mar 2019 10:09:15 -0500 Subject: [PATCH 14/15] type to Type --- pandas/core/dtypes/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/core/dtypes/base.py b/pandas/core/dtypes/base.py index 25f084dee18ba..3ec49a4cdf331 100644 --- a/pandas/core/dtypes/base.py +++ b/pandas/core/dtypes/base.py @@ -1,5 +1,5 @@ """Extend pandas with custom array types""" -from typing import List, Optional +from typing import List, Optional, Type import numpy as np @@ -209,7 +209,7 @@ def __str__(self): return self.name @property - def type(self) -> type: + def type(self) -> Type: """ The scalar type for the array, e.g. ``int`` From ce92ce84672009e5d62945cd47643e89f5bba99b Mon Sep 17 00:00:00 2001 From: Gregory Rome Date: Wed, 27 Mar 2019 16:26:45 -0500 Subject: [PATCH 15/15] Trigger tests again