From d0d76ad379e651f356f269b97b79c8be19cf4252 Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Thu, 25 Feb 2021 21:37:42 -0800 Subject: [PATCH 1/3] MNT: let bad rcParam keys pass --- lib/matplotlib/__init__.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index c3d4aaf62d0b..a985d5230ed8 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -830,12 +830,17 @@ def rc_params_from_file(fname, fail_on_error=False, use_default_template=True): rcParamsOrig = RcParams(rcParams.copy()) # This also checks that all rcParams are indeed listed in the template. # Assigning to rcsetup.defaultParams is left only for backcompat. - defaultParams = rcsetup.defaultParams = { - # We want to resolve deprecated rcParams, but not backend... - key: [(rcsetup._auto_backend_sentinel if key == "backend" else - rcParamsDefault[key]), - validator] - for key, validator in rcsetup._validators.items()} + defaultParams = {} + for key, validator in rcsetup._validators.items(): + if key == 'backend': + defaultParams['backend'] = rcsetup._auto_backend_sentinel + elif key in rcParamsDefault.keys(): + defaultParams[key] = validator + else: + _api.warn_external(f'rcsetup key "{key}" not in the default' + ' rcParams') + rcsetup.defaultParams = defaultParams + if rcParams['axes.formatter.use_locale']: locale.setlocale(locale.LC_ALL, '') From e2a21aa6019f167769be71b86f2059582fdc79b1 Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Fri, 26 Feb 2021 22:09:40 -0800 Subject: [PATCH 2/3] FIX --- lib/matplotlib/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index a985d5230ed8..dbe577174916 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -833,9 +833,10 @@ def rc_params_from_file(fname, fail_on_error=False, use_default_template=True): defaultParams = {} for key, validator in rcsetup._validators.items(): if key == 'backend': - defaultParams['backend'] = rcsetup._auto_backend_sentinel + defaultParams['backend'] = [rcsetup._auto_backend_sentinel, + validator] elif key in rcParamsDefault.keys(): - defaultParams[key] = validator + defaultParams[key] = [rcParamsDefault[key], validator] else: _api.warn_external(f'rcsetup key "{key}" not in the default' ' rcParams') From 1a46563d12f89d37bea208a3fb7db144dbb53ddd Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Fri, 26 Feb 2021 23:26:08 -0800 Subject: [PATCH 3/3] TST: add test for matplotlibrc and rcsetup to be in sync --- lib/matplotlib/tests/test_rcparams.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/matplotlib/tests/test_rcparams.py b/lib/matplotlib/tests/test_rcparams.py index 4705b975d60a..a385edb3eace 100644 --- a/lib/matplotlib/tests/test_rcparams.py +++ b/lib/matplotlib/tests/test_rcparams.py @@ -13,6 +13,7 @@ from matplotlib import _api, _c_internal_utils import matplotlib.pyplot as plt import matplotlib.colors as mcolors +import matplotlib.rcsetup as rcsetup import numpy as np from matplotlib.rcsetup import ( validate_bool, @@ -31,6 +32,23 @@ _listify_validator) +def test_rc_validators_in_sync(): + # make sure that matplotlibrc.template and rcsetup._validators + # are in sync. + rc = mpl._rc_params_in_file( + 'matplotlibrc.template', + # Strip leading comment. + transform=lambda line: line[1:] if line.startswith("#") else line, + fail_on_error=True) + for key, validator in rcsetup._validators.items(): + if (key not in mpl._deprecated_remain_as_none and + key not in mpl._deprecated_ignore_map and + key[0] != '_'): + assert key in list(rc.keys()) + for key in list(rc.keys()): + assert key in list(rcsetup._validators.keys()) + + def test_rcparams(tmpdir): mpl.rc('text', usetex=False) mpl.rc('lines', linewidth=22)