[Numpy-discussion] ANN: Numpy 1.6.0 beta 2

Christoph Gohlke cgohlke at uci.edu
Wed Apr 6 01:09:25 EDT 2011



On 4/5/2011 7:44 PM, Mark Wiebe wrote:
> On Tue, Apr 5, 2011 at 7:21 PM, Christoph Gohlke <cgohlke at uci.edu
> <mailto:cgohlke at 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 at uci.edu
>     <mailto:cgohlke at uci.edu>
>     >  <mailto:cgohlke at uci.edu <mailto:cgohlke at 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 at uci.edu <mailto:cgohlke at uci.edu>
>     >  <mailto:cgohlke at uci.edu <mailto:cgohlke at uci.edu>>
>     >  > <mailto:cgohlke at uci.edu <mailto:cgohlke at uci.edu>
>     <mailto:cgohlke at uci.edu <mailto:cgohlke at 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



More information about the NumPy-Discussion mailing list