Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 676eeb4

Browse files
committed
ENH: add white-list of args/kwargs to relpace
If white list is provided, only try to replace those.
1 parent 1cf0f38 commit 676eeb4

File tree

2 files changed

+73
-59
lines changed

2 files changed

+73
-59
lines changed

lib/matplotlib/__init__.py

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,7 +1528,7 @@ def _replacer(data, key):
15281528
return key
15291529

15301530

1531-
def unpack_labeled_data(func):
1531+
def unpack_labeled_data(wl_args=None, wl_kwargs=None):
15321532
"""
15331533
A decorator to add a 'data' kwarg to any a function. The signature
15341534
of the input function must be ::
@@ -1537,20 +1537,33 @@ def foo(ax, *args, **kwargs)
15371537
15381538
so this is suitable for use with Axes methods.
15391539
"""
1540-
@functools.wraps(func)
1541-
def inner(ax, *args, **kwargs):
1542-
data = kwargs.pop('data', None)
1543-
if data is not None:
1544-
if rcParams['unpack_labeled']:
1545-
args = tuple(_replacer(data, a) for a in args)
1546-
kwargs = dict((k, _replacer(data, v))
1547-
for k, v in six.iteritems(kwargs))
1548-
else:
1549-
raise ValueError("Trying to unpack labeled data, but "
1550-
"rcParams['unpack_labeled'] is False")
1551-
1552-
return func(ax, *args, **kwargs)
1553-
return inner
1540+
if wl_kwargs is not None:
1541+
wl_kwargs = set(wl_kwargs)
1542+
if wl_args is not None:
1543+
wl_args = set(wl_args)
1544+
1545+
def param(func):
1546+
@functools.wraps(func)
1547+
def inner(ax, *args, **kwargs):
1548+
data = kwargs.pop('data', None)
1549+
if data is not None:
1550+
if wl_args is None:
1551+
args = tuple(_replacer(data, a) for a in args)
1552+
else:
1553+
args = tuple(_replacer(data, a) if j in wl_args else a
1554+
for j, a in enumerate(args))
1555+
1556+
if wl_kwargs is None:
1557+
kwargs = dict((k, _replacer(data, v))
1558+
for k, v in six.iteritems(kwargs))
1559+
else:
1560+
kwargs = dict(
1561+
(k, _replacer(data, v) if k in wl_kwargs else v)
1562+
for k, v in six.iteritems(kwargs))
1563+
1564+
return func(ax, *args, **kwargs)
1565+
return inner
1566+
return param
15541567

15551568
verbose.report('matplotlib version %s' % __version__)
15561569
verbose.report('verbose.level %s' % verbose.level)

0 commit comments

Comments
 (0)