diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index c3d4aaf62d0b..dbe577174916 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -830,12 +830,18 @@ 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, + validator] + elif key in rcParamsDefault.keys(): + defaultParams[key] = [rcParamsDefault[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, '') 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)