Revision: 8308
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8308&view=rev
Author:   efiring
Date:     2010-05-11 20:23:04 +0000 (Tue, 11 May 2010)

Log Message:
-----------
close bug 2997687: integer overflow problem in Normalize

Modified Paths:
--------------
    trunk/matplotlib/lib/matplotlib/colors.py

Modified: trunk/matplotlib/lib/matplotlib/colors.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/colors.py   2010-05-11 20:00:14 UTC (rev 
8307)
+++ trunk/matplotlib/lib/matplotlib/colors.py   2010-05-11 20:23:04 UTC (rev 
8308)
@@ -796,11 +796,13 @@
         elif vmin==vmax:
             result = 0.0 * val
         else:
+            vmin = float(vmin)
+            vmax = float(vmax)
             if clip:
                 mask = ma.getmask(val)
                 val = ma.array(np.clip(val.filled(vmax), vmin, vmax),
                                 mask=mask)
-            result = (val-vmin) * (1.0/(vmax-vmin))
+            result = (val-vmin) / (vmax-vmin)
         if vtype == 'scalar':
             result = result[0]
         return result
@@ -809,6 +811,10 @@
         if not self.scaled():
             raise ValueError("Not invertible until scaled")
         vmin, vmax = self.vmin, self.vmax
+        if vmin >= vmax:
+            raise ValueError("Inversion requires valid vmax > vmin")
+        vmin = float(vmin)
+        vmax = float(vmax)
 
         if cbook.iterable(value):
             val = ma.asarray(value)
@@ -816,18 +822,17 @@
         else:
             return vmin + value * (vmax - vmin)
 
-
     def autoscale(self, A):
         '''
         Set *vmin*, *vmax* to min, max of *A*.
         '''
-        self.vmin = ma.minimum(A)
-        self.vmax = ma.maximum(A)
+        self.vmin = ma.min(A)
+        self.vmax = ma.max(A)
 
     def autoscale_None(self, A):
         ' autoscale only None-valued vmin or vmax'
-        if self.vmin is None: self.vmin = ma.minimum(A)
-        if self.vmax is None: self.vmax = ma.maximum(A)
+        if self.vmin is None: self.vmin = ma.min(A)
+        if self.vmax is None: self.vmax = ma.max(A)
 
     def scaled(self):
         'return true if vmin and vmax set'


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------

_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to