Jeff,

I ran into a major bug that I think results from a fairly deep-seated 
gotcha in basemap.  The problem lies with the in-place transformation of 
lon,lat in the proj library.  This is not an inherent problem in itself; 
the trouble comes because sometimes the data get copied along the way 
from the basemap interface into proj, and sometimes they don't.  When 
they don't get copied, rotate_vector breaks, because the input lon,lat 
variables are transformed in place, and then they are no longer lon and 
lat when they need to be reused as such.

This could be fixed with a copy in rotate_vector, but I recommend that 
instead it be fixed by guaranteeing that there is a copy at a much lower 
level, probably in the pyproj Proj.__call__ method, and if not there, 
then in the basemap.__call__ method.  I am not sure what all the effects 
might be, though--is anything relying on in-place calculation at that level?

The reason for recommending the low-level copy is that if 
basemap.__call__ continues to behave as it does, sometimes obliterating 
its input arguments via the in-place operation and sometimes not, it 
will continue to cause horrible surprises.  I think that the overhead of 
a single copy would be a small price to pay to eliminate such surprises.

If there is a need to preserve the in-place option, then perhaps it 
could be accessed through a different interface.  Let __call__ guarantee 
that its input arguments are preserved, and have a "transform" method 
that minimizes copying.

Eric

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to