From a3a1605ce40d14eb0b09f33b4b75519205780ad4 Mon Sep 17 00:00:00 2001 From: makbigc Date: Sat, 4 May 2019 09:26:15 +0800 Subject: [PATCH 01/10] Add type annotation and remove blacklist item --- mypy.ini | 3 --- pandas/core/indexes/datetimelike.py | 8 ++++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/mypy.ini b/mypy.ini index 3df8fd13a2a75..6188958f4d9d9 100644 --- a/mypy.ini +++ b/mypy.ini @@ -5,8 +5,5 @@ follow_imports=silent [mypy-pandas.conftest,pandas.tests.*] ignore_errors=True -[mypy-pandas.core.indexes.datetimelike] -ignore_errors=True - [mypy-pandas.core.indexes.period] ignore_errors=True diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 092cec00228cd..ffd0ce94582e7 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -3,6 +3,7 @@ """ import operator import warnings +from typing import Set import numpy as np @@ -69,7 +70,6 @@ class DatetimeIndexOpsMixin(ExtensionOpsMixin): _resolution = cache_readonly(DatetimeLikeArrayMixin._resolution.fget) resolution = cache_readonly(DatetimeLikeArrayMixin.resolution.fget) - _box_values = ea_passthrough(DatetimeLikeArrayMixin._box_values) _maybe_mask_results = ea_passthrough( DatetimeLikeArrayMixin._maybe_mask_results) __iter__ = ea_passthrough(DatetimeLikeArrayMixin.__iter__) @@ -134,7 +134,7 @@ def values(self) -> np.ndarray: # Note: PeriodArray overrides this to return an ndarray of objects. return self._data._data - @property + @property # type: ignore @Appender(DatetimeLikeArrayMixin.asi8.__doc__) def asi8(self): return self._data.asi8 @@ -758,9 +758,9 @@ class DatetimelikeDelegateMixin(PandasDelegate): boxed in an index, after being returned from the array """ # raw_methods : dispatch methods that shouldn't be boxed in an Index - _raw_methods = set() + _raw_methods = set() # type: Set[str] # raw_properties : dispatch properties that shouldn't be boxed in an Index - _raw_properties = set() + _raw_properties = set() # type: Set[str] name = None _data = None From 9c60e7386de6729a98383cf45f10a242622fbe24 Mon Sep 17 00:00:00 2001 From: makbigc Date: Wed, 8 May 2019 11:43:44 +0800 Subject: [PATCH 02/10] isort datetimelike.py --- pandas/core/indexes/datetimelike.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index ffd0ce94582e7..63b65d523fe41 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -2,8 +2,8 @@ Base and utility classes for tseries type pandas objects. """ import operator -import warnings from typing import Set +import warnings import numpy as np From 717bb83e7a3104ec5c34282c33788b1bd65cffb0 Mon Sep 17 00:00:00 2001 From: makbigc Date: Wed, 8 May 2019 11:55:00 +0800 Subject: [PATCH 03/10] Add comment for the need of type: ignore --- pandas/core/indexes/datetimelike.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 63b65d523fe41..bde66c3d0bec3 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -134,7 +134,7 @@ def values(self) -> np.ndarray: # Note: PeriodArray overrides this to return an ndarray of objects. return self._data._data - @property # type: ignore + @property # type: ignore # https://github.com/python/mypy/issues/1362 @Appender(DatetimeLikeArrayMixin.asi8.__doc__) def asi8(self): return self._data.asi8 From 29dbd929942d28d952964118d069559dbcc0b4b2 Mon Sep 17 00:00:00 2001 From: makbigc Date: Thu, 30 May 2019 20:07:12 +0800 Subject: [PATCH 04/10] Add ignore comment --- pandas/core/indexes/datetimelike.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index bde66c3d0bec3..1fe11fc5eb572 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -63,12 +63,16 @@ class DatetimeIndexOpsMixin(ExtensionOpsMixin): # DatetimeLikeArrayMixin assumes subclasses are mutable, so these are # properties there. They can be made into cache_readonly for Index # subclasses bc they are immutable - inferred_freq = cache_readonly(DatetimeLikeArrayMixin.inferred_freq.fget) - _isnan = cache_readonly(DatetimeLikeArrayMixin._isnan.fget) - hasnans = cache_readonly(DatetimeLikeArrayMixin._hasnans.fget) + inferred_freq = cache_readonly( + DatetimeLikeArrayMixin.inferred_freq.fget) # type: ignore + _isnan = cache_readonly(DatetimeLikeArrayMixin._isnan.fget) # type: ignore + hasnans = cache_readonly( + DatetimeLikeArrayMixin._hasnans.fget) # type: ignore _hasnans = hasnans # for index / array -agnostic code - _resolution = cache_readonly(DatetimeLikeArrayMixin._resolution.fget) - resolution = cache_readonly(DatetimeLikeArrayMixin.resolution.fget) + _resolution = cache_readonly( + DatetimeLikeArrayMixin._resolution.fget) # type: ignore + resolution = cache_readonly( + DatetimeLikeArrayMixin.resolution.fget) # type: ignore _maybe_mask_results = ea_passthrough( DatetimeLikeArrayMixin._maybe_mask_results) @@ -130,7 +134,7 @@ def _ndarray_values(self): # Abstract data attributes @property - def values(self) -> np.ndarray: + def values(self): # Note: PeriodArray overrides this to return an ndarray of objects. return self._data._data From 213af4ac3dd06609ed6b638cf43811403b706512 Mon Sep 17 00:00:00 2001 From: makbigc Date: Mon, 10 Jun 2019 22:32:09 +0800 Subject: [PATCH 05/10] Add annotation DatetimeLikeArray to _data --- pandas/_typing.py | 6 +++++- pandas/core/algorithms.py | 3 ++- pandas/core/arrays/base.py | 4 ++-- pandas/core/indexes/datetimelike.py | 3 ++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pandas/_typing.py b/pandas/_typing.py index f5bf0dcd3e220..eb65fd6edd607 100644 --- a/pandas/_typing.py +++ b/pandas/_typing.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import IO, AnyStr, Type, Union +from typing import IO, AnyStr, Type, TypeVar, Union import numpy as np @@ -11,12 +11,16 @@ from pandas.core.dtypes.generic import ( ABCExtensionArray, ABCIndexClass, ABCSeries, ABCSparseSeries) +from pandas.core.arrays import DatetimeArray, PeriodArray, TimedeltaArray + AnyArrayLike = Union[ABCExtensionArray, ABCIndexClass, ABCSeries, ABCSparseSeries, np.ndarray] ArrayLike = Union[ABCExtensionArray, np.ndarray] +DatetimeLikeArray = TypeVar('DatetimeLikeArray', DatetimeArray, + PeriodArray, TimedeltaArray) DatetimeLikeScalar = Type[Union[Period, Timestamp, Timedelta]] Dtype = Union[str, np.dtype, ExtensionDtype] FilePathOrBuffer = Union[str, Path, IO[AnyStr]] diff --git a/pandas/core/algorithms.py b/pandas/core/algorithms.py index 932ac71a23ed0..c3b43fbefa3b3 100644 --- a/pandas/core/algorithms.py +++ b/pandas/core/algorithms.py @@ -26,8 +26,9 @@ from pandas.core.dtypes.missing import isna, na_value_for_dtype from pandas.core import common as com +from type import Dict -_shared_docs = {} +_shared_docs = {} # type: Dict[str, str] # --------------- # diff --git a/pandas/core/arrays/base.py b/pandas/core/arrays/base.py index c709cd9e9f0b2..76da6b42fa395 100644 --- a/pandas/core/arrays/base.py +++ b/pandas/core/arrays/base.py @@ -6,7 +6,7 @@ without warning. """ import operator -from typing import Any, Callable, Optional, Sequence, Tuple, Union +from typing import Any, Callable, Dict, Optional, Sequence, Tuple, Union import numpy as np @@ -26,7 +26,7 @@ _not_implemented_message = "{} does not implement {}." -_extension_array_shared_docs = dict() +_extension_array_shared_docs = dict() # type: Dict[str, str] class ExtensionArray: diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 1fe11fc5eb572..dfb19a42e7794 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -18,6 +18,7 @@ is_period_dtype, is_scalar) from pandas.core.dtypes.generic import ABCIndex, ABCIndexClass, ABCSeries +from pandas._typing import DatetimeLikeArray from pandas.core import algorithms, ops from pandas.core.accessor import PandasDelegate from pandas.core.arrays import ExtensionOpsMixin @@ -58,7 +59,7 @@ class DatetimeIndexOpsMixin(ExtensionOpsMixin): """ common ops mixin to support a unified interface datetimelike Index """ - _data = None + _data = None # type: DatetimeLikeArray # DatetimeLikeArrayMixin assumes subclasses are mutable, so these are # properties there. They can be made into cache_readonly for Index From b7f5a9c32f42a2ded4225f5fcf4715959cf8a818 Mon Sep 17 00:00:00 2001 From: makbigc Date: Tue, 11 Jun 2019 23:52:31 +0800 Subject: [PATCH 06/10] Import EA directly --- pandas/_typing.py | 4 +++- pandas/core/algorithms.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pandas/_typing.py b/pandas/_typing.py index 5bb6c2b921b1a..e1c5884c83ee8 100644 --- a/pandas/_typing.py +++ b/pandas/_typing.py @@ -11,7 +11,9 @@ from pandas.core.dtypes.generic import ( ABCExtensionArray, ABCIndexClass, ABCSeries, ABCSparseSeries) -from pandas.core.arrays import DatetimeArray, PeriodArray, TimedeltaArray +from pandas.core.arrays.datetimes import DatetimeArray +from pandas.core.arrays.period import PeriodArray +from pandas.core.arrays.timedeltas import TimedeltaArray AnyArrayLike = TypeVar('AnyArrayLike', ABCExtensionArray, diff --git a/pandas/core/algorithms.py b/pandas/core/algorithms.py index c3b43fbefa3b3..bd91735459f50 100644 --- a/pandas/core/algorithms.py +++ b/pandas/core/algorithms.py @@ -26,7 +26,7 @@ from pandas.core.dtypes.missing import isna, na_value_for_dtype from pandas.core import common as com -from type import Dict +from typing import Dict _shared_docs = {} # type: Dict[str, str] From 2bd7542fc18665801178dffd865999c134b22466 Mon Sep 17 00:00:00 2001 From: William Ayd Date: Mon, 24 Jun 2019 18:05:10 -0400 Subject: [PATCH 07/10] Removed DatetimeLikeArray TypeVar for now --- pandas/_typing.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pandas/_typing.py b/pandas/_typing.py index e1c5884c83ee8..a9fac973d8d46 100644 --- a/pandas/_typing.py +++ b/pandas/_typing.py @@ -11,9 +11,6 @@ from pandas.core.dtypes.generic import ( ABCExtensionArray, ABCIndexClass, ABCSeries, ABCSparseSeries) -from pandas.core.arrays.datetimes import DatetimeArray -from pandas.core.arrays.period import PeriodArray -from pandas.core.arrays.timedeltas import TimedeltaArray AnyArrayLike = TypeVar('AnyArrayLike', ABCExtensionArray, @@ -21,8 +18,6 @@ ABCSeries, ABCSparseSeries, np.ndarray) -DatetimeLikeArray = TypeVar('DatetimeLikeArray', DatetimeArray, - PeriodArray, TimedeltaArray) ArrayLike = TypeVar('ArrayLike', ABCExtensionArray, np.ndarray) DatetimeLikeScalar = TypeVar('DatetimeLikeScalar', Period, Timestamp, From d9ab7b0ab8113b9e3ecb237d38f8ffeb4deae490 Mon Sep 17 00:00:00 2001 From: William Ayd Date: Mon, 24 Jun 2019 18:06:03 -0400 Subject: [PATCH 08/10] Removed DatetimeLikeArray annotations --- pandas/core/indexes/datetimelike.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 53e751f4fcb69..ab37e3a4da7ab 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -18,7 +18,6 @@ is_period_dtype, is_scalar) from pandas.core.dtypes.generic import ABCIndex, ABCIndexClass, ABCSeries -from pandas._typing import DatetimeLikeArray from pandas.core import algorithms, ops from pandas.core.accessor import PandasDelegate from pandas.core.arrays import ExtensionOpsMixin @@ -59,7 +58,7 @@ class DatetimeIndexOpsMixin(ExtensionOpsMixin): """ common ops mixin to support a unified interface datetimelike Index """ - _data = None # type: DatetimeLikeArray + _data = None # DatetimeLikeArrayMixin assumes subclasses are mutable, so these are # properties there. They can be made into cache_readonly for Index From dea0cb13562fd359cb3ede3d736a1b08c8fc148e Mon Sep 17 00:00:00 2001 From: Will Ayd Date: Mon, 24 Jun 2019 20:44:51 -0400 Subject: [PATCH 09/10] isort fixup --- pandas/_typing.py | 1 - pandas/core/algorithms.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pandas/_typing.py b/pandas/_typing.py index a9fac973d8d46..aff8dd80b65be 100644 --- a/pandas/_typing.py +++ b/pandas/_typing.py @@ -11,7 +11,6 @@ from pandas.core.dtypes.generic import ( ABCExtensionArray, ABCIndexClass, ABCSeries, ABCSparseSeries) - AnyArrayLike = TypeVar('AnyArrayLike', ABCExtensionArray, ABCIndexClass, diff --git a/pandas/core/algorithms.py b/pandas/core/algorithms.py index bd91735459f50..ff1313c21d96f 100644 --- a/pandas/core/algorithms.py +++ b/pandas/core/algorithms.py @@ -3,6 +3,7 @@ intended for public consumption """ from textwrap import dedent +from typing import Dict from warnings import catch_warnings, simplefilter, warn import numpy as np @@ -26,7 +27,6 @@ from pandas.core.dtypes.missing import isna, na_value_for_dtype from pandas.core import common as com -from typing import Dict _shared_docs = {} # type: Dict[str, str] From b061ac190665d3c4df3adcae2683d2fbf8edf60f Mon Sep 17 00:00:00 2001 From: William Ayd Date: Tue, 25 Jun 2019 07:38:14 -0400 Subject: [PATCH 10/10] Update _typing.py --- pandas/_typing.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas/_typing.py b/pandas/_typing.py index aff8dd80b65be..a2bb168c1e2da 100644 --- a/pandas/_typing.py +++ b/pandas/_typing.py @@ -17,7 +17,6 @@ ABCSeries, ABCSparseSeries, np.ndarray) - ArrayLike = TypeVar('ArrayLike', ABCExtensionArray, np.ndarray) DatetimeLikeScalar = TypeVar('DatetimeLikeScalar', Period, Timestamp, Timedelta)