Skip to content

Commit 3085238

Browse files
adamkleinwesm
authored andcommitted
fixed docstring copying
1 parent 6738677 commit 3085238

File tree

9 files changed

+271
-225
lines changed

9 files changed

+271
-225
lines changed

pandas/core/frame.py

+36-23
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from pandas.core.series import Series
3333
from pandas.util import py3compat
3434
from pandas.util.terminal import get_terminal_size
35-
from pandas.util.decorators import deprecate, Appender
35+
from pandas.util.decorators import deprecate, Appender, Substitution
3636

3737
from pandas.core.format import DataFrameFormatter, docstring_to_string
3838

@@ -162,19 +162,12 @@
162162
merged : DataFrame
163163
"""
164164

165-
def _add_stat_doc(f, name, shortname, na_action=_doc_exclude_na,
166-
extras=''):
167-
doc = _stat_doc % {'name' : name,
168-
'shortname' : shortname,
169-
'na_action' : na_action,
170-
'extras' : extras}
171-
f.__doc__ = doc
172-
173165

174166
#----------------------------------------------------------------------
175167
# Factory helper methods
176168

177169
def _arith_method(func, name, default_axis='columns'):
170+
@Appender(_arith_doc % name)
178171
def f(self, other, axis=default_axis, level=None, fill_value=None):
179172
if isinstance(other, DataFrame): # Another DataFrame
180173
return self._combine_frame(other, func, fill_value, level)
@@ -184,12 +177,12 @@ def f(self, other, axis=default_axis, level=None, fill_value=None):
184177
return self._combine_const(other, func)
185178

186179
f.__name__ = name
187-
f.__doc__ = _arith_doc % name
188180

189181
return f
190182

191183

192184
def comp_method(func, name):
185+
@Appender('Wrapper for comparison method %s' % name)
193186
def f(self, other):
194187
if isinstance(other, DataFrame): # Another DataFrame
195188
return self._compare_frame(other, func)
@@ -199,7 +192,6 @@ def f(self, other):
199192
return self._combine_const(other, func)
200193

201194
f.__name__ = name
202-
f.__doc__ = 'Wrapper for comparison method %s' % name
203195

204196
return f
205197

@@ -2844,6 +2836,8 @@ def _join_compat(self, other, on=None, how='left', lsuffix='', rsuffix=''):
28442836
return concat([self] + list(other), axis=1, join=how,
28452837
join_axes=join_axes, verify_integrity=True)
28462838

2839+
@Substitution('')
2840+
@Appender(_merge_doc, indents=2)
28472841
def merge(self, right, how='inner', on=None, left_on=None, right_on=None,
28482842
left_index=False, right_index=False, sort=True,
28492843
suffixes=('.x', '.y'), copy=True):
@@ -2852,7 +2846,6 @@ def merge(self, right, how='inner', on=None, left_on=None, right_on=None,
28522846
left_on=left_on, right_on=right_on,
28532847
left_index=left_index, right_index=right_index, sort=sort,
28542848
suffixes=suffixes, copy=copy)
2855-
if __debug__: merge.__doc__ = _merge_doc % ''
28562849

28572850
#----------------------------------------------------------------------
28582851
# Statistical methods, etc.
@@ -3061,56 +3054,71 @@ def _count_level(self, level, axis=0, numeric_only=False):
30613054
else:
30623055
return result
30633056

3057+
@Substitution(name='sum', shortname='sum', na_action=_doc_exclude_na,
3058+
extras=_numeric_only_doc)
3059+
@Appender(_stat_doc)
30643060
def sum(self, axis=0, numeric_only=None, skipna=True, level=None):
30653061
if level is not None:
30663062
return self._agg_by_level('sum', axis=axis, level=level,
30673063
skipna=skipna)
30683064
return self._reduce(nanops.nansum, axis=axis, skipna=skipna,
30693065
numeric_only=numeric_only)
3070-
_add_stat_doc(sum, 'sum', 'sum', extras=_numeric_only_doc)
30713066

3067+
@Substitution(name='mean', shortname='mean', na_action=_doc_exclude_na,
3068+
extras='')
3069+
@Appender(_stat_doc)
30723070
def mean(self, axis=0, skipna=True, level=None):
30733071
if level is not None:
30743072
return self._agg_by_level('mean', axis=axis, level=level,
30753073
skipna=skipna)
30763074
return self._reduce(nanops.nanmean, axis=axis, skipna=skipna,
30773075
numeric_only=None)
3078-
_add_stat_doc(mean, 'mean', 'mean')
30793076

3077+
@Substitution(name='minimum', shortname='min', na_action=_doc_exclude_na,
3078+
extras='')
3079+
@Appender(_stat_doc)
30803080
def min(self, axis=0, skipna=True, level=None):
30813081
if level is not None:
30823082
return self._agg_by_level('min', axis=axis, level=level,
30833083
skipna=skipna)
30843084
return self._reduce(nanops.nanmin, axis=axis, skipna=skipna,
30853085
numeric_only=None)
3086-
_add_stat_doc(min, 'minimum', 'min')
30873086

3087+
@Substitution(name='maximum', shortname='max', na_action=_doc_exclude_na,
3088+
extras='')
3089+
@Appender(_stat_doc)
30883090
def max(self, axis=0, skipna=True, level=None):
30893091
if level is not None:
30903092
return self._agg_by_level('max', axis=axis, level=level,
30913093
skipna=skipna)
30923094
return self._reduce(nanops.nanmax, axis=axis, skipna=skipna,
30933095
numeric_only=None)
3094-
_add_stat_doc(max, 'maximum', 'max')
30953096

3097+
@Substitution(name='product', shortname='product',
3098+
na_action='NA/null values are treated as 1', extras='')
3099+
@Appender(_stat_doc)
30963100
def prod(self, axis=0, skipna=True, level=None):
30973101
if level is not None:
30983102
return self._agg_by_level('prod', axis=axis, level=level,
30993103
skipna=skipna)
31003104
return self._reduce(nanops.nanprod, axis=axis, skipna=skipna,
31013105
numeric_only=None)
3102-
_add_stat_doc(prod, 'product', 'product',
3103-
na_action='NA/null values are treated as 1')
3106+
31043107
product = prod
31053108

3109+
@Substitution(name='median', shortname='median', na_action=_doc_exclude_na,
3110+
extras='')
3111+
@Appender(_stat_doc)
31063112
def median(self, axis=0, skipna=True, level=None):
31073113
if level is not None:
31083114
return self._agg_by_level('median', axis=axis, level=level,
31093115
skipna=skipna)
31103116
return self._reduce(nanops.nanmedian, axis=axis, skipna=skipna,
31113117
numeric_only=None)
3112-
_add_stat_doc(median, 'median', 'median')
31133118

3119+
@Substitution(name='median absolute deviation', shortname='mad',
3120+
na_action=_doc_exclude_na, extras='')
3121+
@Appender(_stat_doc)
31143122
def mad(self, axis=0, skipna=True, level=None):
31153123
if level is not None:
31163124
return self._agg_by_level('mad', axis=axis, level=level,
@@ -3123,30 +3131,35 @@ def mad(self, axis=0, skipna=True, level=None):
31233131
else:
31243132
demeaned = frame.sub(frame.mean(axis=1), axis=0)
31253133
return np.abs(demeaned).mean(axis=axis, skipna=skipna)
3126-
_add_stat_doc(mad, 'mean absolute deviation', 'mad')
31273134

3135+
@Substitution(name='unbiased variance', shortname='var',
3136+
na_action=_doc_exclude_na, extras='')
3137+
@Appender(_stat_doc)
31283138
def var(self, axis=0, skipna=True, level=None):
31293139
if level is not None:
31303140
return self._agg_by_level('var', axis=axis, level=level,
31313141
skipna=skipna)
31323142
return self._reduce(nanops.nanvar, axis=axis, skipna=skipna,
31333143
numeric_only=None)
3134-
_add_stat_doc(var, 'unbiased variance', 'var')
31353144

3145+
@Substitution(name='unbiased standard deviation', shortname='std',
3146+
na_action=_doc_exclude_na, extras='')
3147+
@Appender(_stat_doc)
31363148
def std(self, axis=0, skipna=True, level=None):
31373149
if level is not None:
31383150
return self._agg_by_level('std', axis=axis, level=level,
31393151
skipna=skipna)
31403152
return np.sqrt(self.var(axis=axis, skipna=skipna))
3141-
_add_stat_doc(std, 'unbiased standard deviation', 'std')
31423153

3154+
@Substitution(name='unbiased skewness', shortname='skew',
3155+
na_action=_doc_exclude_na, extras='')
3156+
@Appender(_stat_doc)
31433157
def skew(self, axis=0, skipna=True, level=None):
31443158
if level is not None:
31453159
return self._agg_by_level('skew', axis=axis, level=level,
31463160
skipna=skipna)
31473161
return self._reduce(nanops.nanskew, axis=axis, skipna=skipna,
31483162
numeric_only=None)
3149-
_add_stat_doc(skew, 'unbiased skewness', 'skew')
31503163

31513164
def _agg_by_level(self, name, axis=0, level=0, skipna=True):
31523165
grouped = self.groupby(level=level, axis=axis)

pandas/core/groupby.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from pandas.core.internals import BlockManager
1010
from pandas.core.series import Series
1111
from pandas.core.panel import Panel
12-
from pandas.util.decorators import cache_readonly
12+
from pandas.util.decorators import cache_readonly, Appender
1313
import pandas._tseries as lib
1414

1515

@@ -472,6 +472,7 @@ def _generator_factory(self):
472472
axis=self.axis,
473473
factory=factory)
474474

475+
@Appender(GroupBy.__doc__)
475476
def groupby(obj, by, **kwds):
476477
if isinstance(obj, Series):
477478
klass = SeriesGroupBy
@@ -481,7 +482,6 @@ def groupby(obj, by, **kwds):
481482
raise TypeError('invalid type: %s' % type(obj))
482483

483484
return klass(obj, by, **kwds)
484-
groupby.__doc__ = GroupBy.__doc__
485485

486486
def _get_axes(group):
487487
if isinstance(group, Series):

pandas/core/panel.py

+22-19
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from pandas.core.frame import DataFrame
1717
from pandas.core.generic import NDFrame
1818
from pandas.util import py3compat
19-
from pandas.util.decorators import deprecate
19+
from pandas.util.decorators import deprecate, Appender, Substitution
2020
import pandas.core.common as com
2121
import pandas.core.nanops as nanops
2222
import pandas._tseries as lib
@@ -97,6 +97,7 @@ def f(self, other):
9797
return f
9898

9999
def _panel_arith_method(op, name):
100+
@Substitution(op)
100101
def f(self, other, axis='items'):
101102
"""
102103
Wrapper method for %s
@@ -114,9 +115,6 @@ def f(self, other, axis='items'):
114115
return self._combine(other, op, axis=axis)
115116

116117
f.__name__ = name
117-
if __debug__:
118-
f.__doc__ = f.__doc__ % str(op)
119-
120118
return f
121119

122120

@@ -141,11 +139,6 @@ def f(self, other, axis='items'):
141139
If all values are NA, result will be NA"""
142140

143141

144-
def _add_docs(method, desc, outname):
145-
doc = _agg_doc % {'desc' : desc,
146-
'outname' : outname}
147-
method.__doc__ = doc
148-
149142
class Panel(NDFrame):
150143
_AXIS_NUMBERS = {
151144
'items' : 0,
@@ -982,45 +975,55 @@ def count(self, axis='major'):
982975

983976
return self._wrap_result(result, axis)
984977

978+
@Substitution(desc='sum', outname='sum')
979+
@Appender(_agg_doc)
985980
def sum(self, axis='major', skipna=True):
986981
return self._reduce(nanops.nansum, axis=axis, skipna=skipna)
987-
_add_docs(sum, 'sum', 'sum')
988982

983+
@Substitution(desc='mean', outname='mean')
984+
@Appender(_agg_doc)
989985
def mean(self, axis='major', skipna=True):
990986
return self._reduce(nanops.nanmean, axis=axis, skipna=skipna)
991-
_add_docs(mean, 'mean', 'mean')
992987

988+
@Substitution(desc='unbiased variance', outname='variance')
989+
@Appender(_agg_doc)
993990
def var(self, axis='major', skipna=True):
994991
return self._reduce(nanops.nanvar, axis=axis, skipna=skipna)
995-
_add_docs(var, 'unbiased variance', 'variance')
996992

993+
@Substitution(desc='unbiased standard deviation', outname='stdev')
994+
@Appender(_agg_doc)
997995
def std(self, axis='major', skipna=True):
998996
return self.var(axis=axis, skipna=skipna).apply(np.sqrt)
999-
_add_docs(std, 'unbiased standard deviation', 'stdev')
1000997

998+
@Substitution(desc='unbiased skewness', outname='skew')
999+
@Appender(_agg_doc)
10011000
def skew(self, axis='major', skipna=True):
10021001
return self._reduce(nanops.nanskew, axis=axis, skipna=skipna)
1003-
_add_docs(std, 'unbiased skewness', 'skew')
10041002

1003+
@Substitution(desc='product', outname='prod')
1004+
@Appender(_agg_doc)
10051005
def prod(self, axis='major', skipna=True):
10061006
return self._reduce(nanops.nanprod, axis=axis, skipna=skipna)
1007-
_add_docs(prod, 'product', 'prod')
10081007

1008+
@Substitution(desc='compounded percentage', outname='compounded')
1009+
@Appender(_agg_doc)
10091010
def compound(self, axis='major', skipna=True):
10101011
return (1 + self).prod(axis=axis, skipna=skipna) - 1
1011-
_add_docs(compound, 'compounded percentage', 'compounded')
10121012

1013+
@Substitution(desc='median', outname='median')
1014+
@Appender(_agg_doc)
10131015
def median(self, axis='major', skipna=True):
10141016
return self._reduce(nanops.nanmedian, axis=axis, skipna=skipna)
1015-
_add_docs(median, 'median', 'median')
10161017

1018+
@Substitution(desc='maximum', outname='maximum')
1019+
@Appender(_agg_doc)
10171020
def max(self, axis='major', skipna=True):
10181021
return self._reduce(nanops.nanmax, axis=axis, skipna=skipna)
1019-
_add_docs(max, 'maximum', 'maximum')
10201022

1023+
@Substitution(desc='minimum', outname='minimum')
1024+
@Appender(_agg_doc)
10211025
def min(self, axis='major', skipna=True):
10221026
return self._reduce(nanops.nanmin, axis=axis, skipna=skipna)
1023-
_add_docs(min, 'minimum', 'minimum')
10241027

10251028
def shift(self, lags, axis='major'):
10261029
"""

0 commit comments

Comments
 (0)