123
123
import importlib
124
124
import inspect
125
125
from inspect import Parameter
126
- import itertools
127
126
import locale
128
127
import logging
129
128
import os
130
129
from pathlib import Path
130
+ import pprint
131
131
import re
132
132
import shutil
133
133
import stat
@@ -800,23 +800,29 @@ def gen_candidates():
800
800
return fname
801
801
802
802
803
- # names of keys to deprecate
804
- # the values are a tuple of (new_name, f_old_2_new, f_new_2_old)
805
- # the inverse function may be `None`
803
+ # rcParams deprecated and automatically mapped to another key.
804
+ # Values are tuples of (version, new_name, f_old2new, f_new2old).
806
805
_deprecated_map = {}
807
806
808
- _deprecated_ignore_map = {'nbagg.transparent' : 'figure.facecolor' }
807
+ # rcParams deprecated; some can manually be mapped to another key.
808
+ # Values are tuples of (version, new_name_or_None).
809
+ _deprecated_ignore_map = {
810
+ 'text.dvipnghack' : ('2.1' , None ),
811
+ 'nbagg.transparent' : ('2.2' , 'figure.facecolor' ),
812
+ 'plugins.directory' : ('2.2' , None ),
813
+ 'pgf.debug' : ('3.0' , None ),
814
+ }
809
815
810
- _obsolete_set = {'pgf.debug' , 'plugins.directory' , 'text.dvipnghack' }
816
+ # rcParams deprecated; can use None to suppress warnings; remain actually
817
+ # listed in the rcParams (not included in _all_deprecated).
818
+ # Values are typles of (version,)
819
+ _deprecated_remain_as_none = {
820
+ 'axes.hold' : ('2.1' ,),
821
+ 'backend.qt4' : ('2.2' ,),
822
+ 'backend.qt5' : ('2.2' ,),
823
+ }
811
824
812
- # The following may use a value of None to suppress the warning.
813
- # do NOT include in _all_deprecated
814
- _deprecated_set = {'axes.hold' ,
815
- 'backend.qt4' ,
816
- 'backend.qt5' }
817
-
818
- _all_deprecated = set (itertools .chain (
819
- _deprecated_ignore_map , _deprecated_map , _obsolete_set ))
825
+ _all_deprecated = {* _deprecated_map , * _deprecated_ignore_map }
820
826
821
827
822
828
class RcParams (MutableMapping , dict ):
@@ -831,16 +837,35 @@ class RcParams(MutableMapping, dict):
831
837
validate = {key : converter
832
838
for key , (default , converter ) in defaultParams .items ()
833
839
if key not in _all_deprecated }
834
- msg_depr = "%s is deprecated and replaced with %s; please use the latter."
835
- msg_depr_set = ("%s is deprecated. Please remove it from your "
836
- "matplotlibrc and/or style files." )
837
- msg_depr_ignore = "%s is deprecated and ignored. Use %s instead."
838
- msg_obsolete = ("%s is obsolete. Please remove it from your matplotlibrc "
839
- "and/or style files." )
840
- msg_backend_obsolete = ("The {} rcParam was deprecated in version 2.2. In"
841
- " order to force the use of a specific Qt binding,"
842
- " either import that binding first, or set the "
843
- "QT_API environment variable." )
840
+
841
+ @property
842
+ @cbook .deprecated ("3.0" )
843
+ def msg_depr (self ):
844
+ return "%s is deprecated and replaced with %s; please use the latter."
845
+
846
+ @property
847
+ @cbook .deprecated ("3.0" )
848
+ def msg_depr_ignore (self ):
849
+ return "%s is deprecated and ignored. Use %s instead."
850
+
851
+ @property
852
+ @cbook .deprecated ("3.0" )
853
+ def msg_depr_set (self ):
854
+ return ("%s is deprecated. Please remove it from your matplotlibrc "
855
+ "and/or style files." )
856
+
857
+ @property
858
+ @cbook .deprecated ("3.0" )
859
+ def msg_obsolete (self ):
860
+ return ("%s is obsolete. Please remove it from your matplotlibrc "
861
+ "and/or style files." )
862
+
863
+ @property
864
+ @cbook .deprecated ("3.0" )
865
+ def msg_backend_obsolete (self ):
866
+ return ("The {} rcParam was deprecated in version 2.2. In order to "
867
+ "force the use of a specific Qt binding, either import that "
868
+ "binding first, or set the QT_API environment variable." )
844
869
845
870
# validate values on the way in
846
871
def __init__ (self , * args , ** kwargs ):
@@ -849,26 +874,25 @@ def __init__(self, *args, **kwargs):
849
874
def __setitem__ (self , key , val ):
850
875
try :
851
876
if key in _deprecated_map :
852
- alt_key , alt_val , inverse_alt = _deprecated_map [key ]
853
- warnings . warn ( self . msg_depr % ( key , alt_key ),
854
- mplDeprecation )
877
+ version , alt_key , alt_val , inverse_alt = _deprecated_map [key ]
878
+ cbook . warn_deprecated (
879
+ version , key , obj_type = "rcparam" , alternative = alt_key )
855
880
key = alt_key
856
881
val = alt_val (val )
857
- elif key in _deprecated_set and val is not None :
882
+ elif key in _deprecated_remain_as_none and val is not None :
883
+ version , = _deprecated_remain_as_none [key ]
884
+ addendum = None
858
885
if key .startswith ('backend' ):
859
- warnings .warn (self .msg_backend_obsolete .format (key ),
860
- mplDeprecation )
861
- else :
862
- warnings .warn (self .msg_depr_set % key ,
863
- mplDeprecation )
886
+ addendum = (
887
+ "In order to force the use of a specific Qt binding, "
888
+ "either import that binding first, or set the QT_API "
889
+ "environment variable." )
890
+ cbook .warn_deprecated (
891
+ "2.2" , key , obj_type = "rcparam" , addendum = addendum )
864
892
elif key in _deprecated_ignore_map :
865
- alt = _deprecated_ignore_map [key ]
866
- warnings .warn (self .msg_depr_ignore % (key , alt ),
867
- mplDeprecation )
868
- return
869
- elif key in _obsolete_set :
870
- warnings .warn (self .msg_obsolete % (key , ),
871
- mplDeprecation )
893
+ version , alt_key = _deprecated_ignore_map [key ]
894
+ cbook .warn_deprecated (
895
+ version , key , obj_type = "rcparam" , alternative = alt_key )
872
896
return
873
897
try :
874
898
cval = self .validate [key ](val )
@@ -881,42 +905,30 @@ def __setitem__(self, key, val):
881
905
'list of valid parameters.' % (key ,))
882
906
883
907
def __getitem__ (self , key ):
884
- inverse_alt = None
885
908
if key in _deprecated_map :
886
- alt_key , alt_val , inverse_alt = _deprecated_map [key ]
887
- warnings . warn ( self . msg_depr % ( key , alt_key ),
888
- mplDeprecation )
889
- key = alt_key
909
+ version , alt_key , alt_val , inverse_alt = _deprecated_map [key ]
910
+ cbook . warn_deprecated (
911
+ version , key , obj_type = "rcparam" , alternative = alt_key )
912
+ return inverse_alt ( dict . __getitem__ ( self , alt_key ))
890
913
891
914
elif key in _deprecated_ignore_map :
892
- alt = _deprecated_ignore_map [key ]
893
- warnings .warn (self .msg_depr_ignore % (key , alt ),
894
- mplDeprecation )
895
- key = alt
896
-
897
- elif key in _obsolete_set :
898
- warnings .warn (self .msg_obsolete % (key , ),
899
- mplDeprecation )
900
- return None
901
-
902
- val = dict .__getitem__ (self , key )
903
- if inverse_alt is not None :
904
- return inverse_alt (val )
905
- else :
906
- return val
915
+ version , alt_key = _deprecated_ignore_map [key ]
916
+ cbook .warn_deprecated (
917
+ version , key , obj_type , alternative = alt_key )
918
+ return dict .__getitem__ (self , alt_key ) if alt_key else None
919
+
920
+ return dict .__getitem__ (self , key )
907
921
908
922
def __repr__ (self ):
909
- import pprint
910
923
class_name = self .__class__ .__name__
911
924
indent = len (class_name ) + 1
912
925
repr_split = pprint .pformat (dict (self ), indent = 1 ,
913
926
width = 80 - indent ).split ('\n ' )
914
927
repr_indented = ('\n ' + ' ' * indent ).join (repr_split )
915
- return '{0 }({1 })' .format (class_name , repr_indented )
928
+ return '{}({})' .format (class_name , repr_indented )
916
929
917
930
def __str__ (self ):
918
- return '\n ' .join ('{0}: {1}' .format (k , v )
919
- for k , v in sorted (self .items ()))
931
+ return '\n ' .join (map ('{0[0]}: {0[1]}' .format , sorted (self .items ())))
920
932
921
933
def __iter__ (self ):
922
934
"""Yield sorted list of keys."""
@@ -1043,10 +1055,10 @@ def _rc_params_in_file(fname, fail_on_error=False):
1043
1055
warnings .warn ('Bad val "%s" on %s\n \t %s' %
1044
1056
(val , error_details , msg ))
1045
1057
elif key in _deprecated_ignore_map :
1046
- warnings . warn ( '%s is deprecated. Update your matplotlibrc to use '
1047
- '%s instead.' % ( key , _deprecated_ignore_map [ key ]),
1048
- mplDeprecation )
1049
-
1058
+ version , alt_key = _deprecated_ignore_map [ key ]
1059
+ cbook . warn_deprecated (
1060
+ version , key , alternative = alt_key ,
1061
+ addendum = "Please update your matplotlibrc." )
1050
1062
else :
1051
1063
print ("""
1052
1064
Bad key "%s" on line %d in
0 commit comments