diff options
author | Eric Wieser <wieser.eric@gmail.com> | 2019-08-19 19:20:52 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-19 19:20:52 -0500 |
commit | e1c42bb77fa727f0b214f3433207e20261acb57f (patch) | |
tree | cf4da7cd17f747fe707c7dfc7d55fbd25503e2b9 /numpy/core | |
parent | 98bdde643af6443d68a8c6233807b75bd3f0ed80 (diff) | |
parent | dd9051c78476be2bc2cbf03ab895e8dde5ca14ca (diff) | |
download | numpy-e1c42bb77fa727f0b214f3433207e20261acb57f.tar.gz |
Merge pull request #14295 from WarrenWeckesser/binary-repr-arg
BUG: core: Handle large negative np.int64 args in binary_repr.
Diffstat (limited to 'numpy/core')
-rw-r--r-- | numpy/core/numeric.py | 4 | ||||
-rw-r--r-- | numpy/core/tests/test_numeric.py | 5 |
2 files changed, 9 insertions, 0 deletions
diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py index ff8c58867..bbcd58abb 100644 --- a/numpy/core/numeric.py +++ b/numpy/core/numeric.py @@ -1935,6 +1935,10 @@ def binary_repr(num, width=None): "will raise an error in the future.", DeprecationWarning, stacklevel=3) + # Ensure that num is a Python integer to avoid overflow or unwanted + # casts to floating point. + num = operator.index(num) + if num == 0: return '0' * (width or 1) diff --git a/numpy/core/tests/test_numeric.py b/numpy/core/tests/test_numeric.py index 3e85054b7..c479a0f6d 100644 --- a/numpy/core/tests/test_numeric.py +++ b/numpy/core/tests/test_numeric.py @@ -1341,6 +1341,11 @@ class TestBinaryRepr(object): exp = '1' + (width - 1) * '0' assert_equal(np.binary_repr(num, width=width), exp) + def test_large_neg_int64(self): + # See gh-14289. + assert_equal(np.binary_repr(np.int64(-2**62), width=64), + '11' + '0'*62) + class TestBaseRepr(object): def test_base3(self): |