Skip to content

Commit 47b48ee

Browse files
committed
Update a few functions in RcParams
1 parent d135342 commit 47b48ee

File tree

2 files changed

+51
-21
lines changed

2 files changed

+51
-21
lines changed

lib/matplotlib/__init__.py

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@
134134

135135

136136
import atexit
137-
from collections import namedtuple, ChainMap, defaultdict
137+
from collections import namedtuple, ChainMap
138138
from collections.abc import MutableMapping, Mapping
139139
import contextlib
140140
import functools
@@ -691,7 +691,7 @@ def _split_key(self, key, sep="."):
691691
keys = key.split(sep, maxsplit=1)
692692
return keys, len(keys)
693693

694-
def _set(self, key, value):
694+
def _set(self, key, val):
695695
"""
696696
Directly write data bypassing deprecation and validation logic.
697697
@@ -712,10 +712,22 @@ def _set(self, key, value):
712712
keys, depth = self._split_key(key)
713713
if depth == 1:
714714
if key in self.single_key_set:
715-
self._namespace_maps["default"][key] = value
716-
self._namespace_maps[key] = value
715+
self._namespace_maps["default"][key] = val
716+
# Uncomment the following line and remove the raise statement
717+
# to enable setting namespaces.
718+
# else:
719+
# if isinstance(val, dict):
720+
# self._namespace_maps[key] = ChainMap({}, val)
721+
# else:
722+
# raise ValueError(
723+
# f"{key} should be set using a dictionary but found "
724+
# f"{type(val)}")
725+
else:
726+
raise KeyError(
727+
f"{key} is not a valid rc parameter (see rcParams.keys() for "
728+
f"a list of valid parameters)")
717729
elif depth == 2:
718-
self._namespace_maps[keys[0]][keys[1]] = value
730+
self._namespace_maps[keys[0]][keys[1]] = val
719731

720732
def _get(self, key):
721733
"""
@@ -740,7 +752,7 @@ def _get(self, key):
740752
if depth == 1:
741753
if key in self.single_key_set:
742754
return self._namespace_maps["default"].get(key)
743-
# Comment the following line and remove the raise statement
755+
# Uncomment the following line and remove the raise statement
744756
# to enable getting namespace parameters.
745757
# return self._namespace_maps[key]
746758
else:
@@ -807,22 +819,31 @@ def __getitem__(self, key):
807819

808820
def _get_backend_or_none(self):
809821
"""Get the requested backend, if any, without triggering resolution."""
810-
backend = self._get("default.backend")
822+
backend = self._get("backend")
811823
return None if backend is rcsetup._auto_backend_sentinel else backend
812824

813825
def __delitem__(self, key):
814826
keys, depth = self._split_key(key)
815-
if depth == 1:
816-
del self._namespace_maps[key]
817-
elif depth == 2:
818-
del self._namespace_maps[keys[0]][keys[1]]
827+
try:
828+
if depth == 1:
829+
if key in self.single_key_set:
830+
del self._namespace_maps["default"][key]
831+
else:
832+
raise KeyError
833+
elif depth == 2:
834+
del self._namespace_maps[keys[0]][keys[1]]
835+
except KeyError as err:
836+
raise KeyError(
837+
f"{key} is not a valid rc parameter (see rcParams.keys() for "
838+
f"a list of valid parameters)") from err
819839

820840
def __contains__(self, key):
821841
keys, depth = self._split_key(key)
822842
if depth == 1:
823843
if key in self.single_key_set:
824844
return key in self._namespace_maps["default"]
825-
return key in self._namespace_maps
845+
else:
846+
return False
826847
elif depth == 2:
827848
return any(key in mapping for mapping in self._namespace_maps)
828849

@@ -865,15 +886,22 @@ def items(self):
865886
def pop(self, key):
866887
keys, depth = self._split_key(key)
867888
if depth == 1:
868-
self._mapping.pop()
889+
if key in self.single_key_set:
890+
return self._namespace_mapping["default"][key]
891+
else:
892+
raise KeyError(
893+
f"{key} is not a valid rc parameter (see rcParams.keys() for "
894+
f"a list of valid parameters)")
869895
elif depth == 2:
870-
self._namespace_mapping[keys[0]].pop(keys[1])
896+
return self._namespace_mapping[keys[0]].pop(keys[1])
871897

872898
def popitem(self):
873-
return self._mapping.popitem()
899+
raise NotImplementedError(
900+
"popitem is not implemented for RcParams.")
874901

875902
def clear(self):
876-
self._mapping.clear()
903+
for namespace in self._namespace_maps:
904+
self._namespace_maps[namespace].clear()
877905

878906
def setdefault(self, key, default=None):
879907
self[key] = default
@@ -1005,6 +1033,8 @@ def _rc_params_in_file(fname, transform=lambda x: x, fail_on_error=False):
10051033
config = RcParams()
10061034

10071035
for key, (val, line, line_no) in rc_temp.items():
1036+
if key in config.single_key_set:
1037+
key = f"default.{key}"
10081038
if key in rcsetup._validators:
10091039
if fail_on_error:
10101040
config[key] = val # try to convert to proper type or raise

lib/matplotlib/mpl-data/matplotlibrc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
## PS PDF SVG Template
8383
## You can also deploy your own backend outside of Matplotlib by referring to
8484
## the module name (which must be in the PYTHONPATH) as 'module://my_backend'.
85-
##default.backend: Agg
85+
##backend: Agg
8686

8787
## The port to use for the web server in the WebAgg backend.
8888
#webagg.port: 8988
@@ -100,12 +100,12 @@
100100
## If you are running pyplot inside a GUI and your backend choice
101101
## conflicts, we will automatically try to find a compatible one for
102102
## you if backend_fallback is True
103-
#default.backend_fallback: True
103+
#backend_fallback: True
104104

105-
#default.interactive: False
105+
#interactive: False
106106
#figure.hooks: # list of dotted.module.name:dotted.callable.name
107-
#default.toolbar: toolbar2 # {None, toolbar2, toolmanager}
108-
#default.timezone: UTC # a pytz timezone string, e.g., US/Central or Europe/Paris
107+
#toolbar: toolbar2 # {None, toolbar2, toolmanager}
108+
#timezone: UTC # a pytz timezone string, e.g., US/Central or Europe/Paris
109109

110110

111111
## ***************************************************************************

0 commit comments

Comments
 (0)