@@ -681,17 +681,22 @@ class RcParams(MutableMapping):
681
681
def __init__ (self , * args , ** kwargs ):
682
682
self ._namespace_maps = {name : ChainMap ({}) for name in self .namespaces }
683
683
self .update (* args , ** kwargs )
684
- self ._namespace_maps = {
685
- name : mapping .new_child ()
686
- for name , mapping in self ._namespace_maps .items ()
687
- }
684
+ self ._new_child ()
688
685
689
686
@staticmethod
690
687
@functools .lru_cache
691
688
def _split_key (key , sep = "." ):
692
689
keys = key .split (sep , maxsplit = 1 )
693
690
return keys , len (keys )
694
691
692
+ def _new_child (self ):
693
+ for space in self ._namespace_maps .keys ():
694
+ self ._namespace_maps [space ] = self ._namespace_maps [space ].new_child ()
695
+
696
+ def _parents (self ):
697
+ for space in self ._namespace_maps .keys ():
698
+ self ._namespace_maps [space ] = self ._namespace_maps [space ].parents
699
+
695
700
def _set (self , key , val ):
696
701
"""
697
702
Directly write data bypassing deprecation and validation logic.
@@ -818,6 +823,36 @@ def __getitem__(self, key):
818
823
819
824
return self ._get (key )
820
825
826
+ def _get_default (self , key ):
827
+ keys , depth = self ._split_key (key )
828
+ if depth == 1 :
829
+ if key in self .single_key_set :
830
+ return self ._namespace_maps ["default" ].get (key )
831
+ # Uncomment the following line and remove the raise statement
832
+ # to enable getting namespace parameters.
833
+ # return self._namespace_maps[key]
834
+ else :
835
+ raise KeyError (
836
+ f"{ key } is not a valid rc parameter (see rcParams.keys() for "
837
+ f"a list of valid parameters)" )
838
+ elif depth == 2 :
839
+ return self ._namespace_maps [keys [0 ]].maps [- 1 ].get (keys [1 ])
840
+
841
+ def getdefault (self , key ):
842
+ if key in _deprecated_map :
843
+ version , alt_key , alt_val , inverse_alt = _deprecated_map [key ]
844
+ _api .warn_deprecated (
845
+ version , name = key , obj_type = "rcparam" , alternative = alt_key )
846
+ return inverse_alt (self ._get (alt_key ))
847
+
848
+ elif key in _deprecated_ignore_map :
849
+ version , alt_key = _deprecated_ignore_map [key ]
850
+ _api .warn_deprecated (
851
+ version , name = key , obj_type = "rcparam" , alternative = alt_key )
852
+ return self ._get_default (alt_key ) if alt_key else None
853
+
854
+ return self ._get_default (key )
855
+
821
856
def _get_backend_or_none (self ):
822
857
"""Get the requested backend, if any, without triggering resolution."""
823
858
backend = self ._get ("backend" )
@@ -1021,6 +1056,7 @@ def _rc_params_in_file(fname, transform=lambda x: x, fail_on_error=False):
1021
1056
raise
1022
1057
1023
1058
config = RcParams ()
1059
+ config ._parents ()
1024
1060
1025
1061
for key , (val , line , line_no ) in rc_temp .items ():
1026
1062
if key in rcsetup ._validators :
@@ -1049,6 +1085,7 @@ def _rc_params_in_file(fname, transform=lambda x: x, fail_on_error=False):
1049
1085
or from the matplotlib source distribution""" ,
1050
1086
dict (key = key , fname = fname , line_no = line_no ,
1051
1087
line = line .rstrip ('\n ' ), version = version ))
1088
+ config ._new_child ()
1052
1089
return config
1053
1090
1054
1091
@@ -1101,6 +1138,7 @@ def rc_params_from_file(fname, fail_on_error=False, use_default_template=True):
1101
1138
# fill in _auto_backend_sentinel.
1102
1139
rcParamsDefault .setdefault ("backend" , rcsetup ._auto_backend_sentinel )
1103
1140
rcParams = RcParams ()
1141
+ rcParams ._parents ()
1104
1142
rcParams .update (rcParamsDefault .items ())
1105
1143
rcParams .update (_rc_params_in_file (matplotlib_fname ()))
1106
1144
rcParamsOrig = rcParams .copy ()
@@ -1115,6 +1153,7 @@ def rc_params_from_file(fname, fail_on_error=False, use_default_template=True):
1115
1153
for key , validator in rcsetup ._validators .items ()}
1116
1154
if rcParams ['axes.formatter.use_locale' ]:
1117
1155
locale .setlocale (locale .LC_ALL , '' )
1156
+ rcParams ._new_child ()
1118
1157
1119
1158
1120
1159
def rc (group , ** kwargs ):
@@ -1318,10 +1357,7 @@ def rc_context(rc=None, fname=None):
1318
1357
finally :
1319
1358
# Revert to the original rcs.
1320
1359
backend = rcParams ["backend" ]
1321
- for space in rcParams ._namespace_maps .keys ():
1322
- rcParams ._namespace_maps [space ] = rcParams ._namespace_maps [
1323
- space
1324
- ].parents
1360
+ rcParams ._parents ()
1325
1361
rcParams ["backend" ] = backend
1326
1362
1327
1363
0 commit comments