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