Ticket #7498: 7498-no-matplotlib.patch

File 7498-no-matplotlib.patch, 6.3 KB (added by robertwb, 12 years ago)
  • sage/plot/plot.py

    # HG changeset patch
    # User Robert Bradshaw <robertwb@math.washington.edu>
    # Date 1258699226 28800
    # Node ID ee7dca3c711b08e7a8c2972bf2ce3e09163040c0
    # Parent  17b29c159d411352f74be0c3e87c551c26a372f1
    Due to startup time issues, don't avoid importing matplotlib until it's needed.
    
    The diff looks messy, but basically the class is simply indented without change
    to go inside the function.
    
    diff -r 17b29c159d41 -r ee7dca3c711b sage/plot/plot.py
    a b  
    255255    sage: p = plot(sin(x), (x, 0,2*pi))
    256256    sage: Q = loads(dumps(p))
    257257
     258Verify that a clean sage startup does *not* import matplotlib::
     259
     260    sage: os.system("sage -c \"if 'matplotlib' in sys.modules: sys.exit(1)\"")
     261    0
     262
    258263AUTHORS:
    259264
    260265- Alex Clemesha and William Stein (2006-04-10): initial version
     
    19651970            figure.savefig(filename,dpi=dpi,bbox_inches='tight',**options)
    19661971
    19671972
     1973_SelectiveFormatterClass = None
    19681974
    1969 from matplotlib.ticker import Formatter
     1975def SelectiveFormatter(formatter, skip_values):
    19701976
    1971 class SelectiveFormatter(Formatter):
    19721977    """
    19731978    This matplotlib formatter selectively omits some tick values and
    19741979    passes the rest on to a specified formatter.
     
    19911996        sage: ax.xaxis.set_major_formatter(formatter)
    19921997        sage: fig.savefig(os.path.join(SAGE_TMP, 'test.png'))
    19931998    """
    1994     def __init__(self, formatter,skip_values):
    1995         """
    1996         Initialize a SelectiveFormatter object.
     1999    global _SelectiveFormatterClass
     2000    if _SelectiveFormatterClass is None:
     2001   
     2002        from matplotlib.ticker import Formatter
    19972003
    1998         INPUT:
     2004        class _SelectiveFormatterClass(Formatter):
     2005            def __init__(self, formatter,skip_values):
     2006                """
     2007                Initialize a SelectiveFormatter object.
    19992008
    2000           - formatter -- the formatter object to which we should pass labels
     2009                INPUT:
    20012010
    2002           - skip_values -- a list of values that we should skip when
    2003             formatting the tick labels
     2011                  - formatter -- the formatter object to which we should pass labels
    20042012
    2005         EXAMPLES::
     2013                  - skip_values -- a list of values that we should skip when
     2014                    formatting the tick labels
    20062015
    2007             sage: from sage.plot.plot import SelectiveFormatter
    2008             sage: import matplotlib.pyplot as plt
    2009             sage: import numpy
    2010             sage: fig=plt.figure()
    2011             sage: ax=fig.add_subplot(111)
    2012             sage: t = numpy.arange(0.0, 2.0, 0.01)
    2013             sage: s = numpy.sin(2*numpy.pi*t)
    2014             sage: line=ax.plot(t, s)
    2015             sage: formatter=SelectiveFormatter(ax.xaxis.get_major_formatter(),skip_values=[0,1])
    2016             sage: ax.xaxis.set_major_formatter(formatter)
    2017             sage: fig.savefig(os.path.join(SAGE_TMP, 'test.png'))
    2018         """
    2019         self.formatter=formatter
    2020         self.skip_values=skip_values
    2021     def set_locs(self, locs):
    2022         """
    2023         Set the locations for the ticks that are not skipped.
    2024        
    2025         EXAMPLES::
    2026             sage: from sage.plot.plot import SelectiveFormatter
    2027             sage: import matplotlib.ticker
    2028             sage: formatter=SelectiveFormatter(matplotlib.ticker.Formatter(),skip_values=[0,200])
    2029             sage: formatter.set_locs([i*100 for i in range(10)])
    2030         """
    2031         self.formatter.set_locs([l for l in locs if l not in self.skip_values])
    2032     def __call__(self, x, *args, **kwds):
    2033         """
    2034         Return the format for tick val *x* at position *pos*
     2016                EXAMPLES::
    20352017
    2036         EXAMPLES::
     2018                    sage: from sage.plot.plot import SelectiveFormatter
     2019                    sage: import matplotlib.pyplot as plt
     2020                    sage: import numpy
     2021                    sage: fig=plt.figure()
     2022                    sage: ax=fig.add_subplot(111)
     2023                    sage: t = numpy.arange(0.0, 2.0, 0.01)
     2024                    sage: s = numpy.sin(2*numpy.pi*t)
     2025                    sage: line=ax.plot(t, s)
     2026                    sage: formatter=SelectiveFormatter(ax.xaxis.get_major_formatter(),skip_values=[0,1])
     2027                    sage: ax.xaxis.set_major_formatter(formatter)
     2028                    sage: fig.savefig(os.path.join(SAGE_TMP, 'test.png'))
     2029                """
     2030                self.formatter=formatter
     2031                self.skip_values=skip_values
     2032            def set_locs(self, locs):
     2033                """
     2034                Set the locations for the ticks that are not skipped.
     2035               
     2036                EXAMPLES::
     2037                    sage: from sage.plot.plot import SelectiveFormatter
     2038                    sage: import matplotlib.ticker
     2039                    sage: formatter=SelectiveFormatter(matplotlib.ticker.Formatter(),skip_values=[0,200])
     2040                    sage: formatter.set_locs([i*100 for i in range(10)])
     2041                """
     2042                self.formatter.set_locs([l for l in locs if l not in self.skip_values])
     2043            def __call__(self, x, *args, **kwds):
     2044                """
     2045                Return the format for tick val *x* at position *pos*
    20372046
    2038             sage: from sage.plot.plot import SelectiveFormatter
    2039             sage: import matplotlib.ticker
    2040             sage: formatter=SelectiveFormatter(matplotlib.ticker.FixedFormatter(['a','b']),skip_values=[0,2])
    2041             sage: [formatter(i,1) for i in range(10)]
    2042             ['', 'b', '', 'b', 'b', 'b', 'b', 'b', 'b', 'b']           
    2043         """
    2044         if x in self.skip_values:
    2045             return ''
    2046         else:
    2047             return self.formatter(x, *args, **kwds)
     2047                EXAMPLES::
     2048
     2049                    sage: from sage.plot.plot import SelectiveFormatter
     2050                    sage: import matplotlib.ticker
     2051                    sage: formatter=SelectiveFormatter(matplotlib.ticker.FixedFormatter(['a','b']),skip_values=[0,2])
     2052                    sage: [formatter(i,1) for i in range(10)]
     2053                    ['', 'b', '', 'b', 'b', 'b', 'b', 'b', 'b', 'b']           
     2054                """
     2055                if x in self.skip_values:
     2056                    return ''
     2057                else:
     2058                    return self.formatter(x, *args, **kwds)
     2059                   
     2060    return _SelectiveFormatterClass(formatter, skip_values)
    20482061
    20492062
    20502063def xydata_from_point_list(points):