You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(115) |
Aug
(120) |
Sep
(137) |
Oct
(170) |
Nov
(461) |
Dec
(263) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(120) |
Feb
(74) |
Mar
(35) |
Apr
(74) |
May
(245) |
Jun
(356) |
Jul
(240) |
Aug
(115) |
Sep
(78) |
Oct
(225) |
Nov
(98) |
Dec
(271) |
2009 |
Jan
(132) |
Feb
(84) |
Mar
(74) |
Apr
(56) |
May
(90) |
Jun
(79) |
Jul
(83) |
Aug
(296) |
Sep
(214) |
Oct
(76) |
Nov
(82) |
Dec
(66) |
2010 |
Jan
(46) |
Feb
(58) |
Mar
(51) |
Apr
(77) |
May
(58) |
Jun
(126) |
Jul
(128) |
Aug
(64) |
Sep
(50) |
Oct
(44) |
Nov
(48) |
Dec
(54) |
2011 |
Jan
(68) |
Feb
(52) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
1
(8) |
2
|
3
|
4
(1) |
5
(2) |
6
(7) |
7
(3) |
8
(7) |
9
(3) |
10
(2) |
11
(4) |
12
(9) |
13
|
14
|
15
|
16
|
17
(5) |
18
(1) |
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
|
|
|
|
|
Revision: 8964 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8964&view=rev Author: jswhit Date: 2011年02月08日 13:27:16 +0000 (2011年2月08日) Log Message: ----------- don't run allskymap module. Modified Paths: -------------- trunk/toolkits/basemap/examples/run_all.py Modified: trunk/toolkits/basemap/examples/run_all.py =================================================================== --- trunk/toolkits/basemap/examples/run_all.py 2011年02月08日 13:20:01 UTC (rev 8963) +++ trunk/toolkits/basemap/examples/run_all.py 2011年02月08日 13:27:16 UTC (rev 8964) @@ -1,6 +1,7 @@ import glob, os, sys test_files = glob.glob('*.py') test_files.remove('run_all.py') +test_files.remove('allskymap.py') test_files.remove('fcstmaps.py') test_files.remove('fcstmaps_axesgrid.py') test_files.remove('testgdal.py') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8963 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8963&view=rev Author: jswhit Date: 2011年02月08日 13:20:01 +0000 (2011年2月08日) Log Message: ----------- update Modified Paths: -------------- trunk/toolkits/basemap/Changelog Modified: trunk/toolkits/basemap/Changelog =================================================================== --- trunk/toolkits/basemap/Changelog 2011年02月08日 13:14:28 UTC (rev 8962) +++ trunk/toolkits/basemap/Changelog 2011年02月08日 13:20:01 UTC (rev 8963) @@ -1,4 +1,6 @@ -version 1.0.1 (svn revision 8941) +version 1.0.1 (svn revision 8963) + * regenerated C source with cython 0.14.1. + * added new "allsky" example from Tom Loredo. * added 'celestial' keyword - if True astronomical convention for longitude is used (negative for 'east', positive for 'west'). celestial=True implies resolution=None (no continents or This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8962 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8962&view=rev Author: jswhit Date: 2011年02月08日 13:14:28 +0000 (2011年2月08日) Log Message: ----------- replace __new__ with __cinit__ to accomodate cython 0.14.1 Modified Paths: -------------- trunk/toolkits/basemap/src/_geod.pyx trunk/toolkits/basemap/src/_proj.pyx Modified: trunk/toolkits/basemap/src/_geod.pyx =================================================================== --- trunk/toolkits/basemap/src/_geod.pyx 2011年02月08日 13:14:00 UTC (rev 8961) +++ trunk/toolkits/basemap/src/_geod.pyx 2011年02月08日 13:14:28 UTC (rev 8962) @@ -8,7 +8,7 @@ cdef public object proj_version cdef char *geodinitstring - def __new__(self, geodstring): + def __cinit__(self, geodstring): cdef GEODESIC_T GEOD_T # setup geod initialization string. self.geodstring = geodstring Modified: trunk/toolkits/basemap/src/_proj.pyx =================================================================== --- trunk/toolkits/basemap/src/_proj.pyx 2011年02月08日 13:14:00 UTC (rev 8961) +++ trunk/toolkits/basemap/src/_proj.pyx 2011年02月08日 13:14:28 UTC (rev 8962) @@ -15,7 +15,7 @@ cdef char *pjinitstring cdef public object srs - def __new__(self, projstring): + def __cinit__(self, projstring): # setup proj initialization string. self.srs = projstring self.pjinitstring = PyString_AsString(self.srs) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8961 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8961&view=rev Author: jswhit Date: 2011年02月08日 13:14:00 +0000 (2011年2月08日) Log Message: ----------- regenerate C source with Cython 0.14.1 Modified Paths: -------------- trunk/toolkits/basemap/src/_geod.c trunk/toolkits/basemap/src/_geoslib.c trunk/toolkits/basemap/src/_proj.c Modified: trunk/toolkits/basemap/src/_geod.c =================================================================== --- trunk/toolkits/basemap/src/_geod.c 2011年02月08日 13:01:46 UTC (rev 8960) +++ trunk/toolkits/basemap/src/_geod.c 2011年02月08日 13:14:00 UTC (rev 8961) @@ -1,18 +1,39 @@ -/* Generated by Cython 0.12.1 on Fri Mar 12 12:24:37 2010 */ +/* Generated by Cython 0.14.1 on Tue Feb 8 06:06:19 2011 */ #define PY_SSIZE_T_CLEAN #include "Python.h" -#include "structmember.h" #ifndef Py_PYTHON_H #error Python headers needed to compile C extensions, please install development version of Python. #else -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG +#include <stddef.h> /* For offsetof */ +#ifndef offsetof +#define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) #endif + +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif + +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif #ifndef DL_EXPORT #define DL_EXPORT(t) t #endif + +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif + #if PY_VERSION_HEX < 0x02040000 #define METH_COEXIST 0 #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type) @@ -82,14 +103,43 @@ #if PY_MAJOR_VERSION >= 3 #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check #define PyString_CheckExact PyUnicode_CheckExact -#else +#endif + +#if PY_VERSION_HEX < 0x02060000 + #define PyBytesObject PyStringObject #define PyBytes_Type PyString_Type + #define PyBytes_Check PyString_Check #define PyBytes_CheckExact PyString_CheckExact + #define PyBytes_FromString PyString_FromString + #define PyBytes_FromStringAndSize PyString_FromStringAndSize + #define PyBytes_FromFormat PyString_FromFormat + #define PyBytes_DecodeEscape PyString_DecodeEscape + #define PyBytes_AsString PyString_AsString + #define PyBytes_AsStringAndSize PyString_AsStringAndSize + #define PyBytes_Size PyString_Size + #define PyBytes_AS_STRING PyString_AS_STRING + #define PyBytes_GET_SIZE PyString_GET_SIZE + #define PyBytes_Repr PyString_Repr + #define PyBytes_Concat PyString_Concat + #define PyBytes_ConcatAndDel PyString_ConcatAndDel #endif +#if PY_VERSION_HEX < 0x02060000 + #define PySet_Check(obj) PyObject_TypeCheck(obj, &PySet_Type) + #define PyFrozenSet_Check(obj) PyObject_TypeCheck(obj, &PyFrozenSet_Type) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif + +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) + #if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject #define PyInt_Type PyLong_Type #define PyInt_Check(op) PyLong_Check(op) #define PyInt_CheckExact(op) PyLong_CheckExact(op) @@ -103,32 +153,44 @@ #define PyInt_AsSsize_t PyLong_AsSsize_t #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask +#endif + +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif + + +#if PY_MAJOR_VERSION >= 3 #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) #else #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if (PY_MAJOR_VERSION < 3) || (PY_VERSION_HEX >= 0x03010300) + #define __Pyx_PySequence_GetSlice(obj, a, b) PySequence_GetSlice(obj, a, b) + #define __Pyx_PySequence_SetSlice(obj, a, b, value) PySequence_SetSlice(obj, a, b, value) + #define __Pyx_PySequence_DelSlice(obj, a, b) PySequence_DelSlice(obj, a, b) +#else + #define __Pyx_PySequence_GetSlice(obj, a, b) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), (PyObject*)0) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_GetSlice(obj, a, b)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object is unsliceable", (obj)->ob_type->tp_name), (PyObject*)0))) + #define __Pyx_PySequence_SetSlice(obj, a, b, value) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_SetSlice(obj, a, b, value)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice assignment", (obj)->ob_type->tp_name), -1))) + #define __Pyx_PySequence_DelSlice(obj, a, b) (unlikely(!(obj)) ? \ + (PyErr_SetString(PyExc_SystemError, "null argument to internal routine"), -1) : \ + (likely((obj)->ob_type->tp_as_mapping) ? (PySequence_DelSlice(obj, a, b)) : \ + (PyErr_Format(PyExc_TypeError, "'%.200s' object doesn't support slice deletion", (obj)->ob_type->tp_name), -1))) #endif #if PY_MAJOR_VERSION >= 3 - #define PyMethod_New(func, self, klass) PyInstanceMethod_New(func) + #define PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : PyInstanceMethod_New(func)) #endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#else - #define _USE_MATH_DEFINES -#endif - #if PY_VERSION_HEX < 0x02050000 #define __Pyx_GetAttrString(o,n) PyObject_GetAttrString((o),((char *)(n))) #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a)) @@ -146,11 +208,16 @@ #define __Pyx_NAMESTR(n) (n) #define __Pyx_DOCSTR(n) (n) #endif + #ifdef __cplusplus #define __PYX_EXTERN_C extern "C" #else #define __PYX_EXTERN_C extern #endif + +#if defined(WIN32) || defined(MS_WINDOWS) +#define _USE_MATH_DEFINES +#endif #include <math.h> #define __PYX_HAVE_API___geod #include "stdlib.h" @@ -158,100 +225,51 @@ #include "geodesic.h" #include "proj_api.h" +#ifdef PYREX_WITHOUT_ASSERTIONS +#define CYTHON_WITHOUT_ASSERTIONS +#endif + + +/* inline attribute */ #ifndef CYTHON_INLINE #if defined(__GNUC__) #define CYTHON_INLINE __inline__ #elif defined(_MSC_VER) #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline #else - #define CYTHON_INLINE + #define CYTHON_INLINE #endif #endif +/* unused attribute */ +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || defined(__INTEL_COMPILER) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif + typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/ /* Type Conversion Predeclarations */ -#if PY_MAJOR_VERSION < 3 -#define __Pyx_PyBytes_FromString PyString_FromString -#define __Pyx_PyBytes_FromStringAndSize PyString_FromStringAndSize -#define __Pyx_PyBytes_AsString PyString_AsString -#else -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -#define __Pyx_PyBytes_AsString PyBytes_AsString -#endif +#define __Pyx_PyBytes_FromUString(s) PyBytes_FromString((char*)s) +#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) PyBytes_AsString(s)) -#define __Pyx_PyBytes_FromUString(s) __Pyx_PyBytes_FromString((char*)s) -#define __Pyx_PyBytes_AsUString(s) ((unsigned char*) __Pyx_PyBytes_AsString(s)) - #define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False)) static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x); -#if !defined(T_PYSSIZET) -#if PY_VERSION_HEX < 0x02050000 -#define T_PYSSIZET T_INT -#elif !defined(T_LONGLONG) -#define T_PYSSIZET \ - ((sizeof(Py_ssize_t) == sizeof(int)) ? T_INT : \ - ((sizeof(Py_ssize_t) == sizeof(long)) ? T_LONG : -1)) -#else -#define T_PYSSIZET \ - ((sizeof(Py_ssize_t) == sizeof(int)) ? T_INT : \ - ((sizeof(Py_ssize_t) == sizeof(long)) ? T_LONG : \ - ((sizeof(Py_ssize_t) == sizeof(PY_LONG_LONG)) ? T_LONGLONG : -1))) -#endif -#endif - - -#if !defined(T_ULONGLONG) -#define __Pyx_T_UNSIGNED_INT(x) \ - ((sizeof(x) == sizeof(unsigned char)) ? T_UBYTE : \ - ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \ - ((sizeof(x) == sizeof(unsigned int)) ? T_UINT : \ - ((sizeof(x) == sizeof(unsigned long)) ? T_ULONG : -1)))) -#else -#define __Pyx_T_UNSIGNED_INT(x) \ - ((sizeof(x) == sizeof(unsigned char)) ? T_UBYTE : \ - ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \ - ((sizeof(x) == sizeof(unsigned int)) ? T_UINT : \ - ((sizeof(x) == sizeof(unsigned long)) ? T_ULONG : \ - ((sizeof(x) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1))))) -#endif -#if !defined(T_LONGLONG) -#define __Pyx_T_SIGNED_INT(x) \ - ((sizeof(x) == sizeof(char)) ? T_BYTE : \ - ((sizeof(x) == sizeof(short)) ? T_SHORT : \ - ((sizeof(x) == sizeof(int)) ? T_INT : \ - ((sizeof(x) == sizeof(long)) ? T_LONG : -1)))) -#else -#define __Pyx_T_SIGNED_INT(x) \ - ((sizeof(x) == sizeof(char)) ? T_BYTE : \ - ((sizeof(x) == sizeof(short)) ? T_SHORT : \ - ((sizeof(x) == sizeof(int)) ? T_INT : \ - ((sizeof(x) == sizeof(long)) ? T_LONG : \ - ((sizeof(x) == sizeof(PY_LONG_LONG)) ? T_LONGLONG : -1))))) -#endif - -#define __Pyx_T_FLOATING(x) \ - ((sizeof(x) == sizeof(float)) ? T_FLOAT : \ - ((sizeof(x) == sizeof(double)) ? T_DOUBLE : -1)) - -#if !defined(T_SIZET) -#if !defined(T_ULONGLONG) -#define T_SIZET \ - ((sizeof(size_t) == sizeof(unsigned int)) ? T_UINT : \ - ((sizeof(size_t) == sizeof(unsigned long)) ? T_ULONG : -1)) -#else -#define T_SIZET \ - ((sizeof(size_t) == sizeof(unsigned int)) ? T_UINT : \ - ((sizeof(size_t) == sizeof(unsigned long)) ? T_ULONG : \ - ((sizeof(size_t) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1))) -#endif -#endif - static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*); @@ -261,7 +279,7 @@ #ifdef __GNUC__ /* Test for GCC > 2.95 */ -#if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) +#if __GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #else /* __GNUC__ > 2 ... */ @@ -281,12 +299,16 @@ static int __pyx_clineno = 0; static const char * __pyx_cfilenm= __FILE__; static const char *__pyx_filename; -static const char **__pyx_f; +static const char *__pyx_f[] = { + "_geod.pyx", + "_pyproj.pxi", +}; + /* Type declarations */ -/* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":5 +/* "_geod.pyx":5 * include "_pyproj.pxi" * * cdef class Geod: # <<<<<<<<<<<<<< @@ -348,23 +370,23 @@ #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);} } while(0) #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r);} } while(0) +static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ + static void __Pyx_RaiseDoubleKeywordsError( const char* func_name, PyObject* kw_name); /*proto*/ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ + static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, const char* function_name); /*proto*/ - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ - -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ - static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ + static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *); static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *); @@ -383,6 +405,8 @@ static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *); +static CYTHON_INLINE int __Pyx_PyInt_AsLongDouble(PyObject *); + static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *); static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *); @@ -402,27 +426,20 @@ static PyTypeObject *__pyx_ptype_5_geod_Geod = 0; #define __Pyx_MODULE_NAME "_geod" -int __pyx_module_is_main__geod = 0; +static int __pyx_module_is_main__geod = 0; /* Implementation of _geod */ static PyObject *__pyx_builtin_RuntimeError; static PyObject *__pyx_builtin_ValueError; static char __pyx_k_2[] = "Buffer lengths not the same"; -static char __pyx_k_3[] = "undefined inverse geodesic (may be an antipodal point)"; -static char __pyx_k_6[] = "1.8.7"; -static char __pyx_k_7[] = "Geod.__reduce__ (line 22)"; -static char __pyx_k_8[] = "Geod._fwd (line 26)"; -static char __pyx_k_9[] = "Geod._inv (line 82)"; -static char __pyx_k_10[] = "Geod._npts (line 133)"; +static char __pyx_k_4[] = "undefined inverse geodesic (may be an antipodal point)"; +static char __pyx_k_10[] = "1.8.7"; static char __pyx_k__u[] = "u"; static char __pyx_k__v[] = "v"; static char __pyx_k__az[] = "az"; static char __pyx_k__p1[] = "p1"; static char __pyx_k__p2[] = "p2"; static char __pyx_k__DIST[] = "DIST"; -static char __pyx_k__Geod[] = "Geod"; -static char __pyx_k___fwd[] = "_fwd"; -static char __pyx_k___inv[] = "_inv"; static char __pyx_k__dist[] = "dist"; static char __pyx_k__lat1[] = "lat1"; static char __pyx_k__lat2[] = "lat2"; @@ -432,7 +449,6 @@ static char __pyx_k__lons[] = "lons"; static char __pyx_k__math[] = "math"; static char __pyx_k__npts[] = "npts"; -static char __pyx_k___npts[] = "_npts"; static char __pyx_k__lats1[] = "lats1"; static char __pyx_k__lats2[] = "lats2"; static char __pyx_k__lons1[] = "lons1"; @@ -447,7 +463,6 @@ static char __pyx_k____test__[] = "__test__"; static char __pyx_k____class__[] = "__class__"; static char __pyx_k__ValueError[] = "ValueError"; -static char __pyx_k____reduce__[] = "__reduce__"; static char __pyx_k__geodesic_t[] = "geodesic_t"; static char __pyx_k__geodstring[] = "geodstring"; static char __pyx_k____version__[] = "__version__"; @@ -455,29 +470,20 @@ static char __pyx_k__RuntimeError[] = "RuntimeError"; static char __pyx_k__proj_version[] = "proj_version"; static char __pyx_k__geodinitstring[] = "geodinitstring"; -static PyObject *__pyx_kp_u_10; +static PyObject *__pyx_kp_s_10; static PyObject *__pyx_kp_s_2; -static PyObject *__pyx_kp_s_3; -static PyObject *__pyx_kp_s_6; -static PyObject *__pyx_kp_u_7; -static PyObject *__pyx_kp_u_8; -static PyObject *__pyx_kp_u_9; +static PyObject *__pyx_kp_s_4; static PyObject *__pyx_n_s__ALPHA12; static PyObject *__pyx_n_s__ALPHA21; static PyObject *__pyx_n_s__DIST; -static PyObject *__pyx_n_s__Geod; static PyObject *__pyx_n_s__RuntimeError; static PyObject *__pyx_n_s__ValueError; static PyObject *__pyx_n_s____class__; static PyObject *__pyx_n_s____main__; -static PyObject *__pyx_n_s____reduce__; static PyObject *__pyx_n_s____test__; static PyObject *__pyx_n_s____version__; static PyObject *__pyx_n_s___dg2rad; static PyObject *__pyx_n_s___doublesize; -static PyObject *__pyx_n_s___fwd; -static PyObject *__pyx_n_s___inv; -static PyObject *__pyx_n_s___npts; static PyObject *__pyx_n_s___rad2dg; static PyObject *__pyx_n_s__az; static PyObject *__pyx_n_s__degrees; @@ -504,24 +510,28 @@ static PyObject *__pyx_n_s__u; static PyObject *__pyx_n_s__v; static PyObject *__pyx_k_1; -static PyObject *__pyx_k_4; -static PyObject *__pyx_k_5; +static PyObject *__pyx_k_6; +static PyObject *__pyx_k_9; +static PyObject *__pyx_k_tuple_3; +static PyObject *__pyx_k_tuple_5; +static PyObject *__pyx_k_tuple_7; +static PyObject *__pyx_k_tuple_8; -/* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":11 +/* "_geod.pyx":11 * cdef char *geodinitstring * - * def __new__(self, geodstring): # <<<<<<<<<<<<<< + * def __cinit__(self, geodstring): # <<<<<<<<<<<<<< * cdef GEODESIC_T GEOD_T * # setup geod initialization string. */ -static int __pyx_pf_5_geod_4Geod___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pf_5_geod_4Geod___new__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pf_5_geod_4Geod___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_geodstring = 0; GEODESIC_T __pyx_v_GEOD_T; int __pyx_r; - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; PyObject *__pyx_t_3 = NULL; static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__geodstring,0}; __Pyx_RefNannySetupContext("__cinit__"); @@ -540,7 +550,7 @@ else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__new__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__cinit__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } __pyx_v_geodstring = values[0]; } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { @@ -550,15 +560,14 @@ } goto __pyx_L4_argument_unpacking_done; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__new__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;} + __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 11; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_geod.Geod.__cinit__"); + __Pyx_RefNannyFinishContext(); return -1; __pyx_L4_argument_unpacking_done:; - __Pyx_INCREF((PyObject *)__pyx_v_self); - __Pyx_INCREF(__pyx_v_geodstring); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":14 + /* "_geod.pyx":14 * cdef GEODESIC_T GEOD_T * # setup geod initialization string. * self.geodstring = geodstring # <<<<<<<<<<<<<< @@ -571,16 +580,19 @@ __Pyx_DECREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring = __pyx_v_geodstring; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":15 + /* "_geod.pyx":15 * # setup geod initialization string. * self.geodstring = geodstring * self.geodinitstring = PyString_AsString(self.geodstring) # <<<<<<<<<<<<<< * # initialize projection * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] */ - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodinitstring = PyString_AsString(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); + __pyx_t_1 = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring; + __Pyx_INCREF(__pyx_t_1); + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodinitstring = PyString_AsString(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":17 + /* "_geod.pyx":17 * self.geodinitstring = PyString_AsString(self.geodstring) * # initialize projection * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] # <<<<<<<<<<<<<< @@ -589,70 +601,68 @@ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t = (GEOD_init_plus(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodinitstring, (&__pyx_v_GEOD_T))[0]); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":18 + /* "_geod.pyx":18 * # initialize projection * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] * if pj_errno != 0: # <<<<<<<<<<<<<< * raise RuntimeError(pj_strerrno(pj_errno)) * self.proj_version = PJ_VERSION/100. */ - __pyx_t_1 = (pj_errno != 0); - if (__pyx_t_1) { + __pyx_t_2 = (pj_errno != 0); + if (__pyx_t_2) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":19 + /* "_geod.pyx":19 * self.geodesic_t = GEOD_init_plus(self.geodinitstring, &GEOD_T)[0] * if pj_errno != 0: * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< * self.proj_version = PJ_VERSION/100. * */ - __pyx_t_2 = __Pyx_PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(((PyObject *)__pyx_t_2)); + __pyx_t_1 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_1)); __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_2)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_2)); - __pyx_t_2 = 0; - __pyx_t_2 = PyObject_Call(__pyx_builtin_RuntimeError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_2, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_1)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_1)); + __pyx_t_1 = 0; + __pyx_t_1 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_3), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L6; } __pyx_L6:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":20 + /* "_geod.pyx":20 * if pj_errno != 0: * raise RuntimeError(pj_strerrno(pj_errno)) * self.proj_version = PJ_VERSION/100. # <<<<<<<<<<<<<< * * def __reduce__(self): */ - __pyx_t_2 = PyFloat_FromDouble((PJ_VERSION / 100.0)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); + __pyx_t_1 = PyFloat_FromDouble((PJ_VERSION / 100.)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); __Pyx_DECREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version); - ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version = __pyx_t_2; - __pyx_t_2 = 0; + ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->proj_version = __pyx_t_1; + __pyx_t_1 = 0; __pyx_r = 0; goto __pyx_L0; __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_3); __Pyx_AddTraceback("_geod.Geod.__cinit__"); __pyx_r = -1; __pyx_L0:; - __Pyx_DECREF((PyObject *)__pyx_v_self); - __Pyx_DECREF(__pyx_v_geodstring); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":22 +/* "_geod.pyx":22 * self.proj_version = PJ_VERSION/100. * * def __reduce__(self): # <<<<<<<<<<<<<< @@ -660,16 +670,16 @@ * return (self.__class__,(self.geodstring,)) */ -static PyObject *__pyx_pf_5_geod_4Geod___reduce__(PyObject *__pyx_v_self, PyObject *unused); /*proto*/ -static char __pyx_doc_5_geod_4Geod___reduce__[] = "special method that allows pyproj.Geod instance to be pickled"; -static PyObject *__pyx_pf_5_geod_4Geod___reduce__(PyObject *__pyx_v_self, PyObject *unused) { +static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ +static char __pyx_doc_5_geod_4Geod_1__reduce__[] = "special method that allows pyproj.Geod instance to be pickled"; +static PyObject *__pyx_pf_5_geod_4Geod_1__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { PyObject *__pyx_r = NULL; PyObject *__pyx_t_1 = NULL; PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; __Pyx_RefNannySetupContext("__reduce__"); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":24 + /* "_geod.pyx":24 * def __reduce__(self): * """special method that allows pyproj.Geod instance to be pickled""" * return (self.__class__,(self.geodstring,)) # <<<<<<<<<<<<<< @@ -680,19 +690,19 @@ __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s____class__); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_2); + __Pyx_GOTREF(((PyObject *)__pyx_t_2)); __Pyx_INCREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); PyTuple_SET_ITEM(__pyx_t_2, 0, ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); __Pyx_GIVEREF(((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodstring); __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_t_2)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_2)); __pyx_t_1 = 0; __pyx_t_2 = 0; - __pyx_r = __pyx_t_3; + __pyx_r = ((PyObject *)__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0; @@ -710,7 +720,7 @@ return __pyx_r; } -/* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":26 +/* "_geod.pyx":26 * return (self.__class__,(self.geodstring,)) * * def _fwd(self, object lons, object lats, object az, object dist, radians=False): # <<<<<<<<<<<<<< @@ -718,9 +728,9 @@ * forward transformation - determine longitude, latitude and back azimuth */ -static PyObject *__pyx_pf_5_geod_4Geod__fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_5_geod_4Geod__fwd[] = "\n forward transformation - determine longitude, latitude and back azimuth \n of a terminus point given an initial point longitude and latitude, plus\n forward azimuth and distance.\n if radians=True, lons/lats are radians instead of degrees.\n "; -static PyObject *__pyx_pf_5_geod_4Geod__fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_5_geod_4Geod_2_fwd[] = "\n forward transformation - determine longitude, latitude and back azimuth \n of a terminus point given an initial point longitude and latitude, plus\n forward azimuth and distance.\n if radians=True, lons/lats are radians instead of degrees.\n "; +static PyObject *__pyx_pf_5_geod_4Geod_2_fwd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_lons = 0; PyObject *__pyx_v_lats = 0; PyObject *__pyx_v_az = 0; @@ -787,9 +797,9 @@ __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, 3); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L3_error;} } case 4: - if (kw_args > 1) { + if (kw_args > 0) { PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__radians); - if (unlikely(value)) { values[4] = value; kw_args--; } + if (value) { values[4] = value; kw_args--; } } } if (unlikely(kw_args > 0)) { @@ -819,16 +829,11 @@ __Pyx_RaiseArgtupleInvalid("_fwd", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; __Pyx_AddTraceback("_geod.Geod._fwd"); + __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - __Pyx_INCREF((PyObject *)__pyx_v_self); - __Pyx_INCREF(__pyx_v_lons); - __Pyx_INCREF(__pyx_v_lats); - __Pyx_INCREF(__pyx_v_az); - __Pyx_INCREF(__pyx_v_dist); - __Pyx_INCREF(__pyx_v_radians); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":37 + /* "_geod.pyx":37 * cdef void *londata, *latdata, *azdat, *distdat * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: # <<<<<<<<<<<<<< @@ -838,7 +843,7 @@ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lons, (&__pyx_v_londata), (&__pyx_v_buflenlons)) != 0); if (__pyx_t_1) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":38 + /* "_geod.pyx":38 * # if buffer api is supported, get pointer to data buffers. * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -851,7 +856,7 @@ } __pyx_L6:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":39 + /* "_geod.pyx":39 * if PyObject_AsWriteBuffer(lons, &londata, &buflenlons) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: # <<<<<<<<<<<<<< @@ -861,7 +866,7 @@ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_lats, (&__pyx_v_latdata), (&__pyx_v_buflenlats)) != 0); if (__pyx_t_1) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":40 + /* "_geod.pyx":40 * raise RuntimeError * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -874,7 +879,7 @@ } __pyx_L7:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":41 + /* "_geod.pyx":41 * if PyObject_AsWriteBuffer(lats, &latdata, &buflenlats) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: # <<<<<<<<<<<<<< @@ -884,7 +889,7 @@ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_az, (&__pyx_v_azdat), (&__pyx_v_buflenaz)) != 0); if (__pyx_t_1) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":42 + /* "_geod.pyx":42 * raise RuntimeError * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -897,7 +902,7 @@ } __pyx_L8:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":43 + /* "_geod.pyx":43 * if PyObject_AsWriteBuffer(az, &azdat, &buflenaz) <> 0: * raise RuntimeError * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: # <<<<<<<<<<<<<< @@ -907,7 +912,7 @@ __pyx_t_1 = (PyObject_AsWriteBuffer(__pyx_v_dist, (&__pyx_v_distdat), (&__pyx_v_buflend)) != 0); if (__pyx_t_1) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":44 + /* "_geod.pyx":44 * raise RuntimeError * if PyObject_AsWriteBuffer(dist, &distdat, &buflend) <> 0: * raise RuntimeError # <<<<<<<<<<<<<< @@ -920,7 +925,7 @@ } __pyx_L9:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":46 + /* "_geod.pyx":46 * raise RuntimeError * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: # <<<<<<<<<<<<<< @@ -937,48 +942,42 @@ __pyx_t_2 = (!__pyx_t_1); if (__pyx_t_2) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":47 + /* "_geod.pyx":47 * # process data in buffer * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") # <<<<<<<<<<<<<< * ndim = buflenlons/_doublesize * lonsdata = <double *>londata */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_k_tuple_3), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(((PyObject *)__pyx_kp_s_2)); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_kp_s_2)); - __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_2)); - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_3, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L10; } __pyx_L10:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":48 + /* "_geod.pyx":48 * if not buflenlons == buflenlats == buflenaz == buflend: * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons/_doublesize # <<<<<<<<<<<<<< * lonsdata = <double *>londata * latsdata = <double *>latdata */ - __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_buflenlons); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___doublesize); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_ndim = __pyx_t_6; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":49 + /* "_geod.pyx":49 * raise RuntimeError("Buffer lengths not the same") * ndim = buflenlons/_doublesize * lonsdata = <double *>londata # <<<<<<<<<<<<<< @@ -987,7 +986,7 @@ */ __pyx_v_lonsdata = ((double *)__pyx_v_londata); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":50 + /* "_geod.pyx":50 * ndim = buflenlons/_doublesize * lonsdata = <double *>londata * latsdata = <double *>latdata # <<<<<<<<<<<<<< @@ -996,7 +995,7 @@ */ __pyx_v_latsdata = ((double *)__pyx_v_latdata); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":51 + /* "_geod.pyx":51 * lonsdata = <double *>londata * latsdata = <double *>latdata * azdata = <double *>azdat # <<<<<<<<<<<<<< @@ -1005,7 +1004,7 @@ */ __pyx_v_azdata = ((double *)__pyx_v_azdat); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":52 + /* "_geod.pyx":52 * latsdata = <double *>latdata * azdata = <double *>azdat * distdata = <double *>distdat # <<<<<<<<<<<<<< @@ -1014,7 +1013,7 @@ */ __pyx_v_distdata = ((double *)__pyx_v_distdat); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":53 + /* "_geod.pyx":53 * azdata = <double *>azdat * distdata = <double *>distdat * for i from 0 <= i < ndim: # <<<<<<<<<<<<<< @@ -1024,7 +1023,7 @@ __pyx_t_6 = __pyx_v_ndim; for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":54 + /* "_geod.pyx":54 * distdata = <double *>distdat * for i from 0 <= i < ndim: * if radians: # <<<<<<<<<<<<<< @@ -1034,7 +1033,7 @@ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":55 + /* "_geod.pyx":55 * for i from 0 <= i < ndim: * if radians: * self.geodesic_t.p1.v = lonsdata[i] # <<<<<<<<<<<<<< @@ -1043,7 +1042,7 @@ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = (__pyx_v_lonsdata[__pyx_v_i]); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":56 + /* "_geod.pyx":56 * if radians: * self.geodesic_t.p1.v = lonsdata[i] * self.geodesic_t.p1.u = latsdata[i] # <<<<<<<<<<<<<< @@ -1052,7 +1051,7 @@ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = (__pyx_v_latsdata[__pyx_v_i]); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":57 + /* "_geod.pyx":57 * self.geodesic_t.p1.v = lonsdata[i] * self.geodesic_t.p1.u = latsdata[i] * self.geodesic_t.ALPHA12 = azdata[i] # <<<<<<<<<<<<<< @@ -1061,7 +1060,7 @@ */ ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12 = (__pyx_v_azdata[__pyx_v_i]); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":58 + /* "_geod.pyx":58 * self.geodesic_t.p1.u = latsdata[i] * self.geodesic_t.ALPHA12 = azdata[i] * self.geodesic_t.DIST = distdata[i] # <<<<<<<<<<<<<< @@ -1073,7 +1072,7 @@ } /*else*/ { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":60 + /* "_geod.pyx":60 * self.geodesic_t.DIST = distdata[i] * else: * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] # <<<<<<<<<<<<<< @@ -1082,36 +1081,36 @@ */ __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_lonsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.v = __pyx_t_7; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":61 + /* "_geod.pyx":61 * else: * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] * self.geodesic_t.p1.u = _dg2rad*latsdata[i] # <<<<<<<<<<<<<< * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] * self.geodesic_t.DIST = distdata[i] */ - __pyx_t_4 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_latsdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyNumber_Multiply(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_5 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p1.u = __pyx_t_7; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":62 + /* "_geod.pyx":62 * self.geodesic_t.p1.v = _dg2rad*lonsdata[i] * self.geodesic_t.p1.u = _dg2rad*latsdata[i] * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] # <<<<<<<<<<<<<< @@ -1120,17 +1119,17 @@ */ __pyx_t_5 = __Pyx_GetName(__pyx_m, __pyx_n_s___dg2rad); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = PyFloat_FromDouble((__pyx_v_azdata[__pyx_v_i])); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble((__pyx_v_azdata[__pyx_v_i])); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyNumber_Multiply(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA12 = __pyx_t_7; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":63 + /* "_geod.pyx":63 * self.geodesic_t.p1.u = _dg2rad*latsdata[i] * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] * self.geodesic_t.DIST = distdata[i] # <<<<<<<<<<<<<< @@ -1141,7 +1140,7 @@ } __pyx_L13:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":64 + /* "_geod.pyx":64 * self.geodesic_t.ALPHA12 = _dg2rad*azdata[i] * self.geodesic_t.DIST = distdata[i] * geod_pre(&self.geodesic_t) # <<<<<<<<<<<<<< @@ -1150,7 +1149,7 @@ */ geod_pre((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":65 + /* "_geod.pyx":65 * self.geodesic_t.DIST = distdata[i] * geod_pre(&self.geodesic_t) * if pj_errno != 0: # <<<<<<<<<<<<<< @@ -1160,31 +1159,31 @@ __pyx_t_2 = (pj_errno != 0); if (__pyx_t_2) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":66 + /* "_geod.pyx":66 * geod_pre(&self.geodesic_t) * if pj_errno != 0: * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< * geod_for(&self.geodesic_t) * if pj_errno != 0: */ - __pyx_t_4 = __Pyx_PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); + __pyx_t_3 = 0; + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); - __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L14; } __pyx_L14:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":67 + /* "_geod.pyx":67 * if pj_errno != 0: * raise RuntimeError(pj_strerrno(pj_errno)) * geod_for(&self.geodesic_t) # <<<<<<<<<<<<<< @@ -1193,7 +1192,7 @@ */ geod_for((&((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t)); - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":68 + /* "_geod.pyx":68 * raise RuntimeError(pj_strerrno(pj_errno)) * geod_for(&self.geodesic_t) * if pj_errno != 0: # <<<<<<<<<<<<<< @@ -1203,31 +1202,31 @@ __pyx_t_2 = (pj_errno != 0); if (__pyx_t_2) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":69 + /* "_geod.pyx":69 * geod_for(&self.geodesic_t) * if pj_errno != 0: * raise RuntimeError(pj_strerrno(pj_errno)) # <<<<<<<<<<<<<< * # check for NaN. * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: */ - __pyx_t_4 = __Pyx_PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyBytes_FromString(pj_strerrno(pj_errno)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __Pyx_GOTREF(((PyObject *)__pyx_t_3)); + __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_4)); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_t_3)); + __Pyx_GIVEREF(((PyObject *)__pyx_t_3)); + __pyx_t_3 = 0; + __pyx_t_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_t_4)); - __Pyx_GIVEREF(((PyObject *)__pyx_t_4)); - __pyx_t_4 = 0; - __pyx_t_4 = PyObject_Call(__pyx_builtin_RuntimeError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0; + __Pyx_Raise(__pyx_t_3, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;} goto __pyx_L15; } __pyx_L15:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":71 + /* "_geod.pyx":71 * raise RuntimeError(pj_strerrno(pj_errno)) * # check for NaN. * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: # <<<<<<<<<<<<<< @@ -1237,21 +1236,15 @@ __pyx_t_2 = (((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21 != ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.ALPHA21); if (__pyx_t_2) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":72 + /* "_geod.pyx":72 * # check for NaN. * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: * raise ValueError('undefined inverse geodesic (may be an antipodal point)') # <<<<<<<<<<<<<< * if radians: * lonsdata[i] = self.geodesic_t.p2.v */ - __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(((PyObject *)__pyx_kp_s_3)); - PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_kp_s_3)); - __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3)); - __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_5), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_Raise(__pyx_t_3, 0, 0); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;} @@ -1259,7 +1252,7 @@ } __pyx_L16:; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":73 + /* "_geod.pyx":73 * if self.geodesic_t.ALPHA21 != self.geodesic_t.ALPHA21: * raise ValueError('undefined inverse geodesic (may be an antipodal point)') * if radians: # <<<<<<<<<<<<<< @@ -1269,7 +1262,7 @@ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_radians); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;} if (__pyx_t_2) { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":74 + /* "_geod.pyx":74 * raise ValueError('undefined inverse geodesic (may be an antipodal point)') * if radians: * lonsdata[i] = self.geodesic_t.p2.v # <<<<<<<<<<<<<< @@ -1278,7 +1271,7 @@ */ (__pyx_v_lonsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.v; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":75 + /* "_geod.pyx":75 * if radians: * lonsdata[i] = self.geodesic_t.p2.v * latsdata[i] = self.geodesic_t.p2.u # <<<<<<<<<<<<<< @@ -1287,7 +1280,7 @@ */ (__pyx_v_latsdata[__pyx_v_i]) = ((struct __pyx_obj_5_geod_Geod *)__pyx_v_self)->geodesic_t.p2.u; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":76 + /* "_geod.pyx":76 * lonsdata[i] = self.geodesic_t.p2.v * latsdata[i] = self.geodesic_t.p2.u * azdata[i] = self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< @@ -1299,7 +1292,7 @@ } /*else*/ { - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":78 + /* "_geod.pyx":78 * azdata[i] = self.geodesic_t.ALPHA21 * else: * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v # <<<<<<<<<<<<<< @@ -1318,7 +1311,7 @@ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; (__pyx_v_lonsdata[__pyx_v_i]) = __pyx_t_7; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":79 + /* "_geod.pyx":79 * else: * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v * latsdata[i] = _rad2dg*self.geodesic_t.p2.u # <<<<<<<<<<<<<< @@ -1337,7 +1330,7 @@ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; (__pyx_v_latsdata[__pyx_v_i]) = __pyx_t_7; - /* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":80 + /* "_geod.pyx":80 * lonsdata[i] = _rad2dg*self.geodesic_t.p2.v * latsdata[i] = _rad2dg*self.geodesic_t.p2.u * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 # <<<<<<<<<<<<<< @@ -1368,18 +1361,12 @@ __Pyx_AddTraceback("_geod.Geod._fwd"); __pyx_r = NULL; __pyx_L0:; - __Pyx_DECREF((PyObject *)__pyx_v_self); - __Pyx_DECREF(__pyx_v_lons); - __Pyx_DECREF(__pyx_v_lats); - __Pyx_DECREF(__pyx_v_az); - __Pyx_DECREF(__pyx_v_dist); - __Pyx_DECREF(__pyx_v_radians); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "/Volumes/User/jwhitaker/python/pyproj/_geod.pyx":82 +/* "_geod.pyx":82 * azdata[i] = _rad2dg*self.geodesic_t.ALPHA21 * * def _inv(self, object lons1, object lats1, object lons2, object lats2, radians=False): # <<<<<<<<<<<<<< @@ -1387,9 +1374,9 @@ * inverse transformation - return forward and back azimuths, plus distance */ -static PyObject *__pyx_pf_5_geod_4Geod__inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_5_geod_4Geod__inv[] = "\n inverse transformation - return forward and back azimuths, plus distance\n between an initial and terminus lat/lon pair.\n if radians=True, lons/lats are radians instead of degrees.\n "; -static PyObject *__pyx_pf_5_geod_4Geod__inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_5_geod_4Geod_3_inv[] = "\n inverse transformation - return forward and back azimuths, plus distance\n between an initial and terminus lat/lon pair.\n if radians=True, lons/lats are radians instead of degrees.\n "; +static PyObject *__pyx_pf_5_geod_4Geod_3_inv(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_lons1 = 0; PyObject... [truncated message content]
Revision: 8960 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8960&view=rev Author: jswhit Date: 2011年02月08日 13:01:46 +0000 (2011年2月08日) Log Message: ----------- add new examples from Tom Loredo Modified Paths: -------------- trunk/toolkits/basemap/MANIFEST.in trunk/toolkits/basemap/README trunk/toolkits/basemap/examples/README Modified: trunk/toolkits/basemap/MANIFEST.in =================================================================== --- trunk/toolkits/basemap/MANIFEST.in 2011年02月08日 12:58:49 UTC (rev 8959) +++ trunk/toolkits/basemap/MANIFEST.in 2011年02月08日 13:01:46 UTC (rev 8960) @@ -12,6 +12,8 @@ include setupegg.py include nad2bin.c include src/* +include examples/allskymap.py +include examples/allskymap_cr_example.py include examples/plothighsandlows.py include examples/save_background.py include examples/embedding_map_in_wx.py Modified: trunk/toolkits/basemap/README =================================================================== --- trunk/toolkits/basemap/README 2011年02月08日 12:58:49 UTC (rev 8959) +++ trunk/toolkits/basemap/README 2011年02月08日 13:01:46 UTC (rev 8960) @@ -142,5 +142,6 @@ Christoph Gohlke Eric Bruning Stephane Raynaud +Tom Loredo for valuable contributions. Modified: trunk/toolkits/basemap/examples/README =================================================================== --- trunk/toolkits/basemap/examples/README 2011年02月08日 12:58:49 UTC (rev 8959) +++ trunk/toolkits/basemap/examples/README 2011年02月08日 13:01:46 UTC (rev 8960) @@ -1,5 +1,8 @@ Basemap example scripts +allskymap_cr_example.py is an all-sky plot that uses the module allskymap.py +to make sky maps used in astronomy. + simpletest.py is the simple example given in the Basemap docstrings. simpletest_oo.py is the same example, but using the "OO" interface (does This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8959 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8959&view=rev Author: jswhit Date: 2011年02月08日 12:58:49 +0000 (2011年2月08日) Log Message: ----------- celestial allsky map example from Tom Loredo. Added Paths: ----------- trunk/toolkits/basemap/examples/allskymap.py trunk/toolkits/basemap/examples/allskymap_cr_example.py Added: trunk/toolkits/basemap/examples/allskymap.py =================================================================== --- trunk/toolkits/basemap/examples/allskymap.py (rev 0) +++ trunk/toolkits/basemap/examples/allskymap.py 2011年02月08日 12:58:49 UTC (rev 8959) @@ -0,0 +1,390 @@ +""" +AllSkyMap is a subclass of Basemap, specialized for handling common plotting +tasks for celestial data. + +It is essentially equivalent to using Basemap with full-sphere projections +(e.g., 'hammer' or 'moll') and the `celestial` keyword set to `True`, but +it adds a few new methods: + +* label_meridians for, well, labeling meridians with their longitude values; + +* geodesic, a replacement for Basemap.drawgreatcircle, that can correctly + handle geodesics that cross the limb of the map, and providing the user + easy control over clipping (which affects thick lines at or near the limb); + +* tissot, which overrides Basemap.tissot, correctly handling geodesics that + cross the limb of the map. + +Created Jan 2011 by Tom Loredo, based on Jeff Whitaker's code in Basemap's +__init__.py module. +""" + +from numpy import * +import matplotlib.pyplot as pl +from matplotlib.pyplot import * +from mpl_toolkits.basemap import Basemap, pyproj +from mpl_toolkits.basemap.pyproj import Geod + +__all__ = ['AllSkyMap'] + +def angle_symbol(angle, round_to=1.0): + """ + Return a string representing an angle, rounded and with a degree symbol. + + This is adapted from code in mpl's projections.geo module. + """ + value = np.round(angle / round_to) * round_to + if pl.rcParams['text.usetex'] and not pl.rcParams['text.latex.unicode']: + return r"$%0.0f^\circ$" % value + else: + return u"%0.0f\u00b0" % value + + +class AllSkyMap(Basemap): + """ + AllSkyMap is a subclass of Basemap, specialized for handling common plotting + tasks for celestial data. + + It is essentially equivalent to using Basemap with full-sphere projections + (e.g., 'hammer' or 'moll') and the `celestial` keyword set to `True`, but + it adds a few new methods: + + * label_meridians for, well, labeling meridians with their longitude values; + + * geodesic, a replacement for Basemap.drawgreatcircle, that can correctly + handle geodesics that cross the limb of the map, and providing the user + easy control over clipping (which affects thick lines at or near the + limb); + + * tissot, which overrides Basemap.tissot, correctly handling geodesics that + cross the limb of the map. + """ + + # Longitudes corresponding to east and west edges, reflecting the + # convention that 180 deg is the eastern edge, according to basemap's + # underlying projections: + east_lon = 180. + west_lon = 180.+1.e-10 + + def __init__(self, + projection='hammer', + lat_0=0., lon_0=0., + suppress_ticks=True, + boundinglat=None, + fix_aspect=True, + anchor='C', + ax=None): + + if projection != 'hammer' and projection !='moll': + raise ValueError('Only hammer and moll projections supported!') + + # Use Basemap's init, enforcing the values of many parameters that + # aren't used or whose Basemap defaults would not be altered for all-sky + # celestial maps. + Basemap.__init__(self, llcrnrlon=None, llcrnrlat=None, + urcrnrlon=None, urcrnrlat=None, + llcrnrx=None, llcrnry=None, + urcrnrx=None, urcrnry=None, + width=None, height=None, + projection=projection, resolution=None, + area_thresh=None, rsphere=1., + lat_ts=None, + lat_1=None, lat_2=None, + lat_0=lat_0, lon_0=lon_0, + suppress_ticks=suppress_ticks, + satellite_height=1., + boundinglat=None, + fix_aspect=True, + anchor=anchor, + celestial=True, + ax=ax) + + # Keep a local ref to lon_0 for hemisphere checking. + self._lon_0 = self.projparams['lon_0'] + self._limb = None + + def drawmapboundary(self,color='k',linewidth=1.0,fill_color=None,\ + zorder=None,ax=None): + """ + draw boundary around map projection region, optionally + filling interior of region. + + .. tabularcolumns:: |l|L| + + ============== ==================================================== + Keyword Description + ============== ==================================================== + linewidth line width for boundary (default 1.) + color color of boundary line (default black) + fill_color fill the map region background with this + color (default is no fill or fill with axis + background color). + zorder sets the zorder for filling map background + (default 0). + ax axes instance to use + (default None, use default axes instance). + ============== ==================================================== + + returns matplotlib.collections.PatchCollection representing map boundary. + """ + # Just call the base class version, but keep a copy of the limb + # polygon for clipping. + self._limb = Basemap.drawmapboundary(self, color=color, + linewidth=linewidth, fill_color=fill_color, zorder=zorder, ax=ax) + return self._limb + + def label_meridians(self, lons, fontsize=10, valign='bottom', vnudge=0, + halign='center', hnudge=0): + """ + Label meridians with their longitude values in degrees. + + This labels meridians with negative longitude l with the value 360-l; + for maps in celestial orientation, this means meridians to the right + of the central meridian are labeled from 360 to 180 (left to right). + + `vnudge` and `hnudge` specify amounts in degress to nudge the labels + from their default placements, vertically and horizontally. This + values obey the map orientation, so to nudge to the right, use a + negative `hnudge` value. + """ + # Run through (lon, lat) pairs, with lat=0 in each pair. + lats = len(lons)*[0.] + for lon,lat in zip(lons, lats): + x, y = self(lon+hnudge, lat+vnudge) + if lon < 0: + lon_lbl = 360 + lon + else: + lon_lbl = lon + pl.text(x, y, angle_symbol(lon_lbl), fontsize=fontsize, + verticalalignment=valign, + horizontalalignment=halign) + + def east_hem(self, lon): + """ + Return True if lon is in the eastern hemisphere of the map wrt lon_0. + """ + if (lon-self._lon_0) % 360. <= self.east_lon: + return True + else: + return False + + def geodesic(self, lon1, lat1, lon2, lat2, del_s=.01, clip=True, **kwargs): + """ + Plot a geodesic curve from (lon1, lat1) to (lon2, lat2), with + points separated by arc length del_s. Return a list of Line2D + instances for the curves comprising the geodesic. If the geodesic does + not cross the map limb, there will be only a single curve; if it + crosses the limb, there will be two curves. + """ + + # TODO: Perhaps return a single Line2D instance when there is only a + # single segment, and a list of segments only when there are two segs? + + # TODO: Check the units of del_s. + + # This is based on Basemap.drawgreatcircle (which draws an *arc* of a + # great circle), but addresses a limitation of that method, supporting + # geodesics that cross the map boundary by breaking them into two + # segments, one in the eastern hemisphere and the other in the western. + gc = pyproj.Geod(a=self.rmajor,b=self.rminor) + az12,az21,dist = gc.inv(lon1,lat1,lon2,lat2) + npoints = int((dist+0.5**del_s)/del_s) + # Calculate lon & lat for points on the arc. + lonlats = gc.npts(lon1,lat1,lon2,lat2,npoints) + lons = [lon1]; lats = [lat1] + for lon, lat in lonlats: + lons.append(lon) + lats.append(lat) + lons.append(lon2); lats.append(lat2) + # Break the arc into segments as needed, when there is a longitudinal + # hemisphere crossing. + segs = [] + seg_lons, seg_lats = [lon1], [lat1] + cur_hem = self.east_hem(lon1) + for lon, lat in zip(lons[1:], lats[1:]): + if self.east_hem(lon) == cur_hem: + seg_lons.append(lon) + seg_lats.append(lat) + else: + # We should interpolate a new pt at the boundary, but in + # the mean time just rely on the step size being small. + segs.append( (seg_lons, seg_lats) ) + seg_lons, seg_lats = [lon], [lat] + cur_hem = not cur_hem + segs.append( (seg_lons, seg_lats) ) + # Plot each segment; return a list of the mpl lines. + lines = [] + for lons, lats in segs: + x, y = self(lons, lats) + if clip and self._limb: + line = plot(x, y, clip_path=self._limb, **kwargs)[0] + else: + line = plot(x, y, **kwargs)[0] + lines.append(line) + # If there are multiple segments and no color args, reconcile the + # colors, which mpl will have autoset to different values. + # *** Does this screw up mpl's color set sequence for later lines? + if not kwargs.has_key('c') or kwargs.has_key('color'): + if len(lines) > 1: + c1 = lines[0].get_color() + for line in lines[1:]: + line.set_color(c1) + return lines + + def tissot(self,lon_0,lat_0,radius_deg,npts,ax=None,**kwargs): + """ + Draw a polygon centered at ``lon_0,lat_0``. The polygon + approximates a circle on the surface of the earth with radius + ``radius_deg`` degrees latitude along longitude ``lon_0``, + made up of ``npts`` vertices. + + The polygon represents a Tissot's indicatrix + (http://en.wikipedia.org/wiki/Tissot's_Indicatrix), + which when drawn on a map shows the distortion inherent in the map + projection. Tissots can be used to display azimuthally symmetric + directional uncertainties ("error circles"). + + Extra keyword ``ax`` can be used to override the default axis instance. + + Other \**kwargs passed on to matplotlib.patches.Polygon. + + returns a list of matplotlib.patches.Polygon objects, with two polygons + when the tissot crosses the limb, and just one polygon otherwise. + """ + + # TODO: Just return the polygon (not a list) when there is only one + # polygon? Or stick with the list for consistency? + + # This is based on Basemap.tissot, but addresses a limitation of that + # method by handling tissots that cross the limb of the map by finding + # separate polygons in the eastern and western hemispheres comprising + # the tissot. + ax = kwargs.pop('ax', None) or self._check_ax() + g = pyproj.Geod(a=self.rmajor,b=self.rminor) + az12,az21,dist = g.inv(lon_0,lat_0,lon_0,lat_0+radius_deg) + start_hem = self.east_hem(lon_0) + segs1 = [self(lon_0,lat_0+radius_deg)] + over, segs2 = [], [] + delaz = 360./npts + az = az12 + last_lon = lon_0 + # Note adjacent and opposite edge longitudes, in case the tissot + # runs over the edge. + if start_hem: # eastern case + adj_lon = self.east_lon + opp_lon = self.west_lon + else: + adj_lon = self.west_lon + opp_lon = self.east_lon + for n in range(npts): + az = az+delaz + # skip segments along equator (Geod can't handle equatorial arcs) + if np.allclose(0.,lat_0) and (np.allclose(90.,az) or np.allclose(270.,az)): + continue + else: + lon, lat, az21 = g.fwd(lon_0, lat_0, az, dist) + # If in the starting hemisphere, add to 1st polygon seg list. + if self.east_hem(lon) == start_hem: + x, y = self(lon, lat) + # Add segment if it is in the map projection region. + if x < 1.e20 and y < 1.e20: + segs1.append( (x, y) ) + last_lon = lon + # Otherwise, we cross hemispheres. + else: + # Trace the edge of each hemisphere. + x, y = self(adj_lon, lat) + if x < 1.e20 and y < 1.e20: + segs1.append( (x, y) ) + # We presume if adj projection is okay, opposite is. + segs2.append( self(opp_lon, lat) ) + # Also store the overlap in the opposite hemisphere. + x, y = self(lon, lat) + if x < 1.e20 and y < 1.e20: + over.append( (x, y) ) + last_lon = lon + poly1 = Polygon(segs1, **kwargs) + ax.add_patch(poly1) + if segs2: + over.reverse() + segs2.extend(over) + poly2 = Polygon(segs2, **kwargs) + ax.add_patch(poly2) + return [poly1, poly2] + else: + return [poly1] + + +if __name__ == '__main__': + + # Note that Hammer & Mollweide projections enforce a 2:1 aspect ratio. + # Use figure size good for a 2:1 plot. + fig = figure(figsize=(12,6)) + + # Set up the projection and draw a grid. + map = AllSkyMap(projection='hammer') + # Save the bounding limb to use as a clip path later. + limb = map.drawmapboundary(fill_color='white') + map.drawparallels(np.arange(-75,76,15), linewidth=0.5, dashes=[1,2], + labels=[1,0,0,0], fontsize=9) + map.drawmeridians(np.arange(-150,151,30), linewidth=0.5, dashes=[1,2]) + + # Label a subset of meridians. + lons = np.arange(-150,151,30) + map.label_meridians(lons, fontsize=9, vnudge=1, + halign='left', hnudge=-1) # hnudge<0 shifts to right + + # x, y limits are [0, 4*rt2], [0, 2*rt2]. + rt2 = sqrt(2) + + # Draw a slanted green line crossing the map limb. + line = plot([rt2,0], [rt2,2*rt2], 'g-') + + # Draw a slanted magenta line crossing the map limb but clipped. + line = plot([rt2+.1,0+.1], [rt2,2*rt2], 'm-', clip_path=limb) + + # Draw some geodesics. + # First a transparent thick blue geodesic crossing the limb but not clipped, + # overlayed by a thinner red geodesic that is clipped (by default), to + # illustrate the effect of clipping. + lines = map.geodesic(120, 30, 240, 60, clip=False, c='b', lw=7, alpha=.5) + lines = map.geodesic(240, 60, 120, 30, c='r', lw=3, alpha=.5) + + # Next two large limb-crossing geodesics with the same path, but rendered + # in opposite directions, one transparent blue, the other transparent + # yellow. They should be right on top of each other, giving a greenish + # brown hue. + lines = map.geodesic(240, -60, 120, 30, c='b', lw=2, alpha=.5) + lines = map.geodesic(120, 30, 240, -60, c='y', lw=2, alpha=.5) + + # What happens if a geodesic is given coordinates spanning more than + # a single rotation? Not sure what to expect, but it shoots off the + # map (clipped here). Perhaps we should ensure lons are in [0, 360]. + #lines = map.geodesic(120, 20, 240+360, 50, del_s=.2, c='g') + + # Two tissots fully within the limb. + poly = map.tissot(60, -15, 10, 100) + poly = map.tissot(280, 60, 10, 100) + #poly = map.tissot(90, -85, 10, 100) + + # Limb-spanning tissots in each quadrant. + # lower left: + poly = map.tissot(170, -60, 15, 100) + # upper left: + poly = map.tissot(175, 70, 15, 100) + # upper right (note negative longitude): + poly = map.tissot(-175, 30, 15, 100, color='r', alpha=.6) + # lower right: + poly = map.tissot(185, -40, 10, 100) + + # Plot the tissot centers as "+" symbols. Note the top left symbol + # would cross the limb without the clip_path argument; this might be + # desired to enhance visibility. + lons = [170, 175, -175, 185] + lats = [-60, 70, 30, -40] + x, y = map(lons, lats) + map.scatter(x, y, s=40, marker='+', linewidths=1, edgecolors='g', + facecolors='none', clip_path=limb, zorder=10) # hi zorder -> top + + title('AllSkyMap demo: Clipped lines, markers, geodesics, tissots') + show() Added: trunk/toolkits/basemap/examples/allskymap_cr_example.py =================================================================== --- trunk/toolkits/basemap/examples/allskymap_cr_example.py (rev 0) +++ trunk/toolkits/basemap/examples/allskymap_cr_example.py 2011年02月08日 12:58:49 UTC (rev 8959) @@ -0,0 +1,225 @@ +""" +Example of astronomical use of AllSkyMap class in allskymap.py module + +Plot an all-sky map showing locations of the 27 highest-energy ultra-high +energy cosmic rays detected by the Auger (south) experiment as of Aug 2007, +and locations of 18 (fictitious!) candidate sources. Indicate CR direction +uncertainties and source scattering scales with tissots, and show the +nearest candidate source to each CR with geodesics. + +Created 2011年02月07日 by Tom Loredo +""" + +from cStringIO import StringIO +import numpy as np +from numpy import cos, sin, arccos, deg2rad, rad2deg +import csv, re + +import matplotlib.pyplot as plt +from allskymap import AllSkyMap +from matplotlib.colors import Normalize +from matplotlib.colorbar import ColorbarBase +import matplotlib.ticker as ticker + + +class Source: + """ + Parse and store data for a celestial source. + """ + + int_re = re.compile(r'^[-+]?[0-9]+$') + # float_re = re.compile(r'^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$') + + def __init__(self, id, year, day, l, b, sig=None, **kwds): + self.id = int(id) + self.year = int(year) + self.day = int(day) + self.l = float(l) + self._l = deg2rad(self.l) # radians + self.b = float(b) + self._b = deg2rad(self.b) # radians + if sig is not None: + self.sig = float(sig) + self._sig = deg2rad(self.sig) + else: + self.sig, self._sig = None, None + # If extra values are specified as keywords, set them as + # attributes. The quick way is to use self.__dict__.update(kwds), + # but we want to convert to int or float values if possible. + # *** Consider using matplotlib.cbook.converter. + if kwds: + for key, val in kwds.items(): + try: + nval = float(val) + # It's a number; but it may be an int. + if self.int_re.match(str(val)): + nval = int(val) + setattr(self, key, nval) + except ValueError: # non-numerical value + setattr(self, key, val) + + def gcangle(self, src): + """ + Calculate the great circle angle to another source. + """ + # Use the law of cosines; note it is usually expressed with colattitude. + c = sin(self._b)*sin(src._b) + \ + cos(self._b)*cos(src._b)*cos(self._l - src._l) + return rad2deg(arccos(c)) + + +# Auger UHE cosmic ray data, Jan 2004 to Aug 2007 +# From Appendix A of Abraham et al. (2008); "Correlation of the highest-energy +# cosmic rays with the positions of nearby active galactic nuclei," +# Astropart.Phys.29:188-204,2008; Erratum-ibid.30:45,2008 + +# Year day ang S(1000) E (EeV) RA Dec Longitude Latitude +# * = w/i 3.2 deg of AGN +AugerData = StringIO( +"""2004 125 47.7 252 70 267.1 -11.4 15.4 8.4 +2004 142 59.2 212 84 199.7 -34.9 -50.8 27.6 * +2004 282 26.5 328 66 208.0 -60.3 -49.6 1.7 * +2004 339 44.7 316 83 268.5 -61.0 -27.7 -17.0 * +2004 343 23.4 323 63 224.5 -44.2 -34.4 13.0 * +2005 54 35.0 373 84 17.4 -37.9 -75.6 -78.6 * +2005 63 54.5 214 71 331.2 -1.2 58.8 -42.4 * +2005 81 17.2 308 58 199.1 -48.6 -52.8 14.1 * +2005 295 15.4 311 57 332.9 -38.2 4.2 -54.9 * +2005 306 40.1 248 59 315.3 -0.3 48.8 -28.7 * +2005 306 14.2 445 84 114.6 -43.1 -103.7 -10.3 +2006 35 30.8 398 85 53.6 -7.8 -165.9 -46.9 * +2006 55 37.9 255 59 267.7 -60.7 -27.6 -16.5 * +2006 81 34.0 357 79 201.1 -55.3 -52.3 7.3 +2006 185 59.1 211 83 350.0 9.6 88.8 -47.1 * +2006 296 54.0 208 69 52.8 -4.5 -170.6 -45.7 * +2006 299 26.0 344 69 200.9 -45.3 -51.2 17.2 * +2007 13 14.3 762 148 192.7 -21.0 -57.2 41.8 +2007 51 39.2 247 58 331.7 2.9 63.5 -40.2 * +2007 69 30.4 332 70 200.2 -43.4 -51.4 19.2 ** +2007 84 17.3 340 64 143.2 -18.3 -109.4 23.8 * +2007 145 23.9 392 78 47.7 -12.8 -163.8 -54.4 * +2007 186 44.8 248 64 219.3 -53.8 -41.7 5.9 +2007 193 18.0 469 90 325.5 -33.5 12.1 -49.0 * +2007 221 35.3 318 71 212.7 -3.3 -21.8 54.1 * +2007 234 33.2 365 80 185.4 -27.9 -65.1 34.5 +2007 235 42.6 276 69 105.9 -22.9 -125.2 -7.7 +""") +AugerTable = csv.reader(AugerData, dialect='excel-tab') +CRs = {} +for id, row in enumerate(AugerTable): + # Make an integer ID from Year+Day (presumes none on same day!). + src = Source(id, row[0], row[1], row[7], row[8], E=float(row[4])) + CRs[src.id] = src +print 'Parsed data for', len(CRs), 'UHE CRs...' + +# Partly fictitious candidate source locations. +# src.id src.l_deg src.b_deg src.xProj src.yProj +# tab-delimited +CandData = StringIO( +"""1 270. -28. +2 229. -80. +3 141. -47. +4 172. -51. +5 251. -51. +6 241. -36. +7 281. 26. +8 241. 64. +9 240. 64. +10 148. 70. +11 305. 13. +12 98. 79. +13 309. 19. +14 104. 68. +15 104. 68. +16 321. 15. +17 328. -14. +18 177.5 -35. +""") +# Add this line above to see a tissot overlapping the map limb. +CandTable = csv.reader(CandData, dialect='excel-tab') +cands = {} +for row in CandTable: + src = Source(row[0], 0, 0, row[1], row[2]) + cands[src.id] = src +print 'Parsed data for', len(cands), 'candidate sources...' + +# Calculate the separation matrix; track the closest candidate to each CR. +sepn = {} +for cr in CRs.values(): + id, sep = None, 181. + for cand in cands.values(): + val = cr.gcangle(cand) + sepn[cr.id, cand.id] = val + if val < sep: + id, sep = cand.id, val + # Store the closest candidate id and separation as a CR attribute. + cr.near_id = id + cr.near_ang = sep + + +# Note that Hammer & Mollweide projections enforce a 2:1 aspect ratio. +# Choose figure size for a 2:1 plot, with room at bottom for colorbar. +fig = plt.figure(figsize=(12,7)) +main_ax = plt.axes([0.05, .19, .9, .75]) # rect=L,B,W,H + +# Set up the projection and draw a grid. +m = AllSkyMap(ax=main_ax, projection='hammer') +m.drawmapboundary(fill_color='white') +m.drawparallels(np.arange(-75,76,15), linewidth=0.5, dashes=[1,2], + labels=[1,0,0,0], fontsize=9) +m.drawmeridians(np.arange(-150,151,30), linewidth=0.5, dashes=[1,2]) + +# Label a subset of meridians. +lons = np.arange(-150,151,30) +m.label_meridians(lons, fontsize=9, vnudge=1, + halign='left', hnudge=-1) # nudge<0 shifts to right + +# Plot CR directions. +lvals = [src.l for src in CRs.values()] +bvals = [src.b for src in CRs.values()] +x, y = m(lvals, bvals) +# These symbols will be covered by opaque tissots; plot them anyway +# so there is a collection for the legend. +cr_pts = m.scatter(x, y, s=8, c='r', marker='o', linewidths=.5, + edgecolors='none') + +# Plot tissots showing uncertainties, colored by energy. +# We use 1 deg uncertainties, which are probably ~2 sigma for most events. +Evals = np.array([src.E for src in CRs.values()]) +norm_E = Normalize(Evals.min()-10, Evals.max()+20) # -+ for jet_r for brt clrs +# jet_r color map is in spectral sequence, with a small unsaturated +# green range, helping to distinguish CRs from candidates. +cmap = plt.cm.get_cmap('jet_r') +for cr in CRs.values(): + color = cmap(norm_E(cr.E))[0:3] # ignore alpha + m.tissot(cr.l, cr.b, 2., 30, ec='none', color=color, alpha=1) + +# Plot candidate directions. +lvals = [src.l for src in cands.values()] +bvals = [src.b for src in cands.values()] +x, y = m(lvals, bvals) +cand_pts = m.scatter(x, y, marker='+', linewidths=.5, + edgecolors='k', facecolors='none', zorder=10) # hi zorder -> top + +# Plot tissots showing possible scale of candidate scatter. +for l, b in zip(lvals, bvals): + m.tissot(l, b, 5., 30, ec='none', color='g', alpha=0.25) + +# Show the closest candidate to each CR. +for cr in CRs.values(): + cand = cands[cr.near_id] + m.geodesic(cr.l, cr.b, cand.l, cand.b, lw=0.5, ls='-', c='g') + +plt.title('UHE Cosmic Rays and Candidate Sources') +plt.legend([cr_pts, cand_pts], ['UHE CR', 'Candidate'], + frameon=False, loc='lower right', scatterpoints=1) + +# Plot a colorbar for the CR energies. +cb_ax = plt.axes([0.25, .1, .5, .03], frameon=False) # rect=L,B,W,H +#bar = ColorbarBase(cb_ax, cmap=cmap, orientation='horizontal', drawedges=False) +vals = np.linspace(Evals.min(), Evals.max(), 100) +bar = ColorbarBase(cb_ax, values=vals, norm=norm_E, cmap=cmap, + orientation='horizontal', drawedges=False) +bar.set_label('CR Energy (EeV)') + +plt.show() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8958 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8958&view=rev Author: efiring Date: 2011年02月08日 04:42:17 +0000 (2011年2月08日) Log Message: ----------- cbook.report_memory: restore compatibility with earlier subprocess versions Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/cbook.py Modified: trunk/matplotlib/lib/matplotlib/cbook.py =================================================================== --- trunk/matplotlib/lib/matplotlib/cbook.py 2011年02月07日 22:49:09 UTC (rev 8957) +++ trunk/matplotlib/lib/matplotlib/cbook.py 2011年02月08日 04:42:17 UTC (rev 8958) @@ -1233,7 +1233,7 @@ def report_memory(i=0): # argument may go away 'return the memory consumed by process' - from subprocess import Popen, PIPE, check_output + from subprocess import Popen, PIPE pid = os.getpid() if sys.platform=='sunos5': a2 = Popen('ps -p %d -o osz' % pid, shell=True, @@ -1248,7 +1248,13 @@ stdout=PIPE).stdout.readlines() mem = int(a2[1].split()[0]) elif sys.platform.startswith('win'): - a2 = check_output(["tasklist", "/nh", "/fi", "pid eq %d" % pid]) + try: + a2 = Popen(["tasklist", "/nh", "/fi", "pid eq %d" % pid], + stdout=PIPE).stdout.read() + except OSError: + raise NotImplementedError( + "report_memory works on Windows only if " + "the 'tasklist' program is found") mem = int(a2.strip().split()[-2].replace(',','')) else: raise NotImplementedError( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.