@@ -671,7 +671,8 @@ class RcParams(MutableMapping):
671
671
def __init__ (self , * args , ** kwargs ):
672
672
self ._rcvalues = ChainMap ({})
673
673
self .update (* args , ** kwargs )
674
- self ._rcvalues .new_child ()
674
+ self ._rcvalues = self ._rcvalues .new_child ()
675
+ self ._defaults = self ._rcvalues .maps [- 1 ]
675
676
676
677
def _set (self , key , val ):
677
678
"""
@@ -730,14 +731,12 @@ def __setitem__(self, key, val):
730
731
_api .warn_deprecated (
731
732
version , name = key , obj_type = "rcparam" , alternative = alt_key )
732
733
return
733
- elif key == 'backend' or key == "default.backend" :
734
+ elif key == 'backend' :
734
735
if val is rcsetup ._auto_backend_sentinel :
735
- if 'backend' in self or 'default.backend' in self :
736
+ if 'backend' in self :
736
737
return
737
738
try :
738
739
cval = self .validate [key ](val )
739
- # if key in self._single_key_set:
740
- # key = f"default.{key}"
741
740
except ValueError as ve :
742
741
raise ValueError (f"Key { key } : { ve } " ) from None
743
742
self ._set (key , cval )
@@ -769,10 +768,8 @@ def __getitem__(self, key):
769
768
770
769
return self ._get (key )
771
770
772
- def _get_default (self , key ):
773
- return self ._rcvalues .maps [- 1 ][key ]
774
-
775
771
def get_default (self , key ):
772
+ """Return default value for the key set during initialization."""
776
773
if key in _deprecated_map :
777
774
version , alt_key , alt_val , inverse_alt = _deprecated_map [key ]
778
775
_api .warn_deprecated (
@@ -783,15 +780,13 @@ def get_default(self, key):
783
780
version , alt_key = _deprecated_ignore_map [key ]
784
781
_api .warn_deprecated (
785
782
version , name = key , obj_type = "rcparam" , alternative = alt_key )
786
- return self ._get_default ( alt_key ) if alt_key else None
783
+ return self ._defaults [ alt_key ] if alt_key else None
787
784
788
- return self ._get_default ( key )
785
+ return self ._defaults [ key ]
789
786
790
787
def get_defaults (self ):
791
788
"""Return default values set during initialization."""
792
- defaults = self .copy ()
793
- defaults .clear ()
794
- return defaults
789
+ return self ._defaults .copy ()
795
790
796
791
def _get_backend_or_none (self ):
797
792
"""Get the requested backend, if any, without triggering resolution."""
@@ -845,7 +840,11 @@ def popitem(self):
845
840
raise NotImplementedError (
846
841
"popitem is not implemented for RcParams." )
847
842
843
+ @_api .deprecated ("3.8" )
848
844
def clear (self ):
845
+ pass
846
+
847
+ def reset (self ):
849
848
self ._rcvalues .clear ()
850
849
851
850
def setdefault (self , key , default = None ):
@@ -858,30 +857,6 @@ def setdefault(self, key, default=None):
858
857
self [key ] = default
859
858
return default
860
859
861
- def get (self , key , default = None ):
862
- try :
863
- return self [key ]
864
- except KeyError as e :
865
- return default
866
-
867
- def update (self , other = (), / , ** kwds ):
868
- """D.update([E, ]**F) -> None. Update D from mapping/iterable E and F.
869
- If E present and has a .keys() method, does: for k in E: D[k] = E[k]
870
- If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v
871
- In either case, this is followed by: for k, v in F.items(): D[k] = v
872
- """
873
- if isinstance (other , Mapping ):
874
- for key in other :
875
- self [key ] = other [key ]
876
- elif hasattr (other , "keys" ):
877
- for key in other .keys ():
878
- self [key ] = other [key ]
879
- else :
880
- for key , value in other :
881
- self [key ] = value
882
- for key , value in kwds .items ():
883
- self [key ] = value
884
-
885
860
def copy (self ):
886
861
return deepcopy (self )
887
862
@@ -1054,18 +1029,16 @@ def rc_params_from_file(fname, fail_on_error=False, use_default_template=True):
1054
1029
# Strip leading comment.
1055
1030
transform = lambda line : line [1 :] if line .startswith ("#" ) else line ,
1056
1031
fail_on_error = True )
1057
- # for key in rcsetup._hardcoded_defaults:
1058
- # space, subkey = key.split(".")
1059
- # if not rcParams._namespace_maps[space]:
1060
- # rcParams._namespace_maps[space] = ChainMap({})
1032
+ rcParams ._rcvalues = rcParams ._rcvalues .parents
1061
1033
rcParams .update (rcsetup ._hardcoded_defaults )
1062
1034
# Normally, the default matplotlibrc file contains *no* entry for backend (the
1063
1035
# corresponding line starts with ##, not #; we fill on _auto_backend_sentinel
1064
1036
# in that case. However, packagers can set a different default backend
1065
1037
# (resulting in a normal `#backend: foo` line) in which case we should *not*
1066
1038
# fill in _auto_backend_sentinel.
1067
- rcParams .setdefault ("backend" , rcsetup ._auto_backend_sentinel )
1068
1039
rcParams .update (_rc_params_in_file (matplotlib_fname ()))
1040
+ rcParams ._rcvalues = rcParams ._rcvalues .new_child ()
1041
+ rcParams .setdefault ("backend" , rcsetup ._auto_backend_sentinel )
1069
1042
rcParamsOrig = rcParams .copy ()
1070
1043
with _api .suppress_matplotlib_deprecation_warning ():
1071
1044
# This also checks that all rcParams are indeed listed in the template.
0 commit comments