134
134
135
135
136
136
import atexit
137
- from collections import namedtuple , ChainMap , defaultdict
137
+ from collections import namedtuple , ChainMap
138
138
from collections .abc import MutableMapping , Mapping
139
139
import contextlib
140
140
import functools
@@ -680,7 +680,7 @@ def _split_key(self, key, sep="."):
680
680
keys = key .split (sep , maxsplit = 1 )
681
681
return keys , len (keys )
682
682
683
- def _set (self , key , value ):
683
+ def _set (self , key , val ):
684
684
"""
685
685
Directly write data bypassing deprecation and validation logic.
686
686
@@ -701,10 +701,22 @@ def _set(self, key, value):
701
701
keys , depth = self ._split_key (key )
702
702
if depth == 1 :
703
703
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)" )
706
718
elif depth == 2 :
707
- self ._namespace_maps [keys [0 ]][keys [1 ]] = value
719
+ self ._namespace_maps [keys [0 ]][keys [1 ]] = val
708
720
709
721
def _get (self , key ):
710
722
"""
@@ -729,7 +741,7 @@ def _get(self, key):
729
741
if depth == 1 :
730
742
if key in self .single_key_set :
731
743
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
733
745
# to enable getting namespace parameters.
734
746
# return self._namespace_maps[key]
735
747
else :
@@ -796,22 +808,31 @@ def __getitem__(self, key):
796
808
797
809
def _get_backend_or_none (self ):
798
810
"""Get the requested backend, if any, without triggering resolution."""
799
- backend = self ._get ("default. backend" )
811
+ backend = self ._get ("backend" )
800
812
return None if backend is rcsetup ._auto_backend_sentinel else backend
801
813
802
814
def __delitem__ (self , key ):
803
815
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
808
828
809
829
def __contains__ (self , key ):
810
830
keys , depth = self ._split_key (key )
811
831
if depth == 1 :
812
832
if key in self .single_key_set :
813
833
return key in self ._namespace_maps ["default" ]
814
- return key in self ._namespace_maps
834
+ else :
835
+ return False
815
836
elif depth == 2 :
816
837
return any (key in mapping for mapping in self ._namespace_maps )
817
838
@@ -854,15 +875,22 @@ def items(self):
854
875
def pop (self , key ):
855
876
keys , depth = self ._split_key (key )
856
877
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)" )
858
884
elif depth == 2 :
859
- self ._namespace_mapping [keys [0 ]].pop (keys [1 ])
885
+ return self ._namespace_mapping [keys [0 ]].pop (keys [1 ])
860
886
861
887
def popitem (self ):
862
- return self ._mapping .popitem ()
888
+ raise NotImplementedError (
889
+ "popitem is not implemented for RcParams." )
863
890
864
891
def clear (self ):
865
- self ._mapping .clear ()
892
+ for namespace in self ._namespace_maps :
893
+ self ._namespace_maps [namespace ].clear ()
866
894
867
895
def setdefault (self , key , default = None ):
868
896
self [key ] = default
@@ -994,6 +1022,8 @@ def _rc_params_in_file(fname, transform=lambda x: x, fail_on_error=False):
994
1022
config = RcParams ()
995
1023
996
1024
for key , (val , line , line_no ) in rc_temp .items ():
1025
+ if key in config .single_key_set :
1026
+ key = f"default.{ key } "
997
1027
if key in rcsetup ._validators :
998
1028
if fail_on_error :
999
1029
config [key ] = val # try to convert to proper type or raise
0 commit comments