Compare commits

...

10 Commits
f15 ... f17

Author SHA1 Message Date
Dennis Gilmore
05e0e0bf4c - Rebuilt for c++ ABI breakage 2012-02-28 13:45:09 -06:00
Dennis Gilmore
887890bd4a - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild 2012-01-13 19:52:36 -06:00
David Malcolm
70576db6a2 add link to upstream libpng 1.5 issue 2011-12-06 17:04:00 -05:00
David Malcolm
630c235008 fix the build against libpng 1.5 2011-12-06 16:55:19 -05:00
David Malcolm
313dac93e1 fix egg-info conditional for RHEL 2011-12-06 15:10:01 -05:00
Adam Jackson
04e2e0f563 Rebuild for new libpng 2011-12-06 00:56:12 -05:00
Dan Horák
5446c87d15 fix build with new Tkinter which doesn't return an expected value in __version__ 2011-10-31 15:24:03 +01:00
Jef Spaleta
15f4723084 apply upstream bugfix for timezone formatting (Bug 735677) 2011-09-15 14:48:08 -08:00
Jef Spaleta
aacc15245c apply upstream bugfix for timezone formatting (Bug 735677) 2011-09-15 14:47:56 -08:00
Orion Poplawski
e461fe631e Add Requires dvipng (Bug 684836)
Build against system agg (Bug 612807)
Use system pyparsing (Bug 702160)
2011-05-20 16:44:50 -06:00
5 changed files with 415 additions and 3 deletions

View File

@@ -0,0 +1,188 @@
--- a/lib/matplotlib/axes.py
+++ b/lib/matplotlib/axes.py
@@ -2679,18 +2679,20 @@ class Axes(martist.Artist):
def xaxis_date(self, tz=None):
"""Sets up x-axis ticks and labels that treat the x data as dates.
- *tz* is the time zone to use in labeling dates. Defaults to rc value.
+ *tz* is a timezone string or :class:`tzinfo` instance.
+ Defaults to rc value.
"""
# should be enough to inform the unit conversion interface
- # dates are comng in
- self.xaxis.axis_date()
+ # dates are coming in
+ self.xaxis.axis_date(tz)
def yaxis_date(self, tz=None):
"""Sets up y-axis ticks and labels that treat the y data as dates.
- *tz* is the time zone to use in labeling dates. Defaults to rc value.
+ *tz* is a timezone string or :class:`tzinfo` instance.
+ Defaults to rc value.
"""
- self.yaxis.axis_date()
+ self.yaxis.axis_date(tz)
def format_xdata(self, x):
"""
@@ -3808,7 +3810,7 @@ class Axes(martist.Artist):
*fmt*: string
The plot format string.
- *tz*: [ None | timezone string ]
+ *tz*: [ None | timezone string | :class:`tzinfo` instance]
The time zone to use in labeling dates. If *None*, defaults to rc
value.
diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py
index 85e078c..a825d8e 100644
--- a/lib/matplotlib/axis.py
+++ b/lib/matplotlib/axis.py
@@ -1249,21 +1249,21 @@ class Axis(artist.Artist):
def update_units(self, data):
"""
introspect *data* for units converter and update the
- axis.converter instance if necessary. Return *True* is *data* is
- registered for unit conversion
+ axis.converter instance if necessary. Return *True*
+ if *data* is registered for unit conversion.
"""
converter = munits.registry.get_converter(data)
- if converter is None: return False
+ if converter is None:
+ return False
neednew = self.converter!=converter
self.converter = converter
default = self.converter.default_units(data, self)
- #print 'update units: default="%s", units=%s"'%(default, self.units)
+ #print 'update units: default=%s, units=%s'%(default, self.units)
if default is not None and self.units is None:
self.set_units(default)
-
if neednew:
self._update_axisinfo()
return True
@@ -1484,14 +1484,21 @@ class Axis(artist.Artist):
self.major.locator.zoom(direction)
- def axis_date(self):
+ def axis_date(self, tz=None):
"""
Sets up x-axis ticks and labels that treat the x data as dates.
+ *tz* is a :class:`tzinfo` instance or a timezone string.
+ This timezone is used to create date labels.
"""
+ # By providing a sample datetime instance with the desired
+ # timezone, the registered converter can be selected,
+ # and the "units" attribute, which is the timezone, can
+ # be set.
import datetime
- # should be enough to inform the unit conversion interface
- # dates are comng in
- self.update_units(datetime.date(2009,1,1))
+ if isinstance(tz, (str, unicode)):
+ import pytz
+ tz = pytz.timezone(tz)
+ self.update_units(datetime.datetime(2009,1,1,0,0,0,0,tz))
class XAxis(Axis):
diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py
index 7a2f9f3..9018315 100644
--- a/lib/matplotlib/dates.py
+++ b/lib/matplotlib/dates.py
@@ -1104,15 +1104,26 @@ def weeks(w):
class DateConverter(units.ConversionInterface):
- """The units are equivalent to the timezone."""
+ """
+ Converter for datetime.date and datetime.datetime data,
+ or for date/time data represented as it would be converted
+ by :func:`date2num`.
+
+ The 'unit' tag for such data is None or a tzinfo instance.
+ """
@staticmethod
def axisinfo(unit, axis):
- 'return the unit AxisInfo'
- # make sure that the axis does not start at 0
+ """
+ Return the :class:`~matplotlib.units.AxisInfo` for *unit*.
+
+ *unit* is a tzinfo instance or None.
+ The *axis* argument is required but not used.
+ """
+ tz = unit
- majloc = AutoDateLocator(tz=unit)
- majfmt = AutoDateFormatter(majloc, tz=unit)
+ majloc = AutoDateLocator(tz=tz)
+ majfmt = AutoDateFormatter(majloc, tz=tz)
datemin = datetime.date(2000, 1, 1)
datemax = datetime.date(2010, 1, 1)
@@ -1121,12 +1132,28 @@ class DateConverter(units.ConversionInterface):
@staticmethod
def convert(value, unit, axis):
- if units.ConversionInterface.is_numlike(value): return value
+ """
+ If *value* is not already a number or sequence of numbers,
+ convert it with :func:`date2num`.
+
+ The *unit* and *axis* arguments are not used.
+ """
+ if units.ConversionInterface.is_numlike(value):
+ return value
return date2num(value)
@staticmethod
def default_units(x, axis):
- 'Return the default unit for *x* or None'
+ 'Return the tzinfo instance of *x* or of its first element, or None'
+ try:
+ x = x[0]
+ except (TypeError, IndexError):
+ pass
+
+ try:
+ return x.tzinfo
+ except AttributeError:
+ pass
return None
diff --git a/lib/matplotlib/units.py b/lib/matplotlib/units.py
index 700363a..59b570e 100644
--- a/lib/matplotlib/units.py
+++ b/lib/matplotlib/units.py
@@ -7,8 +7,8 @@ objects, eg a list of datetime objects, as well as for objects that
are unit aware. We don't assume any particular units implementation,
rather a units implementation must provide a ConversionInterface, and
the register with the Registry converter dictionary. For example,
-here is a complete implementation which support plotting with native
-datetime objects
+here is a complete implementation which supports plotting with native
+datetime objects::
import matplotlib.units as units
@@ -48,7 +48,7 @@ from matplotlib.cbook import iterable, is_numlike, is_string_like
class AxisInfo:
'information to support default axis labeling and tick labeling, and default limits'
def __init__(self, majloc=None, minloc=None,
- majfmt=None, minfmt=None, label=None,
+ majfmt=None, minfmt=None, label=None,
default_limits=None):
"""
majloc and minloc: TickLocators for the major and minor ticks
--
1.7.6.2

View File

@@ -0,0 +1,82 @@
diff -up matplotlib-1.0.1/MANIFEST.in.noagg matplotlib-1.0.1/MANIFEST.in
--- matplotlib-1.0.1/MANIFEST.in.noagg 2010-07-06 19:41:55.000000000 -0600
+++ matplotlib-1.0.1/MANIFEST.in 2011-05-20 15:45:38.337580769 -0600
@@ -18,6 +18,5 @@ recursive-include examples *
recursive-include doc *
recursive-include src *.cpp *.c *.h *.m
recursive-include CXX *.cxx *.hxx *.c *.h
-recursive-include agg24 *
recursive-include lib *
recursive-include ttconv *.cpp *.h
diff -up matplotlib-1.0.1/setupext.py.noagg matplotlib-1.0.1/setupext.py
--- matplotlib-1.0.1/setupext.py.noagg 2010-07-06 19:41:55.000000000 -0600
+++ matplotlib-1.0.1/setupext.py 2011-05-20 16:11:56.977764688 -0600
@@ -104,7 +104,6 @@ BUILT_GDK = False
BUILT_PATH = False
BUILT_TRI = False
-AGG_VERSION = 'agg24'
TCL_TK_CACHE = None
# for nonstandard installation/build with --prefix variable
@@ -551,7 +550,8 @@ def add_agg_flags(module):
# before adding the freetype flags since -z comes later
add_base_flags(module)
add_numpy_flags(module)
- module.include_dirs.extend(['src', '%s/include'%AGG_VERSION, '.'])
+ module.include_dirs.extend(['src', '/usr/include/agg2', '.'])
+ module.libraries.append('agg')
# put these later for correct link order
module.libraries.extend(std_libs)
@@ -1251,17 +1251,7 @@ def build_agg(ext_modules, packages):
global BUILT_AGG
if BUILT_AGG: return # only build it if you you haven't already
- agg = (
- 'agg_trans_affine.cpp',
- 'agg_bezier_arc.cpp',
- 'agg_curves.cpp',
- 'agg_vcgen_dash.cpp',
- 'agg_vcgen_stroke.cpp',
- 'agg_image_filters.cpp',
- )
-
- deps = ['%s/src/%s'%(AGG_VERSION, name) for name in agg]
- deps.extend(['src/mplutils.cpp', 'src/agg_py_transforms.cpp'])
+ deps = ['src/mplutils.cpp', 'src/agg_py_transforms.cpp']
deps.extend(glob.glob('CXX/*.cxx'))
deps.extend(glob.glob('CXX/*.c'))
temp_copy('src/_backend_agg.cpp', 'src/backend_agg.cpp')
@@ -1284,15 +1274,7 @@ def build_path(ext_modules, packages):
global BUILT_PATH
if BUILT_PATH: return # only build it if you you haven't already
- agg = (
- 'agg_curves.cpp',
- 'agg_bezier_arc.cpp',
- 'agg_trans_affine.cpp',
- 'agg_vcgen_stroke.cpp',
- )
-
- deps = ['%s/src/%s'%(AGG_VERSION, name) for name in agg]
- deps.extend(glob.glob('CXX/*.cxx'))
+ deps = glob.glob('CXX/*.cxx')
deps.extend(glob.glob('CXX/*.c'))
temp_copy('src/_path.cpp', 'src/path.cpp')
@@ -1317,14 +1299,8 @@ def build_image(ext_modules, packages):
global BUILT_IMAGE
if BUILT_IMAGE: return # only build it if you you haven't already
- agg = ('agg_trans_affine.cpp',
- 'agg_image_filters.cpp',
- 'agg_bezier_arc.cpp',
- )
-
temp_copy('src/_image.cpp', 'src/image.cpp')
deps = ['src/image.cpp', 'src/mplutils.cpp']
- deps.extend(['%s/src/%s'%(AGG_VERSION,name) for name in agg])
deps.extend(glob.glob('CXX/*.cxx'))
deps.extend(glob.glob('CXX/*.c'))

View File

@@ -0,0 +1,12 @@
diff -up matplotlib-1.0.1/setupext.py.tkinter matplotlib-1.0.1/setupext.py
--- matplotlib-1.0.1/setupext.py.tkinter 2011-10-31 14:58:44.000000000 +0100
+++ matplotlib-1.0.1/setupext.py 2011-10-31 14:59:14.000000000 +0100
@@ -829,7 +829,7 @@ def check_for_tk():
if gotit:
print_status("Tkinter", "Tkinter: %s, Tk: %s, Tcl: %s" %
- (Tkinter.__version__.split()[-2], Tkinter.TkVersion, Tkinter.TclVersion))
+ (Tkinter.__version__, Tkinter.TkVersion, Tkinter.TclVersion))
else:
print_status("Tkinter", "no")
if explanation is not None:

View File

@@ -19,7 +19,7 @@
Name: python-matplotlib
Version: 1.0.1
Release: 11%{?dist}
Release: 19%{?dist}
Summary: Python plotting library
Group: Development/Libraries
@@ -36,13 +36,28 @@ Source1: http://downloads.sourceforge.net/matplotlib/mpl_sampledata-%{ver
Source2: setup.cfg
# This patch taken from upstream SVN and will not be needed for releases later than 1.0.1
Patch0: matplotlib-1.0.1-plot_directive.patch
Patch1: matplotlib-1.0.1-noagg.patch
Patch2: 0001-Bugfix-propagate-timezone-info-in-plot_date-xaxis_da.patch
# fix build when Tkinter doesn't return an expected value in __version__ (FTBFS)
Patch3: matplotlib-1.0.1-tkinter.patch
# Fix building against libpng 1.5
# https://github.com/matplotlib/matplotlib/issues/234
# Based on:
# https://github.com/matplotlib/matplotlib/commit/45c46672648e3b4a277bf7ff42b3baf56a98bcec
Patch4: use-png-accessor-functions.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: python-devel, freetype-devel, libpng-devel, zlib-devel
BuildRequires: pygtk2-devel, gtk2-devel
BuildRequires: pytz, python-dateutil, numpy
BuildRequires: agg-devel
BuildRequires: pyparsing
Requires: numpy, pytz, python-dateutil
Requires: pycairo >= 1.2.0
Requires: dejavu-sans-fonts
Requires: dvipng
Requires: pyparsing
%description
Matplotlib is a pure python plotting library with the goal of making
@@ -96,8 +111,18 @@ BuildRequires: python-basemap
%else
%setup -q -n matplotlib-%{version}
%endif
%patch0 -p1
%patch2 -p1
%patch3 -p1 -b .tkinter
%patch4 -p1
# Remove bundled libraries
rm -r agg24 lib/matplotlib//pyparsing.py
# Remove references to bundled libraries
%patch1 -p1 -b .noagg
sed -i -e s/matplotlib\.pyparsing/pyparsing/g lib/matplotlib/*.py
chmod -x lib/matplotlib/mpl-data/images/*.svg
cp %{SOURCE2} ./setup.cfg
@@ -147,7 +172,7 @@ rm -rf $RPM_BUILD_ROOT
%doc license/LICENSE_PAINT license/LICENSE_PIL
%doc CHANGELOG CXX INSTALL INTERACTIVE KNOWN_BUGS
%doc PKG-INFO TODO
%if 0%{?fedora} >= 9
%if 0%{?fedora} >= 9 || 0%{?rhel} >= 6
%{python_sitearch}/*egg-info
%endif
%{python_sitearch}/matplotlib/
@@ -178,6 +203,32 @@ rm -rf $RPM_BUILD_ROOT
%endif
%changelog
* Tue Feb 28 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.1-19
- Rebuilt for c++ ABI breakage
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.1-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Tue Dec 6 2011 David Malcolm <dmalcolm@redhat.com> - 1.0.1-17
- fix the build against libpng 1.5
* Tue Dec 6 2011 David Malcolm <dmalcolm@redhat.com> - 1.0.1-16
- fix egg-info conditional for RHEL
* Tue Dec 06 2011 Adam Jackson <ajax@redhat.com> - 1.0.1-15
- Rebuild for new libpng
* Mon Oct 31 2011 Dan Horák <dan[at]danny.cz> - 1.0.1-14
- fix build with new Tkinter which doesn't return an expected value in __version__
* Thu Sep 15 2011 Jef Spaleta <jspaleta@fedoraproject.org> - 1.0.1-13
- apply upstream bugfix for timezone formatting (Bug 735677)
* Fri May 20 2011 Orion Poplawski <orion@cora.nwra.com> - 1.0.1-12
- Add Requires dvipng (Bug 684836)
- Build against system agg (Bug 612807)
- Use system pyparsing (Bug 702160)
* Sat Feb 26 2011 Jonathan G. Underwood <jonathan.underwood@gmail.com> - 1.0.1-11
- Set PYTHONPATH during html doc building using find to prevent broken builds

View File

@@ -0,0 +1,79 @@
diff -up matplotlib-1.0.1/CHANGELOG.png15 matplotlib-1.0.1/CHANGELOG
diff -up matplotlib-1.0.1/doc/users/installing.rst.png15 matplotlib-1.0.1/doc/users/installing.rst
--- matplotlib-1.0.1/doc/users/installing.rst.png15 2010-07-06 21:41:46.000000000 -0400
+++ matplotlib-1.0.1/doc/users/installing.rst 2011-12-06 16:29:05.824621532 -0500
@@ -138,7 +138,7 @@ libraries themselves.
array support for python (`download
<http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103>`__)
-libpng 1.1 (or later)
+libpng 1.2 (or later)
library for loading and saving :term:`PNG` files (`download
<http://www.libpng.org/pub/png/libpng.html>`__). libpng requires
zlib. If you are a windows user, you can ignore this since we
diff -up matplotlib-1.0.1/src/_png.cpp.png15 matplotlib-1.0.1/src/_png.cpp
--- matplotlib-1.0.1/src/_png.cpp.png15 2010-10-12 12:14:42.000000000 -0400
+++ matplotlib-1.0.1/src/_png.cpp 2011-12-06 16:29:05.825621532 -0500
@@ -350,10 +350,10 @@ _png_module::read_png(const Py::Tuple& a
png_set_sig_bytes(png_ptr, 8);
png_read_info(png_ptr, info_ptr);
- png_uint_32 width = info_ptr->width;
- png_uint_32 height = info_ptr->height;
+ png_uint_32 width = png_get_image_width(png_ptr, info_ptr);
+ png_uint_32 height = png_get_image_height(png_ptr, info_ptr);
- int bit_depth = info_ptr->bit_depth;
+ int bit_depth = png_get_bit_depth(png_ptr, info_ptr);
// Unpack 1, 2, and 4-bit images
if (bit_depth < 8)
@@ -361,7 +361,7 @@ _png_module::read_png(const Py::Tuple& a
// If sig bits are set, shift data
png_color_8p sig_bit;
- if ((info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) &&
+ if ((png_get_color_type(png_ptr, info_ptr) != PNG_COLOR_TYPE_PALETTE) &&
png_get_sBIT(png_ptr, info_ptr, &sig_bit))
{
png_set_shift(png_ptr, sig_bit);
@@ -374,13 +374,13 @@ _png_module::read_png(const Py::Tuple& a
}
// Convert palletes to full RGB
- if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
+ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_PALETTE)
{
png_set_palette_to_rgb(png_ptr);
}
// If there's an alpha channel convert gray to RGB
- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
+ if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY_ALPHA)
{
png_set_gray_to_rgb(png_ptr);
}
@@ -408,11 +408,11 @@ _png_module::read_png(const Py::Tuple& a
npy_intp dimensions[3];
dimensions[0] = height; //numrows
dimensions[1] = width; //numcols
- if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
+ if (png_get_color_type(png_ptr, info_ptr) & PNG_COLOR_MASK_ALPHA)
{
dimensions[2] = 4; //RGBA images
}
- else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)
+ else if (png_get_color_type(png_ptr, info_ptr) & PNG_COLOR_MASK_COLOR)
{
dimensions[2] = 3; //RGB images
}
@@ -421,7 +421,8 @@ _png_module::read_png(const Py::Tuple& a
dimensions[2] = 1; //Greyscale images
}
//For gray, return an x by y array, not an x by y by 1
- int num_dims = (info_ptr->color_type & PNG_COLOR_MASK_COLOR) ? 3 : 2;
+ int num_dims = (png_get_color_type(png_ptr, info_ptr)
+ & PNG_COLOR_MASK_COLOR) ? 3 : 2;
double max_value = (1 << ((bit_depth < 8) ? 8 : bit_depth)) - 1;
PyArrayObject *A = (PyArrayObject *) PyArray_SimpleNew(