
On 4/5/2011 7:44 PM, Mark Wiebe wrote:
On Tue, Apr 5, 2011 at 7:21 PM, Christoph Gohlke <cgohlke@uci.edu <mailto:cgohlke@uci.edu>> wrote:
On 4/5/2011 6:46 PM, Mark Wiebe wrote: > On Tue, Apr 5, 2011 at 5:07 PM, Christoph Gohlke <cgohlke@uci.edu <mailto:cgohlke@uci.edu> > <mailto:cgohlke@uci.edu <mailto:cgohlke@uci.edu>>> wrote: > > > > On 4/5/2011 4:05 PM, Mark Wiebe wrote: > > On Mon, Apr 4, 2011 at 9:10 PM, Christoph Gohlke <cgohlke@uci.edu <mailto:cgohlke@uci.edu> > <mailto:cgohlke@uci.edu <mailto:cgohlke@uci.edu>> > > <mailto:cgohlke@uci.edu <mailto:cgohlke@uci.edu> <mailto:cgohlke@uci.edu <mailto:cgohlke@uci.edu>>>> wrote: > > > > > > <snip> > > > > A few numpy tests fail on win-amd64: > > > > <snip> > > > > > ====================================================================== > > FAIL: test_iterator.test_iter_broadcasting_errors > > > ---------------------------------------------------------------------- > > Traceback (most recent call last): > > File "X:\Python26-x64\lib\site-packages\nose\case.py", line > 187, in > > runTest > > self.test(*self.arg) > > File > > "X:\Python26-x64\lib\site-packages\numpy\core\tests\test_iterator.py", > > line 639, in test_iter_broadcasting_errors > > 'Message "%s" doesn\'t contain operand shape (2,3)' % msg) > > File > "X:\Python26-x64\lib\site-packages\numpy\testing\utils.py", line > > 34, in assert_ > > raise AssertionError(msg) > > AssertionError: Message "non-broadcastable output operand with > shape > > (%lld,%lld) > > doesn't match the broadcast shape (%lld,%lld,%lld)" doesn't > contain > > operand shape (2,3) > > > > > > I've pushed a fix for this to the 1.6.x branch, can you confirm > that it > > works on win-amd64? > > > > Thanks, > > Mark > > > > <snip> > > > > Sorry, I forgot to mention that this test failed on 64-bit Python 2.6 > only. I now recognize it is due to a known issue with Python's > PyErr_Format function <http://bugs.python.org/issue7228>. Unfortunately > the fix will not be backported to Python 2.6. Maybe this test could be > marked as known failure on win-amd64-py2.6? > > Could you please revert your changes or set the format specifier to > "%lld"? "%I64d" is not supported by PyErr_Format. > > > I've committed an attempted workaround using the %zd formatter, can you > check whether it works on 64-bit Windows Python 2.6 now? > > Thanks, > Mark >
I have not tried but I do not expect it to work. According to <http://docs.python.org/c-api/string.html> the "%zd" format is 'exactly equivalent to printf("%zd")'. The 'z' prefix character is C99 AFAIK and not supported by Visual Studio compilers <http://msdn.microsoft.com/en-us/library/xdb9w69d%28v=VS.90%29.aspx>.
I think there's a good chance it will work, since the CPython code is re-interpreting the format codes itself. In the Python 2.6 code, it looks like it will become %Id on Windows, which would be correct.
-Mark
Agreed, it'll work if NPY_INTP_FMT is only used with certain Python functions that use %Id instead of %zd on Windows. Then why not simply define NPY_INTP_FMT as %zd? - #if (PY_VERSION_HEX > 0x02060000) - #define NPY_INTP_FMT "lld" - #else #define NPY_INTP_FMT "zd" - #endif That should work unless 64 bit numpy is run on a LLP64 platform with Python < 2.5. Christoph