On Tue, Apr 5, 2011 at 5:07 PM, Christoph Gohlke <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>> 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.

This means PyString_Format and PyOS_snprintf support different sets of formatting characters, which begs the question of which set of functions should the NPY_*_FMT macros be intended for? Currently it looks like just the NPY_INTP_FMT is used with PyString_Format/PyErr_Format, and the rest are used with PyOS_snprintf. Also, in other places npy_intp variables are cast to long and "%ld" is used instead of NPY_INTP_FMT. I suppose I'll just change NPY_INTP_FMT unconditionally to "%lld" when it's long long, since that's what the PyString_Format 2.7 documentation says is the correct portable formatter.

-Mark
 

Thanks,

Christoph
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion