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

Skip to content

Commit 88b068d

Browse files
committed
Update a few functions in RcParams
1 parent 169d535 commit 88b068d

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
@@ -680,7 +680,7 @@ def _split_key(self, key, sep="."):
680680
keys = key.split(sep, maxsplit=1)
681681
return keys, len(keys)
682682

683-
def _set(self, key, value):
683+
def _set(self, key, val):
684684
"""
685685
Directly write data bypassing deprecation and validation logic.
686686
@@ -701,10 +701,22 @@ def _set(self, key, value):
701701
keys, depth = self._split_key(key)
702702
if depth == 1:
703703
if key in self.single_key_set:
704-
self._namespace_maps["default"][key] = value
705-
self._namespace_maps[key] = value
704+
self._namespace_maps["default"][key] = val
705+
# Uncomment the following line and remove the raise statement
706+
# to enable setting namespaces.
707+
# else:
708+
# if isinstance(val, dict):
709+
# self._namespace_maps[key] = ChainMap({}, val)
710+
# else:
711+
# raise ValueError(
712+
# f"{key} should be set using a dictionary but found "
713+
# f"{type(val)}")
714+
else:
715+
raise KeyError(
716+
f"{key} is not a valid rc parameter (see rcParams.keys() for "
717+
f"a list of valid parameters)")
706718
elif depth == 2:
707-
self._namespace_maps[keys[0]][keys[1]] = value
719+
self._namespace_maps[keys[0]][keys[1]] = val
708720

709721
def _get(self, key):
710722
"""
@@ -729,7 +741,7 @@ def _get(self, key):
729741
if depth == 1:
730742
if key in self.single_key_set:
731743
return self._namespace_maps["default"].get(key)
732-
# Comment the following line and remove the raise statement
744+
# Uncomment the following line and remove the raise statement
733745
# to enable getting namespace parameters.
734746
# return self._namespace_maps[key]
735747
else:
@@ -796,22 +808,31 @@ def __getitem__(self, key):
796808

797809
def _get_backend_or_none(self):
798810
"""Get the requested backend, if any, without triggering resolution."""
799-
backend = self._get("default.backend")
811+
backend = self._get("backend")
800812
return None if backend is rcsetup._auto_backend_sentinel else backend
801813

802814
def __delitem__(self, key):
803815
keys, depth = self._split_key(key)
804-
if depth == 1:
805-
del self._namespace_maps[key]
806-
elif depth == 2:
807-
del self._namespace_maps[keys[0]][keys[1]]
816+
try:
817+
if depth == 1:
818+
if key in self.single_key_set:
819+
del self._namespace_maps["default"][key]
820+
else:
821+
raise KeyError
822+
elif depth == 2:
823+
del self._namespace_maps[keys[0]][keys[1]]
824+
except KeyError as err:
825+
raise KeyError(
826+
f"{key} is not a valid rc parameter (see rcParams.keys() for "
827+
f"a list of valid parameters)") from err
808828

809829
def __contains__(self, key):
810830
keys, depth = self._split_key(key)
811831
if depth == 1:
812832
if key in self.single_key_set:
813833
return key in self._namespace_maps["default"]
814-
return key in self._namespace_maps
834+
else:
835+
return False
815836
elif depth == 2:
816837
return any(key in mapping for mapping in self._namespace_maps)
817838

@@ -854,15 +875,22 @@ def items(self):
854875
def pop(self, key):
855876
keys, depth = self._split_key(key)
856877
if depth == 1:
857-
self._mapping.pop()
878+
if key in self.single_key_set:
879+
return self._namespace_mapping["default"][key]
880+
else:
881+
raise KeyError(
882+
f"{key} is not a valid rc parameter (see rcParams.keys() for "
883+
f"a list of valid parameters)")
858884
elif depth == 2:
859-
self._namespace_mapping[keys[0]].pop(keys[1])
885+
return self._namespace_mapping[keys[0]].pop(keys[1])
860886

861887
def popitem(self):
862-
return self._mapping.popitem()
888+
raise NotImplementedError(
889+
"popitem is not implemented for RcParams.")
863890

864891
def clear(self):
865-
self._mapping.clear()
892+
for namespace in self._namespace_maps:
893+
self._namespace_maps[namespace].clear()
866894

867895
def setdefault(self, key, default=None):
868896
self[key] = default
@@ -994,6 +1022,8 @@ def _rc_params_in_file(fname, transform=lambda x: x, fail_on_error=False):
9941022
config = RcParams()
9951023

9961024
for key, (val, line, line_no) in rc_temp.items():
1025+
if key in config.single_key_set:
1026+
key = f"default.{key}"
9971027
if key in rcsetup._validators:
9981028
if fail_on_error:
9991029
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)