--- Begin Message ---
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
Please unblock pymoc/0.4.2-1 for stretch.
This fixes a FTBFS on stretch/i386 reported by
Lucas Nussbaum during the full-rebuild. This was triggered by a
failing testcase on 32-bit systems:
https://bugs.debian.org/860629
https://github.com/grahambell/pymoc/issues/3
The fix has come from upstream and arrived within 24 hours; the patch
contains 2-lines of real code changes (in lib/pymoc/io/fits.py). The
remainder of the diff are two new test case and accompanying
changelog/documentation tweaks.
This would appear to meet criteria 1; (a FTBFS marked as 'serious',
with a targetted fix with optional documentation changes) uploaded via
unstable:
https://release.debian.org/stretch/freeze_policy.html
Full debdiff attached.
-Paul
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
iD8DBQFY+Motc444tukM+iQRAmRwAKCD2SkybjBrURrCI0pce0t+UskA1ACePnbp
/UU7IwJdFfiUuPPeJKwYlTw=
=J+Lg
-----END PGP SIGNATURE-----
diff -Nru pymoc-0.4.1/CHANGES.txt pymoc-0.4.2/CHANGES.txt
--- pymoc-0.4.1/CHANGES.txt 2016-09-26 13:05:27.000000000 +0200
+++ pymoc-0.4.2/CHANGES.txt 2017-04-20 05:15:32.000000000 +0200
@@ -1,3 +1,8 @@
+0.4.2 2017-04-19
+
+ - Corrected bug reading MOCs in FITS format on 32-bit systems with
+ 64-bit NUNIQ columns.
+
0.4.1 2016-08-08
- Corrected bug in intersection routine.
diff -Nru pymoc-0.4.1/debian/changelog pymoc-0.4.2/debian/changelog
--- pymoc-0.4.1/debian/changelog 2016-09-26 13:12:24.000000000 +0200
+++ pymoc-0.4.2/debian/changelog 2017-04-20 15:21:00.000000000 +0200
@@ -1,3 +1,10 @@
+pymoc (0.4.2-1) unstable; urgency=low
+
+ * Import upstream bugfix release (0.4.2)
+ + Fix large FITS import on 32-bit architectures (Closes: #860629)
+
+ -- Paul Sladen <debian@paul.sladen.org> Thu, 20 Apr 2017 15:21:00 +0200
+
pymoc (0.4.1-1) unstable; urgency=low
* Initial release (Closes: #839744)
diff -Nru pymoc-0.4.1/debian/copyright pymoc-0.4.2/debian/copyright
--- pymoc-0.4.1/debian/copyright 2016-09-26 13:12:24.000000000 +0200
+++ pymoc-0.4.2/debian/copyright 2017-04-20 15:21:00.000000000 +0200
@@ -5,7 +5,7 @@
Files: *
Copyright: 2014-2016, Graham Bell
- 2015-2016, East Asian Observatory
+ 2015-2017, East Asian Observatory
2013-2014, Science and Technology Facilities Council
License: GPL-3+
diff -Nru pymoc-0.4.1/doc/.gitignore pymoc-0.4.2/doc/.gitignore
--- pymoc-0.4.1/doc/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ pymoc-0.4.2/doc/.gitignore 2017-04-20 05:15:32.000000000 +0200
@@ -0,0 +1 @@
+/_build
diff -Nru pymoc-0.4.1/.gitignore pymoc-0.4.2/.gitignore
--- pymoc-0.4.1/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ pymoc-0.4.2/.gitignore 2017-04-20 05:15:32.000000000 +0200
@@ -0,0 +1,5 @@
+*~
+*.pyc
+/MANIFEST
+/build
+/dist
diff -Nru pymoc-0.4.1/lib/pymoc/io/fits.py pymoc-0.4.2/lib/pymoc/io/fits.py
--- pymoc-0.4.1/lib/pymoc/io/fits.py 2016-09-26 13:05:27.000000000 +0200
+++ pymoc-0.4.2/lib/pymoc/io/fits.py 2017-04-20 05:15:32.000000000 +0200
@@ -1,4 +1,5 @@
# Copyright (C) 2013-2014 Science and Technology Facilities Council.
+# Copyright (C) 2017 East Asian Observatory.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -143,8 +144,12 @@
current_order = None
current_cells = []
+ # Determine type to use for orders: 32 bit if column type is J,
+ # otherwise assume we need 64 bit.
+ moc_type = np.int32 if (hdu.data.formats[0] == 'J') else np.int64
+
nuniqs = hdu.data.field(0)
- orders = (np.log2(nuniqs / 4) / 2).astype(int)
+ orders = (np.log2(nuniqs / 4) / 2).astype(moc_type)
cells = nuniqs - 4 * (4 ** orders)
for (order, cell) in izip(orders, cells):
diff -Nru pymoc-0.4.1/lib/pymoc/version.py pymoc-0.4.2/lib/pymoc/version.py
--- pymoc-0.4.1/lib/pymoc/version.py 2016-09-26 13:05:27.000000000 +0200
+++ pymoc-0.4.2/lib/pymoc/version.py 2017-04-20 05:15:32.000000000 +0200
@@ -13,4 +13,4 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-version = '0.4.1'
+version = '0.4.2'
diff -Nru pymoc-0.4.1/test/test_ascii.py pymoc-0.4.2/test/test_ascii.py
--- pymoc-0.4.1/test/test_ascii.py 2016-09-26 13:05:27.000000000 +0200
+++ pymoc-0.4.2/test/test_ascii.py 2017-04-20 05:15:32.000000000 +0200
@@ -40,3 +40,28 @@
write_moc_ascii(moc, file=out)
self.assertEqual(out.getvalue(), test_ascii_sorted)
+
+ def test_ascii_large(self):
+ orig = MOC()
+ orig.add(29, [
+ 3458700000000000000, 3458700000000000007,
+ 3458700000000000008, 3458700000000000009,
+ ])
+
+ out = StringIO()
+ write_moc_ascii(orig, file=out)
+ text = out.getvalue()
+
+ self.assertEqual(
+ text, '29/3458700000000000000,'
+ '3458700000000000007-3458700000000000009')
+
+ copy = MOC()
+ in_ = StringIO(text)
+ read_moc_ascii(copy, file=in_)
+
+ self.assertEqual(copy.order, 29)
+ self.assertEqual(copy.cells, 4)
+ self.assertEqual(copy[29], frozenset([
+ 3458700000000000000, 3458700000000000007,
+ 3458700000000000008, 3458700000000000009]))
diff -Nru pymoc-0.4.1/test/test_json.py pymoc-0.4.2/test/test_json.py
--- pymoc-0.4.1/test/test_json.py 2016-09-26 13:05:27.000000000 +0200
+++ pymoc-0.4.2/test/test_json.py 2017-04-20 05:15:32.000000000 +0200
@@ -39,3 +39,28 @@
write_moc_json(moc, file=out)
self.assertEqual(out.getvalue(), test_json)
+
+ def test_json_large(self):
+ orig = MOC()
+ orig.add(29, [
+ 3458700000000000000, 3458700000000000007,
+ 3458700000000000008, 3458700000000000009,
+ ])
+
+ out = BytesIO()
+ write_moc_json(orig, file=out)
+ json = out.getvalue()
+
+ self.assertEqual(
+ json, b'{"29":[3458700000000000000,3458700000000000007,'
+ b'3458700000000000008,3458700000000000009]}')
+
+ copy = MOC()
+ in_ = BytesIO(json)
+ read_moc_json(copy, file=in_)
+
+ self.assertEqual(copy.order, 29)
+ self.assertEqual(copy.cells, 4)
+ self.assertEqual(copy[29], frozenset([
+ 3458700000000000000, 3458700000000000007,
+ 3458700000000000008, 3458700000000000009]))
--- End Message ---