@@ -60,12 +60,15 @@ class Resampler(_GroupBy):
60
60
'loffset' , 'base' , 'kind' ]
61
61
62
62
# API compat of allowed attributes
63
- _deprecated_valids = _attributes + ['_ipython_display_' , '__doc__' ,
64
- '_cache' , '_attributes' , 'binner' ,
65
- 'grouper' , 'groupby' , 'keys' ,
66
- 'sort' , 'kind' , 'squeeze' ,
67
- 'group_keys' , 'as_index' ,
68
- 'exclusions' , '_groupby' ]
63
+ _deprecated_valids = _attributes + ['__doc__' , '_cache' , '_attributes' ,
64
+ 'binner' , 'grouper' , 'groupby' ,
65
+ 'sort' , 'kind' , 'squeeze' , 'keys' ,
66
+ 'group_keys' , 'as_index' , 'exclusions' ,
67
+ '_groupby' ]
68
+
69
+ # don't raise deprecation warning on attributes starting with these
70
+ # patterns - prevents warnings caused by IPython introspection
71
+ _deprecated_valid_patterns = ['_ipython' , '_repr' ]
69
72
70
73
# API compat of disallowed attributes
71
74
_deprecated_invalids = ['iloc' , 'loc' , 'ix' , 'iat' , 'at' ]
@@ -109,30 +112,33 @@ def _typ(self):
109
112
return 'series'
110
113
return 'dataframe'
111
114
112
- def _deprecated (self ):
113
- warnings .warn (".resample() is now a deferred operation\n "
114
- "use .resample(...).mean() instead of .resample(...)" ,
115
+ def _deprecated (self , op ):
116
+ warnings .warn (("\n .resample() is now a deferred operation\n "
117
+ "You called {op}(...) on this deferred object "
118
+ "which materialized it into a {klass}\n by implicitly "
119
+ "taking the mean. Use .resample(...).mean() "
120
+ "instead" ).format (op = op , klass = self ._typ ),
115
121
FutureWarning , stacklevel = 3 )
116
122
return self .mean ()
117
123
118
124
def _make_deprecated_binop (op ):
119
125
# op is a string
120
126
121
127
def _evaluate_numeric_binop (self , other ):
122
- result = self ._deprecated ()
128
+ result = self ._deprecated (op )
123
129
return getattr (result , op )(other )
124
130
return _evaluate_numeric_binop
125
131
126
- def _make_deprecated_unary (op ):
132
+ def _make_deprecated_unary (op , name ):
127
133
# op is a callable
128
134
129
135
def _evaluate_numeric_unary (self ):
130
- result = self ._deprecated ()
136
+ result = self ._deprecated (name )
131
137
return op (result )
132
138
return _evaluate_numeric_unary
133
139
134
140
def __array__ (self ):
135
- return self ._deprecated ().__array__ ()
141
+ return self ._deprecated ('__array__' ).__array__ ()
136
142
137
143
__gt__ = _make_deprecated_binop ('__gt__' )
138
144
__ge__ = _make_deprecated_binop ('__ge__' )
@@ -148,10 +154,10 @@ def __array__(self):
148
154
__truediv__ = __rtruediv__ = _make_deprecated_binop ('__truediv__' )
149
155
if not compat .PY3 :
150
156
__div__ = __rdiv__ = _make_deprecated_binop ('__div__' )
151
- __neg__ = _make_deprecated_unary (lambda x : - x )
152
- __pos__ = _make_deprecated_unary (lambda x : x )
153
- __abs__ = _make_deprecated_unary (lambda x : np .abs (x ))
154
- __inv__ = _make_deprecated_unary (lambda x : - x )
157
+ __neg__ = _make_deprecated_unary (lambda x : - x , '__neg__' )
158
+ __pos__ = _make_deprecated_unary (lambda x : x , '__pos__' )
159
+ __abs__ = _make_deprecated_unary (lambda x : np .abs (x ), '__abs__' )
160
+ __inv__ = _make_deprecated_unary (lambda x : - x , '__inv__' )
155
161
156
162
def __getattr__ (self , attr ):
157
163
if attr in self ._internal_names_set :
@@ -165,8 +171,12 @@ def __getattr__(self, attr):
165
171
raise ValueError (".resample() is now a deferred operation\n "
166
172
"\t use .resample(...).mean() instead of "
167
173
".resample(...)" )
168
- if attr not in self ._deprecated_valids :
169
- self = self ._deprecated ()
174
+
175
+ matches_pattern = any (attr .startswith (x ) for x
176
+ in self ._deprecated_valid_patterns )
177
+ if not matches_pattern and attr not in self ._deprecated_valids :
178
+ self = self ._deprecated (attr )
179
+
170
180
return object .__getattribute__ (self , attr )
171
181
172
182
def __setattr__ (self , attr , value ):
@@ -182,7 +192,7 @@ def __getitem__(self, key):
182
192
183
193
# compat for deprecated
184
194
if isinstance (self .obj , com .ABCSeries ):
185
- return self ._deprecated ()[key ]
195
+ return self ._deprecated ('__getitem__' )[key ]
186
196
187
197
raise
188
198
@@ -230,7 +240,7 @@ def _assure_grouper(self):
230
240
def plot (self , * args , ** kwargs ):
231
241
# for compat with prior versions, we want to
232
242
# have the warnings shown here and just have this work
233
- return self ._deprecated ().plot (* args , ** kwargs )
243
+ return self ._deprecated ('plot' ).plot (* args , ** kwargs )
234
244
235
245
def aggregate (self , arg , * args , ** kwargs ):
236
246
"""
0 commit comments