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

Skip to content

Commit fd1d107

Browse files
committed
Deprecate clear and other small updates for review
1 parent 8aa1b8f commit fd1d107

File tree

2 files changed

+23
-46
lines changed

2 files changed

+23
-46
lines changed

lib/matplotlib/__init__.py

Lines changed: 15 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,8 @@ class RcParams(MutableMapping):
671671
def __init__(self, *args, **kwargs):
672672
self._rcvalues = ChainMap({})
673673
self.update(*args, **kwargs)
674-
self._rcvalues.new_child()
674+
self._rcvalues = self._rcvalues.new_child()
675+
self._defaults = self._rcvalues.maps[-1]
675676

676677
def _set(self, key, val):
677678
"""
@@ -730,14 +731,12 @@ def __setitem__(self, key, val):
730731
_api.warn_deprecated(
731732
version, name=key, obj_type="rcparam", alternative=alt_key)
732733
return
733-
elif key == 'backend' or key == "default.backend":
734+
elif key == 'backend':
734735
if val is rcsetup._auto_backend_sentinel:
735-
if 'backend' in self or 'default.backend' in self:
736+
if 'backend' in self:
736737
return
737738
try:
738739
cval = self.validate[key](val)
739-
# if key in self._single_key_set:
740-
# key = f"default.{key}"
741740
except ValueError as ve:
742741
raise ValueError(f"Key {key}: {ve}") from None
743742
self._set(key, cval)
@@ -769,10 +768,8 @@ def __getitem__(self, key):
769768

770769
return self._get(key)
771770

772-
def _get_default(self, key):
773-
return self._rcvalues.maps[-1][key]
774-
775771
def get_default(self, key):
772+
"""Return default value for the key set during initialization."""
776773
if key in _deprecated_map:
777774
version, alt_key, alt_val, inverse_alt = _deprecated_map[key]
778775
_api.warn_deprecated(
@@ -783,15 +780,13 @@ def get_default(self, key):
783780
version, alt_key = _deprecated_ignore_map[key]
784781
_api.warn_deprecated(
785782
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
787784

788-
return self._get_default(key)
785+
return self._defaults[key]
789786

790787
def get_defaults(self):
791788
"""Return default values set during initialization."""
792-
defaults = self.copy()
793-
defaults.clear()
794-
return defaults
789+
return self._defaults.copy()
795790

796791
def _get_backend_or_none(self):
797792
"""Get the requested backend, if any, without triggering resolution."""
@@ -845,7 +840,11 @@ def popitem(self):
845840
raise NotImplementedError(
846841
"popitem is not implemented for RcParams.")
847842

843+
@_api.deprecated("3.8")
848844
def clear(self):
845+
pass
846+
847+
def reset(self):
849848
self._rcvalues.clear()
850849

851850
def setdefault(self, key, default=None):
@@ -858,30 +857,6 @@ def setdefault(self, key, default=None):
858857
self[key] = default
859858
return default
860859

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-
885860
def copy(self):
886861
return deepcopy(self)
887862

@@ -1054,18 +1029,16 @@ def rc_params_from_file(fname, fail_on_error=False, use_default_template=True):
10541029
# Strip leading comment.
10551030
transform=lambda line: line[1:] if line.startswith("#") else line,
10561031
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
10611033
rcParams.update(rcsetup._hardcoded_defaults)
10621034
# Normally, the default matplotlibrc file contains *no* entry for backend (the
10631035
# corresponding line starts with ##, not #; we fill on _auto_backend_sentinel
10641036
# in that case. However, packagers can set a different default backend
10651037
# (resulting in a normal `#backend: foo` line) in which case we should *not*
10661038
# fill in _auto_backend_sentinel.
1067-
rcParams.setdefault("backend", rcsetup._auto_backend_sentinel)
10681039
rcParams.update(_rc_params_in_file(matplotlib_fname()))
1040+
rcParams._rcvalues = rcParams._rcvalues.new_child()
1041+
rcParams.setdefault("backend", rcsetup._auto_backend_sentinel)
10691042
rcParamsOrig = rcParams.copy()
10701043
with _api.suppress_matplotlib_deprecation_warning():
10711044
# This also checks that all rcParams are indeed listed in the template.

lib/matplotlib/tests/test_rcparams.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -637,8 +637,7 @@ def test_rcparams_getdefault():
637637
def test_rcparams_getdefaults():
638638
mpl.rc("image", lut=128)
639639
defaults = mpl.rcParams.get_defaults()
640-
mpl.rcParams.clear()
641-
assert defaults == mpl.rcParams
640+
assert defaults == mpl.rcParams._defaults
642641

643642

644643
def test_rcdefaults():
@@ -655,7 +654,12 @@ def test_rcdefaults():
655654
assert mpl.rcParams["lines.linewidth"] == lw
656655

657656

658-
def test_rcparams_clear():
657+
def test_rcparams_reset():
659658
mpl.rcParams["image.lut"] = 128
660-
mpl.rcParams.clear()
659+
mpl.rcParams.reset()
661660
assert mpl.rcParams["image.lut"] == 256
661+
662+
663+
def test_rcparams_clear():
664+
with pytest.raises(mpl.MatplotlibDeprecationWarning):
665+
mpl.rcParams.clear()

0 commit comments

Comments
 (0)