--- /dev/null
+debian/fits2bitmap.1
+debian/fitscheck.1
+debian/fitsdiff.1
+debian/fitsheader.1
+debian/fitsinfo.1
+debian/samp_hub.1
+debian/volint.1
+debian/wcslint.1
--- /dev/null
+python-astropy (1.3-8) unstable; urgency=medium
+
+ * Switch to unstable. Closes: #852550
+ * Revert unrelated "Improved detection of ascii fast_reader in non-fast
+ parsers"
+
+ -- Ole Streicher <olebole@debian.org> Wed, 25 Jan 2017 16:17:26 +0100
+
+python-astropy (1.3-8~exp2) experimental; urgency=medium
+
+ * Fix pytest section, finally re-enabling doctests
+
+ -- Ole Streicher <olebole@debian.org> Thu, 19 Jan 2017 17:27:30 +0100
+
+python-astropy (1.3-8~exp1) experimental; urgency=medium
+
+ * Switch to experimental for some tests
+ * Try to fix doctest failures
+ * Improved detection of ascii fast_reader in non-fast parsers
+
+ -- Ole Streicher <olebole@debian.org> Thu, 19 Jan 2017 09:57:22 +0100
+
+python-astropy (1.3-7) unstable; urgency=medium
+
+ * Allow stderr in all tests
+
+ -- Ole Streicher <olebole@debian.org> Sun, 15 Jan 2017 14:35:17 +0100
+
+python-astropy (1.3-6) unstable; urgency=medium
+
+ * Override missing-build-dependency-for-dh_-command
+ * Add python-astropy-affiliated to suggestions
+ * Add pytest to package dependencies
+ * Fix default value for remote_data option. Closes: #849501
+ * Remove wcslib 4.24 compatibility property. Closes: #844525
+
+ -- Ole Streicher <olebole@debian.org> Sat, 14 Jan 2017 11:28:01 +0100
+
+python-astropy (1.3-5) unstable; urgency=medium
+
+ * Manually add dependencies for external packages
+
+ -- Ole Streicher <olebole@debian.org> Thu, 12 Jan 2017 22:51:46 +0100
+
+python-astropy (1.3-4) unstable; urgency=medium
+
+ * Mark doc package as Multi-Arch: foreign as suggested by Multiarch hinter
+ * Remove wcsaxes suggestions since this is now part of astropy
+ * Use external modules instead of convenience copies. Closes: #849502
+ * Temporarily disable doctests (not working with pytest 3.0.5)
+ * Remove explicite dh_strip_nondeterminism
+
+ -- Ole Streicher <olebole@debian.org> Thu, 12 Jan 2017 12:17:23 +0100
+
+python-astropy (1.3-3) unstable; urgency=medium
+
+ * Ensure NUMPY_LT_1_12 works for beta prerelease. Closes: #849271
+
+ -- Ole Streicher <olebole@debian.org> Thu, 29 Dec 2016 09:52:44 +0100
+
+python-astropy (1.3-2) unstable; urgency=low
+
+ * Disable TestDisplayWorldCoordinate.test_cube_coords to fix FTBFS on MIPS
+
+ -- Ole Streicher <olebole@debian.org> Fri, 23 Dec 2016 17:58:24 +0100
+
+python-astropy (1.3-1) unstable; urgency=low
+
+ * New upstream version 1.3
+ * Switch back to unstable
+ * Rediff patches
+
+ -- Ole Streicher <olebole@debian.org> Fri, 23 Dec 2016 15:13:46 +0100
+
+python-astropy (1.3~rc1-1) experimental; urgency=low
+
+ * Add python3-pkg-resources to astropy-tools dependencies. Closes: #839746
+ * Disable failing VO SSL test to avoid FTBFS with recent Python release.
+ Closes: #844984
+ * New upstream version 1.3~rc1
+ * Rediff patches
+ * Re-enable WCS.all_world2pix test (should be fixed now)
+
+ -- Ole Streicher <olebole@debian.org> Tue, 13 Dec 2016 09:44:29 +0100
+
+python-astropy (1.2.1-1) unstable; urgency=low
+
+ * New upstream version
+
+ -- Ole Streicher <olebole@debian.org> Thu, 23 Jun 2016 09:48:06 +0200
+
+python-astropy (1.2-1) unstable; urgency=low
+
+ * New upstream version. Switch back to unstable
+
+ -- Ole Streicher <olebole@debian.org> Mon, 20 Jun 2016 15:10:14 +0200
+
+python-astropy (1.2~rc1-3) experimental; urgency=low
+
+ * Re-enable unfixed yet tests
+
+ -- Ole Streicher <olebole@debian.org> Thu, 16 Jun 2016 14:06:19 +0200
+
+python-astropy (1.2~rc1-2) experimental; urgency=low
+
+ * Temporarily disable all xfail marks
+
+ -- Ole Streicher <olebole@debian.org> Tue, 14 Jun 2016 21:32:33 +0200
+
+python-astropy (1.2~rc1-1) experimental; urgency=low
+
+ * New upstream RC. Switch to experimental
+ * Install Python 3 versions of the scripts
+ * Push Standards-Version to 3.9.8. No changes needed
+
+ -- Ole Streicher <olebole@debian.org> Sun, 12 Jun 2016 10:32:16 +0200
+
+python-astropy (1.1.2-1) unstable; urgency=low
+
+ * Add ASCL-Id
+ * New upstream version
+ * Fix cfitsio related tests. Closes: #816715
+
+ -- Ole Streicher <olebole@debian.org> Fri, 11 Mar 2016 10:54:46 +0100
+
+python-astropy (1.1.1-3) unstable; urgency=medium
+
+ * Fix for newer pytest. Closes: #812648
+ * Fix for wcslib 5.13
+ * Fix for known test issue with new numpy
+ * Push standards-version to 3.9.7. No changes needed.
+ * Adjust VCS entries in d/control
+
+ -- Ole Streicher <olebole@debian.org> Sun, 14 Feb 2016 15:09:01 +0100
+
+python-astropy (1.1.1-2) unstable; urgency=low
+
+ * Fix dependency of python-astropy-utils on python-astropy
+ * Finally fix test failure
+ * Switch back to unstable since bugfix is approved upstream
+
+ -- Ole Streicher <olebole@debian.org> Thu, 14 Jan 2016 23:06:52 +0100
+
+python-astropy (1.1.1-1~exp1) experimental; urgency=low
+
+ * New upstream version
+ * Depend python-astropy-utils on python-astropy of the same version.
+ Closes: #807834
+ * Revert astropy.wcs to 1.1 to workaround test failure
+ * Switch to experimental since WCS seems to be buggy
+
+ -- Ole Streicher <olebole@debian.org> Thu, 14 Jan 2016 11:14:05 +0100
+
+python-astropy (1.1-1) unstable; urgency=low
+
+ * New upstream version
+ * Switch back to unstable
+
+ -- Ole Streicher <olebole@debian.org> Sat, 12 Dec 2015 10:02:22 +0100
+
+python-astropy (1.1~rc2-1) experimental; urgency=low
+
+ * New upstream RC version
+
+ -- Ole Streicher <olebole@debian.org> Tue, 08 Dec 2015 09:29:29 +0100
+
+python-astropy (1.1~rc1-1) experimental; urgency=low
+
+ * New upstream RC version
+
+ -- Ole Streicher <olebole@debian.org> Tue, 24 Nov 2015 21:09:40 +0100
+
+python-astropy (1.1~b1-1) experimental; urgency=low
+
+ * New upstream beta version
+ * [Martin Pitt] Ignore stderr for python3 test to avoid failing on
+ the ResourceWarning stderr message. Closes: #803068
+
+ -- Ole Streicher <olebole@debian.org> Fri, 16 Oct 2015 08:58:30 +0200
+
+python-astropy (1.0.5-2) unstable; urgency=low
+
+ * Fix FTBS on i386
+
+ -- Ole Streicher <olebole@debian.org> Thu, 08 Oct 2015 15:44:51 +0200
+
+python-astropy (1.0.5-1) unstable; urgency=low
+
+ * New upstream version, providing Python-3.5 compatibility. Closes: #800727
+ * Limit wcslib-dev version to pre-5 releases
+
+ -- Ole Streicher <olebole@debian.org> Tue, 06 Oct 2015 13:26:14 +0200
+
+python-astropy (1.0.4-1) unstable; urgency=low
+
+ * New upstream version
+ * Re-enable dh_strip_nondeterminism override. See #791574 for details.
+
+ -- Ole Streicher <olebole@debian.org> Thu, 27 Aug 2015 10:32:44 +0200
+
+python-astropy (1.0.3-3) unstable; urgency=low
+
+ * Extend Suggests, and build/test-depend on scipy for more extended tests
+ * Fix conflicts/replaces of astropy-utils with pyfits-utils. Closes: #790530
+ * Temporarily remove dh_strip_nondeterminism
+ * Override image-file-in-usr-lib lintian
+
+ -- Ole Streicher <olebole@debian.org> Thu, 16 Jul 2015 10:46:32 +0200
+
+python-astropy (1.0.3-2) unstable; urgency=low
+
+ * Fix FTBS with hurd-i386
+
+ -- Ole Streicher <olebole@debian.org> Wed, 24 Jun 2015 10:38:18 +0200
+
+python-astropy (1.0.3-1) unstable; urgency=low
+
+ * New upstream version
+
+ -- Ole Streicher <olebole@debian.org> Sun, 07 Jun 2015 17:55:56 +0200
+
+python-astropy (1.0.2-1) unstable; urgency=low
+
+ * New upstream version.
+ * Create upstream/metadata with bibliographic information
+ * Create debci control file
+ * New binary package astropy-utils. Conflicts with pyfits-utils.
+ * Package png files as well. Closes: #783573
+ * switch back to unstable
+
+ -- Ole Streicher <olebole@debian.org> Thu, 16 Apr 2015 22:15:02 +0200
+
+python-astropy (1.0-1~exp) experimental; urgency=low
+
+ * New upstream version.
+
+ -- Ole Streicher <olebole@debian.org> Thu, 19 Feb 2015 09:09:44 +0100
+
+python-astropy (1.0~rc2-1) experimental; urgency=medium
+
+ * New upstream release candidate
+
+ -- Ole Streicher <olebole@debian.org> Thu, 12 Feb 2015 09:26:56 +0100
+
+python-astropy (1.0~rc1-3) experimental; urgency=low
+
+ * Fix last FTBS on Hurd
+
+ -- Ole Streicher <olebole@debian.org> Thu, 05 Feb 2015 21:41:57 +0100
+
+python-astropy (1.0~rc1-2) experimental; urgency=low
+
+ * Fix FTBS on several platforms
+ * Disable failing tests (temporartily)
+
+ -- Ole Streicher <olebole@debian.org> Sun, 01 Feb 2015 11:13:52 +0100
+
+python-astropy (1.0~rc1-1) experimental; urgency=low
+
+ * New upstream release candidate
+
+ -- Ole Streicher <olebole@debian.org> Wed, 28 Jan 2015 09:17:42 +0100
+
+python-astropy (0.4.2-2) unstable; urgency=medium
+
+ * Don't set defalt SSL protocol in vo/samp/client.py. Closes: #775780
+
+ -- Ole Streicher <olebole@debian.org> Mon, 19 Jan 2015 21:07:18 +0100
+
+python-astropy (0.4.2-1) unstable; urgency=low
+
+ * New upstream release.
+ * Build-depend on libcfitsio-dev instead of libcfitsio3-dev. Closes: #761716
+ * Upgrade to Standards-Version 3.9.6 (no changes needed)
+
+ -- Ole Streicher <olebole@debian.org> Wed, 24 Sep 2014 14:49:35 +0200
+
+python-astropy (0.4.1+dfsg2-1) unstable; urgency=low
+
+ * Remove astropy-helper and use external dependency. Closes: #761055
+ * Support numpy 1.9. Closes: #761392
+ * Update uploaders email address
+
+ -- Ole Streicher <olebole@debian.org> Sun, 14 Sep 2014 13:50:29 +0200
+
+python-astropy (0.4.1+dfsg-1) unstable; urgency=low
+
+ * New upstream version
+ * Exclude precompiled files from source tarball
+
+ -- Ole Streicher <debian@liska.ath.cx> Sun, 10 Aug 2014 10:22:07 +0200
+
+python-astropy (0.4-4) unstable; urgency=low
+
+ * build-depend on wcslib >= 4.23. Closes: #755485
+
+ -- Ole Streicher <debian@liska.ath.cx> Tue, 22 Jul 2014 17:22:16 +0200
+
+python-astropy (0.4-3) unstable; urgency=low
+
+ * Revert build-depends-indep since it does not work yet.
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 18 Jul 2014 16:50:55 +0200
+
+python-astropy (0.4-2) unstable; urgency=low
+
+ * Fix locale on build
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 18 Jul 2014 09:16:16 +0200
+
+python-astropy (0.4-1) unstable; urgency=low
+
+ * New upstream version
+
+ -- Ole Streicher <debian@liska.ath.cx> Wed, 16 Jul 2014 20:21:39 +0200
+
+python-astropy (0.4~rc2-3) experimental; urgency=low
+
+ * Convert from python-support to dh_python
+
+ -- Ole Streicher <debian@liska.ath.cx> Mon, 14 Jul 2014 09:46:47 +0200
+
+python-astropy (0.4~rc2-2) experimental; urgency=low
+
+ * Fix FTBS on powerpc, s390
+
+ -- Ole Streicher <debian@liska.ath.cx> Sun, 13 Jul 2014 18:56:28 +0200
+
+python-astropy (0.4~rc2-1) experimental; urgency=low
+
+ * New upstream prerelease
+
+ -- Ole Streicher <debian@liska.ath.cx> Sat, 12 Jul 2014 18:51:26 +0200
+
+python-astropy (0.4~rc1-2) experimental; urgency=low
+
+ * Fix FTBS on powerpc and s390x
+
+ -- Ole Streicher <debian@liska.ath.cx> Wed, 09 Jul 2014 13:16:06 +0200
+
+python-astropy (0.4~rc1-1) experimental; urgency=low
+
+ * New upstream prerelease
+ * Adjust watch file for prerelease
+
+ -- Ole Streicher <debian@liska.ath.cx> Mon, 07 Jul 2014 16:07:05 +0200
+
+python-astropy (0.3.2-3) unstable; urgency=low
+
+ * Fix checksum calculation and test on 32-bit
+
+ -- Ole Streicher <debian@liska.ath.cx> Sat, 17 May 2014 17:05:58 +0200
+
+python-astropy (0.3.2-2) unstable; urgency=low
+
+ * Mark known failures as xfail.
+ * Change maintainer and VCS location to debian-astro
+
+ -- Ole Streicher <debian@liska.ath.cx> Wed, 14 May 2014 14:47:35 +0200
+
+python-astropy (0.3.2-1) unstable; urgency=low
+
+ * New upstream version. Closes: #743554
+ * Don't repack since all sources are included now
+
+ -- Ole Streicher <debian@liska.ath.cx> Wed, 14 May 2014 09:21:18 +0200
+
+python-astropy (0.3.1+dfsg-1) unstable; urgency=low
+
+ * New upstream version
+
+ -- Ole Streicher <debian@liska.ath.cx> Thu, 06 Mar 2014 11:40:55 +0100
+
+python-astropy (0.3+dfsg-3) unstable; urgency=low
+
+ * Re-integrate 0.3-6 fixes which were left out by another mistake :-)
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 24 Jan 2014 11:31:26 +0100
+
+python-astropy (0.3+dfsg-2) unstable; urgency=low
+
+ * Re-integrate 0.3-5 fixes which were left out by mistake
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 24 Jan 2014 11:11:46 +0100
+
+python-astropy (0.3+dfsg-1) unstable; urgency=low
+
+ * Remove sourceless files jqery*.js. Closes: #735770
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 24 Jan 2014 09:43:27 +0100
+
+python-astropy (0.3-6) unstable; urgency=low
+
+ * Fix another FTBS causes on python-3.4.
+
+ -- Ole Streicher <debian@liska.ath.cx> Thu, 16 Jan 2014 16:27:55 +0100
+
+python-astropy (0.3-5) unstable; urgency=low
+
+ * Include upstream fixes to build on python-3.4. Closes: #734293
+ * Upgrade to Standards-Version 3.9.5 (no changes needed)
+
+ -- Ole Streicher <debian@liska.ath.cx> Wed, 15 Jan 2014 09:57:05 +0100
+
+python-astropy (0.3-4) unstable; urgency=low
+
+ * Mark known s390 failures as xfail.
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 20 Dec 2013 10:43:16 +0100
+
+python-astropy (0.3-3) unstable; urgency=low
+
+ * Fix vo_test.py for big endian.
+
+ -- Ole Streicher <debian@liska.ath.cx> Tue, 10 Dec 2013 11:23:38 +0100
+
+python-astropy (0.3-2) unstable; urgency=low
+
+ * Fix doctest and mark other known test failures on big endian until
+ they get fixed upstream.
+
+ -- Ole Streicher <debian@liska.ath.cx> Mon, 09 Dec 2013 14:23:04 +0100
+
+python-astropy (0.3-1) unstable; urgency=low
+
+ * New upstream version.
+ * Remove legacy packages that are no longer supported upstream.
+
+ -- Ole Streicher <debian@liska.ath.cx> Sat, 30 Nov 2013 12:56:34 +0100
+
+python-astropy (0.2.5-1) unstable; urgency=low
+
+ * New upstream version.
+
+ -- Ole Streicher <debian@liska.ath.cx> Sun, 27 Oct 2013 18:29:01 +0100
+
+python-astropy (0.2.4-3) unstable; urgency=low
+
+ * Fix "Conflicts" of python3-astropy-legacy. Closes: #719770
+
+ -- Ole Streicher <debian@liska.ath.cx> Thu, 15 Aug 2013 14:33:37 +0200
+
+python-astropy (0.2.4-2) unstable; urgency=low
+
+ * Enable python3 packages
+
+ -- Ole Streicher <debian@liska.ath.cx> Mon, 05 Aug 2013 21:04:23 +0200
+
+python-astropy (0.2.4-1) unstable; urgency=low
+
+ * New upstream version.
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 26 Jul 2013 17:41:26 +0200
+
+python-astropy (0.2.3-2~1) experimental; urgency=low
+
+ * Fix FTBS on MIPS and MIPSEL
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 21 Jun 2013 16:31:15 +0200
+
+python-astropy (0.2.3-1) unstable; urgency=low
+
+ * New upstream version; incorporates all previous patches
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 07 Jun 2013 14:40:05 +0200
+
+python-astropy (0.2.1-1) unstable; urgency=low
+
+ * Fix FTBS (unit test failure) on HURD
+ * Change distribution to unstable
+
+ -- Ole Streicher <debian@liska.ath.cx> Tue, 30 Apr 2013 10:36:01 +0200
+
+python-astropy (0.2.1-1~exp6) experimental; urgency=low
+
+ * Fix FTBS (unit test failure) on MIPS
+
+ -- Ole Streicher <debian@liska.ath.cx> Fri, 26 Apr 2013 09:57:59 +0200
+
+python-astropy (0.2.1-1~exp5) experimental; urgency=low
+
+ * Fix FTBS (unit test failure) on bigendian machines
+
+ -- Ole Streicher <debian@liska.ath.cx> Mon, 22 Apr 2013 19:37:00 +0200
+
+python-astropy (0.2.1-1~exp4) experimental; urgency=low
+
+ * Fix FTBS (unit test failure) on Hurd
+
+ -- Ole Streicher <debian@liska.ath.cx> Sun, 14 Apr 2013 18:39:00 +0200
+
+python-astropy (0.2.1-1~exp3) experimental; urgency=low
+
+ * Suggest optional packages
+
+ -- Ole Streicher <debian@liska.ath.cx> Sun, 14 Apr 2013 12:17:00 +0200
+
+python-astropy (0.2.1-1~exp2) experimental; urgency=low
+
+ * increase test verbosity to catch bigendian FTBS
+
+ -- Ole Streicher <debian@liska.ath.cx> Wed, 10 Apr 2013 16:21:00 +0200
+
+python-astropy (0.2.1-1~exp1) experimental; urgency=low
+
+ * New upstream release
+ * Infrastructure to build python3 packages (but py3 still disabled)
+ * Fix FTBS: set a writeable HOME + MPLCONFIGDIR
+
+ -- Ole Streicher <debian@liska.ath.cx> Thu, 10 Apr 2013 09:10:00 +0200
+
+python-astropy (0.2~b2-1) experimental; urgency=low
+
+ * Initial release. (Closes: #678168)
+
+ -- Ole Streicher <debian@liska.ath.cx> Wed, 30 Jan 2013 10:00:00 +0100
--- /dev/null
+astropy/astropy.cfg
+astropy/convolution/boundary_extend.c
+astropy/convolution/boundary_fill.c
+astropy/convolution/boundary_none.c
+astropy/convolution/boundary_wrap.c
+astropy/cython_version.py
+astropy/io/ascii/cparser.c
+astropy/modeling/src/wcsconfig.h
+astropy/table/_np_utils.c
+astropy/time/erfa_time.c
+astropy/version.py
+astropy/wcs/include/astropy_wcs/wcsconfig.h
+astropy/wcs/include/docstrings.h
+astropy/wcs/include/wcsconfig.h
+astropy/wcs/src/docstrings.c
+astropy/extern/configobj/*
+astropy/extern/ply/*
+astropy/extern/six/*
+astropy/extern/js/*
+astropy/extern/css/*
+astropy/extern/pytest.py
+docs/api/*
--- /dev/null
+Source: python-astropy
+Maintainer: Debian Astronomy Maintainers <debian-astro-maintainers@lists.alioth.debian.org>
+Uploaders: Ole Streicher <olebole@debian.org>
+Section: python
+Priority: optional
+Build-Depends: cython,
+ debhelper (>= 9),
+ dh-python,
+ graphviz,
+ libcfitsio-dev | libcfitsio3-dev,
+ liberfa-dev (>= 1.1.0),
+ libexpat1-dev,
+ libjs-jquery,
+ libjs-jquery-datatables,
+ pkg-config,
+ python-all-dev (>= 2.6.6-3~),
+ python-astropy-helpers (>= 1.1~),
+ python-configobj,
+ python-matplotlib,
+ python-nose,
+ python-numpy (>= 1.4),
+ python-ply,
+ python-pytest,
+ python-scipy,
+ python-setuptools (>= 0.6.4),
+ python-six (>= 1.10.0),
+ python-sphinx (>= 1.0.7+dfsg),
+ python-yaml,
+ python3-all-dev,
+ python3-astropy-helpers (>= 1.1~),
+ python3-configobj,
+ python3-matplotlib,
+ python3-nose,
+ python3-numpy (>= 1:1.6.2),
+ python3-ply,
+ python3-pytest,
+ python3-scipy,
+ python3-setuptools (>= 0.6.4),
+ python3-six (>= 1.10.0),
+ python3-yaml,
+ wcslib-dev (>= 5.8),
+ zlib1g-dev
+Standards-Version: 3.9.8
+Vcs-Browser: https://anonscm.debian.org/cgit/debian-astro/packages/python-astropy.git
+Vcs-Git: https://anonscm.debian.org/git/debian-astro/packages/python-astropy.git
+Homepage: http://astropy.org
+X-Python-Version: >= 2.6
+X-Python3-Version: >= 3.2
+
+Package: python-astropy
+Architecture: any
+Depends: python-configobj,
+ python-ply,
+ python-pytest,
+ python-six (>= 1.10.0),
+ ${misc:Depends},
+ ${python:Depends},
+ ${shlibs:Depends}
+Suggests: libxml2-utils,
+ python-astropy-affiliated,
+ python-astropy-doc,
+ python-beautifulsoup,
+ python-h5py,
+ python-matplotlib,
+ python-pandas,
+ python-scipy,
+ python-tz,
+ python-yaml
+Recommends: libjs-jquery,
+ libjs-jquery-datatables
+Description: Core functionality for performing astrophysics with Python
+ The astropy package contains core functionality and some common tools
+ needed for performing astronomy and astrophysics research with Python.
+ It can be extended by a number of "affiliated packages" that are
+ intended to work with the core package.
+
+Package: python3-astropy
+Architecture: any
+Depends: python3-configobj,
+ python3-ply,
+ python3-pytest,
+ python3-six (>= 1.10.0),
+ ${misc:Depends},
+ ${python3:Depends},
+ ${shlibs:Depends}
+Suggests: libxml2-utils,
+ python-astropy-doc,
+ python3-astropy-affiliated,
+ python3-beautifulsoup,
+ python3-h5py,
+ python3-matplotlib,
+ python3-pandas,
+ python3-scipy,
+ python3-tz,
+ python3-yaml
+Recommends: libjs-jquery,
+ libjs-jquery-datatables
+Description: Core functionality for performing astrophysics with Python3
+ The astropy package contains core functionality and some common tools
+ needed for performing astronomy and astrophysics research with Python3.
+ It can be extended by a number of "affiliated packages" that are
+ intended to work with the core package.
+
+Package: python-astropy-doc
+Architecture: all
+Multi-Arch: foreign
+Section: doc
+Depends: ${misc:Depends},
+ ${sphinxdoc:Depends}
+Description: Core functionality for performing astrophysics with Python (doc)
+ The astropy package contains core functionality and some common tools
+ needed for performing astronomy and astrophysics research with Python.
+ It can be extended by a number of "affiliated packages" that are
+ intended to work with the core package.
+ .
+ This package contains the package documentation.
+
+Package: astropy-utils
+Architecture: all
+Section: science
+Depends: python3-astropy (<< ${source:Version}.1~),
+ python3-astropy (>= ${source:Version}),
+ python3-pkg-resources,
+ ${misc:Depends},
+ ${python3:Depends}
+Breaks: fitscheck (<< 1:3.1.2-1~),
+ pyfits-utils (<<1:3.3-4~),
+ python-pyfits (<< 1:3.0.7-4~)
+Replaces: fitscheck (<< 1:3.1.2-1~),
+ pyfits-utils (<<1:3.3-4~),
+ python-pyfits (<< 1:3.0.7-4~)
+Description: Command line tools from astropy
+ The astropy package contains core functionality and some common tools
+ needed for performing astronomy and astrophysics research with Python.
+ .
+ This package contains the tools that come with astropy:
+ .
+ * fitscheck: Detect and fix FITS standards violations
+ * fits2bitmap: Create a bitmap file from a FITS image.
+ * fitsdiff: Compare two FITS image files and report the differences in
+ header keywords and data.
+ * fitsheader: Print the header(s) of one or more FITS file(s) to the
+ standard output in a human-readable format.
+ * samp_hub: SAMP Hub Server.
+ * volint: Check a VOTable file for compliance to the VOTable specification
+ * wcslint: Check the WCS keywords in a FITS file for compliance against
+ the standards
--- /dev/null
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: astropy
+Upstream-Author: The Astropy Developers
+Source: http://www.astropy.org/
+
+Files: * astropy/io/fits/*
+ astropy_helpers/astropy_helpers/sphinx/ext/compiler_unparse.py
+ astropy_helpers/astropy_helpers/sphinx/ext/comment_eater.py
+ astropy_helpers/astropy_helpers/sphinx/ext/traitsdoc.py
+ astropy/extern/configobj/*
+ astropy/extern/js/jquery.dataTables.js
+Copyright: Copyright (c) 2011, Astropy Developers,
+ 2004-2005 Association of Universities for Research in Astronomy,
+ 2006 Enthought, Inc.,
+ 2010-2011 Smithsonian Astrophysical Observatory,
+ 2003-2010 Michael Foord, Mark Andrews, Nicola Larosa,
+ 1995-2010 Jean-loup Gailly and Mark Adler,
+ 2001-2011 David M. Beazley (Dabeaz LLC)
+ 2008-2013 Allan Jardine
+License: BSD-3-Clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ .
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ .
+ 3. Neither the name of AURA and its representatives nor the names
+ of the Smithsonian Astrophysical Observatory, Enthought Inc., Michael Foord,
+ the name of Voidspace, the names of its contributors, David Beazley, or
+ Dabeaz LLC, Allan Jardine nor SpryMedia, may not be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY ITS AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
+
+Files: cextern/expat/*
+Copyright: 2001-2007 Expat maintainers,
+ 1998-2003 Thai Open Source Software Center Ltd and Clark Cooper
+ 2014 jQuery Foundation and other contributors
+License: Expat
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, includingwithout limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+
+Files: astropy_helpers/astropy_helpers/sphinx/ext/numpydoc.py
+ astropy_helpers/astropy_helpers/sphinx/ext/docscrape.py
+ astropy_helpers/astropy_helpers/sphinx/ext/docscrape_sphinx.py
+ astropy_helpers/astropy_helpers/sphinx/ext/phantom_import.py
+ debian/*
+Copyright: Copyright (C) 2008 Stefan van der Walt <stefan@mentat.za.net>,
+ Pauli Virtanen <pav@iki.fi>,
+ 2012-2015 Ole Streicher <olebole@debian.org>
+License: BSD-2-Clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Files: cextern/wcslib/*
+Copyright: Copyright (C) 1995-2012, Mark Calabretta
+License: LGPL-3
+ WCSLIB is free software: you can redistribute it and/or modify it under the
+ terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+ .
+ WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+ more details.
+ .
+ On Debian systems, the full text of the GNU Lesser General Public
+ License version 3 can be found in the file
+ `/usr/share/common-licenses/LGPL-3'.
+ .
+ Correspondence concerning WCSLIB may be directed to:
+ Internet email: mcalabre@atnf.csiro.au
+ Postal address: Dr. Mark Calabretta
+ Australia Telescope National Facility, CSIRO
+ PO Box 76
+ Epping NSW 1710
+ AUSTRALIA
+Comment: Note that these files are not used in the package build process, so
+ the copyright information is included here only as a reference.
--- /dev/null
+.TH FITS2BITMAP 1 "April 2015" "fits2bitmap" "astropy 1.0.2"
+.SH NAME
+fits2bitmap \- Create a bitmap file from a FITS image.
+.SH DESCRIPTION
+usage: fits2bitmap [\-h] [\-e hdu] [\-o filename] [\-\-scale SCALE] [\-\-power POWER]
+.IP
+[\-\-asinh_a ASINH_A] [\-\-min_cut MIN_CUT] [\-\-max_cut MAX_CUT]
+[\-\-min_percent MIN_PERCENT] [\-\-max_percent MAX_PERCENT]
+[\-\-percent PERCENT] [\-\-cmap colormap_name]
+filename [filename ...]
+.SS "positional arguments:"
+.TP
+filename
+Path to one or more FITS files to convert
+.SS "optional arguments:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+show this help message and exit
+.TP
+\fB\-e\fR hdu, \fB\-\-ext\fR hdu
+specify the HDU extension number or name
+.TP
+\fB\-o\fR filename
+Filename for the output image (Default is a PNG file
+with the same name as the FITS file)
+.TP
+\fB\-\-scale\fR SCALE
+Type of image scaling ("linear", "sqrt", "power",
+"log", or "asinh")
+.TP
+\fB\-\-power\fR POWER
+Power index for "power" scaling
+.TP
+\fB\-\-asinh_a\fR ASINH_A
+The value in normalized image where the asinh curve
+transitions from linear to logarithmic behavior (used
+only for "asinh" scaling)
+.TP
+\fB\-\-min_cut\fR MIN_CUT
+The pixel value of the minimum cut level
+.TP
+\fB\-\-max_cut\fR MAX_CUT
+The pixel value of the maximum cut level
+.TP
+\fB\-\-min_percent\fR MIN_PERCENT
+The percentile value used to determine the minimum cut
+level
+.TP
+\fB\-\-max_percent\fR MAX_PERCENT
+The percentile value used to determine the maximum cut
+level
+.TP
+\fB\-\-percent\fR PERCENT
+The percentage of the image values used to determine
+the pixel values of the minimum and maximum cut levels
+.TP
+\fB\-\-cmap\fR colormap_name
+matplotlib color map name
--- /dev/null
+.TH fitscheck 1 "April 2015" "fitscheck" "astropy 1.0.2"
+.SH NAME
+fitscheck \- script to detect and fix FITS standards violations
+.SH SYNOPSIS
+.B fitscheck
+[\fIOPTION\fR]... [\fIFILE\fR]...
+.SH DESCRIPTION
+.PP
+\fBfitscheck\fR is a command line script based on pyfits for verifying
+and updating the CHECKSUM and DATASUM keywords of FITS files.
+\fBitscheck\fR can also detect and often fix other FITS standards
+violations. \fBfitscheck\fR facilitates re\-writing the non-standard
+checksums originally generated by pyfits with standard checksums which
+will interoperate with cfitsio.
+.PP
+\fBfitscheck\fR will refuse to write new checksums if the checksum keywords
+are missing or their values are bad. Use \fB\-\-force\fR to write new
+checksums regardless of whether or not they currently exist or pass.
+Use \fB\-\-ignore-missing\fR to tolerate missing checksum keywords without
+comment.
+.SH OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Display terse usage information (help).
+.TP
+\fB\-k\fR [\fIstandard\fR | \fInonstandard\fR | \fIeither\fR | \fInone\fR], \fB\-\-checksum\fR=[\fIstandard\fR | \fInonstandard\fR | \fIeither\fR | \fInone\fR]
+Choose FITS checksum mode or none. Defaults to standard.
+.TP
+\fB\-w\fR, \fB\-\-write\fR
+Write out file checksums and/or FITS compliance fixes.
+.TP
+\fB\-f\fR, \fB\-\-force\fR
+Do file update even if original checksum was bad.
+.TP
+\fB\-c\fR, \fB\-\-compliance\fR
+Do FITS compliance checking, fix if possible.
+.TP
+\fB\-i\fR, \fB\-\-ignore\-missing\fR
+Ignore missing checksums.
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Generate extra output.
+.SH "EXAMPLES"
+.B "% fitscheck --checksum either --write *.fits"
+.br
+Verify and update checksums, tolerating non-standard checksums, updating to standard checksum.
+
+.B "% fitscheck --write --force *.fits"
+.br
+Write new checksums, even if existing checksums are bad or missing.
+
+.B "% fitscheck --compliance *.fits"
+.br
+Verify standard checksums and FITS compliance without changing the files.
+
+.B "% fitscheck --checksum nonstandard *.fits"
+.br
+Verify original nonstandard checksums only.
+
+.B "% fitscheck --checksum none --compliance --write *.fits"
+.br
+Only check and fix compliance problems, ignoring checksums.
+
+.B "% fitscheck *.fits"
+.br
+Verify standard interoperable checksums.
+
+.B "% fitscheck --checksum none --write *.fits"
+.br
+Delete checksum keywords.
+
--- /dev/null
+.TH fitsdiff 1 "April 2015" "fitsdiff" "astropy 1.0.2"
+.SH NAME
+fitsdiff \- compare two FITS image files and report the differences in header keywords and data.
+.SH SYNOPSIS
+.B fitsdiff
+[\fIOPTION\fR]... \fIFILE1\fR \fIFILE2\fR
+.SH DESCRIPTION
+.PP
+\fBfitsdiff\fR is a command line script based on pyfits to compare two
+FITS image files and report the differences in header keywords and data.
+.PP
+\fIFILE1\fR and \fIFILE2\fR are the two files to be compared. They may also be
+wild cards, in such cases, they must be enclosed by double or single quotes, or
+they may be directory names. If both are directory names, all files in each of
+the directories will be included; if only one is directory name, then the
+directory name will be prefixed to the file name(s) specified by the other
+argument. For example:
+.TP
+.B "% fitsdiff ""*.fits"" ""/machine/data1""
+.PP
+will compare all FITS files in the current directory to the corresponding files
+in the directory \fI/machine/data1\fR.
+.PP
+If the two files are identical within the specified conditions, it will report
+"No difference is found." If the value(s) of \fI-c\fR and \fI-k\fR takes the form
+\fI\@filename\fR, list is in the text file \fIfilename\fR, and each line in that text
+file contains one keyword.
+.PP
+\fBfitsdiff\fR commandline arguments can also be set using the environment variable
+\fIFITSDIFF_SETTINGS\fR. If the \fIFITSDIFF_SETTINGS\fR environment variable is present,
+each argument present will override the corresponding argument on the
+commandline. This environment variable exists to make it easier to change the
+behavior of \fBfitsdiff\fR on a global level, such as in a set of regression tests.
+.SH GENERIC OPTIONS
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Display terse usage information (help).
+.TP
+\fB\-q\fR, \fB\-\-quiet\fR
+Produce no output and just return a status code.
+.TP
+\fB\-n\fR \fIINTEGER\fR, \fB\-\-num\-diffs\fR=\fIINTEGER\fR
+Max number of data differences (image pixel or table element) to report per extension (default 10).
+.TP
+\fB\-d\fR \fINUMBER\fR, \fB\-\-difference-tolerance\fR=\fINUMBER\fR
+The relative tolerance for comparison of two numbers,
+specifically two floating point numbers. This applies
+to data in both images and tables, and to floating
+point keyword values in headers (default 0.0).
+.TP
+\fB\-b\fR, \fB\-\-no\-ignore\-blanks\fR
+Don't ignore trailing blanks (whitespace) in string
+values. Otherwise trailing blanks both in header
+keywords/values and in table column values) are not
+treated as significant i.e. without this option 'ABC ' and 'ABC' are considered equivalent.
+.TP
+\fB\-\-no\-ignore\-blank\-cards\fR
+Don't ignore entirely blank cards in headers. Normally \fIfitsdiff\fR does not
+consider blank cards when comparing headers, but this will ensure that even blank
+cards match up.
+.TP
+\fB\-o\fR \fIFILE\fR, \fB\-\-output\-file\fR=\fIFILE\fR
+Output results to this file; otherwise results are printed to stdout.
+.SH "HEADER COMPARISON OPTIONS"
+.TP
+\fB\-k\fR \fIKEYWORDS\fR, \fB\-\-ignore\-keywords\fR=\fIKEYWORDS\fR
+Comma-separated list of keywords not to be compared.
+Keywords may contain wildcard patterns. To exclude
+all keywords, use "*"; make sure to have double or
+single quotes around the asterisk.
+.TP
+\fB\-c\fR \fIKEYWORDS\fR, \fB\-\-ignore\-comments\fR=\fIKEYWORDS\fR
+Comma-separated list of keywords whose comments will not be compared.
+Wildcards may be used as with \fI\-\-ignore-keywords\fR.
+.SH "TABLE COMPARISON OPTIONS"
+.TP
+\fB\-f\fR \fICOLUMNS\fR, \fB\-\-ignore\-fields\fR=\fICOLUMNS\fR
+Comma-separated list of fields (i.e. columns) not to be compared.
+All columns may be excluded using "*" as with \fI\-\-ignore-keywords\fR.
+.SH "EXAMPLES"
+.B "% fitsdiff -k filename,filtnam1 -n 5 -d 1.e-6 test1.fits test2"
+.br
+This command will compare files \fItest1.fits\fR and \fItest2.fits\fR, report maximum of 5
+different pixels values per extension, only report data values larger than
+1.e-6 relative to each other, and will neglect the different values of
+keywords \fIFILENAME\fR and \fIFILTNAM1\fR (or their very existence).
+
--- /dev/null
+.TH FITSHEADER 1 "April 2015" "fitsheader" "astropy 1.0.2"
+.SH NAME
+fitsheader \- Print the header(s) of a FITS file.
+.SH DESCRIPTION
+usage: fitsheader [\-h] [\-e HDU] [\-k KEYWORD] [\-t [FORMAT]] [\-c]
+.IP
+filename [filename ...]
+.PP
+Print the header(s) of a FITS file. Optional arguments allow the desired
+extension(s), keyword(s), and output format to be specified. Note that in the
+case of a compressed image, the decompressed header is shown by default.
+.SS "positional arguments:"
+.TP
+filename
+path to one or more files; wildcards are supported
+.SS "optional arguments:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+show this help message and exit
+.TP
+\fB\-e\fR HDU, \fB\-\-extension\fR HDU
+specify the extension by name or number; this argument
+can be repeated to select multiple extensions
+.TP
+\fB\-k\fR KEYWORD, \fB\-\-keyword\fR KEYWORD
+specify a keyword; this argument can be repeated to
+select multiple keywords; also supports wildcards
+.TP
+\fB\-t\fR [FORMAT], \fB\-\-table\fR [FORMAT]
+print the header(s) in machine\-readable table format;
+the default format is "ascii.fixed_width" (can be
+"ascii.csv", "ascii.html", "ascii.latex", "fits", etc)
+.TP
+\fB\-c\fR, \fB\-\-compressed\fR
+for compressed image data, show the true header which
+describes the compression rather than the data
--- /dev/null
+.TH fitsinfo 1 "April 2015" "fitsdiff" "astropy 1.1"
+.SH NAME
+fitsinfo \- Print a summary of the HDUs in one or more FITS files(s)
+.SH SYNOPSIS
+.B fitsinfo
+\fIfilename\fR [\fIfilename\fR ...]
+.SH DESCRIPTION
+.PP
+\fBfitsinfo\fR is a command-line script based on astropy.io.fits for
+printing a summary of the HDUs in one or more FITS files(s) to the
+standard output.
+.SH EXAMPLES
+.PP
+Example usage of \fBfitsinfo\fR:
+.PP
+1. Print a summary of the HDUs in a FITS file:
+.PP
+ $ fitsinfo filename.fits
+
+ Filename: filename.fits
+ No. Name Type Cards Dimensions Format
+ 0 PRIMARY PrimaryHDU 138 ()
+ 1 SCI ImageHDU 61 (800, 800) int16
+ 2 SCI ImageHDU 61 (800, 800) int16
+ 3 SCI ImageHDU 61 (800, 800) int16
+ 4 SCI ImageHDU 61 (800, 800) int16
+.PP
+2. Print a summary of HDUs of all the FITS files in the current directory:
+.PP
+ $ fitsinfo *.fits
+.
--- /dev/null
+From: Marten van Kerkwijk <mhvk@astro.utoronto.ca>
+Date: Wed, 11 Jan 2017 21:59:16 -0500
+Subject: Allow pytest 3.x to use plugin for doctests in .rst files.
+
+Pull request: https://github.com/astropy/astropy/pull/5688
+---
+ astropy/tests/pytest_plugins.py | 17 ++++-------------
+ astropy/tests/tests/test_runner.py | 16 +++++++++-------
+ setup.cfg | 2 +-
+ 3 files changed, 14 insertions(+), 21 deletions(-)
+
+diff --git a/astropy/tests/pytest_plugins.py b/astropy/tests/pytest_plugins.py
+index 27b683d..64f7b74 100644
+--- a/astropy/tests/pytest_plugins.py
++++ b/astropy/tests/pytest_plugins.py
+@@ -180,7 +180,8 @@ def pytest_configure(config):
+
+ # uses internal doctest module parsing mechanism
+ finder = DocTestFinderPlus()
+- runner = doctest.DebugRunner(verbose=False, optionflags=opts)
++ runner = doctest.DebugRunner(verbose=False, optionflags=opts,
++ checker=AstropyOutputChecker())
+ for test in finder.find(module):
+ if test.examples: # skip empty doctests
+ if config.getvalue("remote_data") != 'any':
+@@ -191,21 +192,11 @@ def pytest_configure(config):
+ yield doctest_plugin.DoctestItem(
+ test.name, self, runner, test)
+
+- # This is for py.test prior to 2.4.0
+- def runtest(self):
+- return
+-
+- class DocTestTextfilePlus(doctest_plugin.DoctestTextfile):
++ class DocTestTextfilePlus(doctest_plugin.DoctestItem, pytest.Module):
+ def runtest(self):
+ # satisfy `FixtureRequest` constructor...
+ self.funcargs = {}
+- try:
+- self._fixtureinfo = doctest_plugin.FuncFixtureInfo((), [], {})
+- fixture_request = doctest_plugin.FixtureRequest(self)
+- except AttributeError: # pytest >= 2.8.0
+- python_plugin = config.pluginmanager.getplugin('python')
+- self._fixtureinfo = python_plugin.FuncFixtureInfo((), [], {})
+- fixture_request = python_plugin.FixtureRequest(self)
++ fixture_request = doctest_plugin._setup_fixtures(self)
+
+ failed, tot = doctest.testfile(
+ str(self.fspath), module_relative=False,
+diff --git a/astropy/tests/tests/test_runner.py b/astropy/tests/tests/test_runner.py
+index a147cd9..0642c7f 100644
+--- a/astropy/tests/tests/test_runner.py
++++ b/astropy/tests/tests/test_runner.py
+@@ -1,9 +1,11 @@
+-from astropy.tests.runner import TestRunner, TestRunnerBase, keyword
++from astropy.tests.runner import TestRunner as T_Runner
++from astropy.tests.runner import TestRunnerBase as T_RunnerBase
++from astropy.tests.runner import keyword
+ from astropy.tests.helper import pytest
+
+
+ def test_disable_kwarg():
+- class no_remote_data(TestRunner):
++ class no_remote_data(T_Runner):
+ @keyword()
+ def remote_data(self, remote_data, kwargs):
+ return NotImplemented
+@@ -14,13 +16,13 @@ def test_disable_kwarg():
+
+
+ def test_wrong_kwarg():
+- r = TestRunner('.')
++ r = T_Runner('.')
+ with pytest.raises(TypeError):
+ r.run_tests(spam='eggs')
+
+
+ def test_invalid_kwarg():
+- class bad_return(TestRunnerBase):
++ class bad_return(T_RunnerBase):
+ @keyword()
+ def remote_data(self, remote_data, kwargs):
+ return 'bob'
+@@ -31,7 +33,7 @@ def test_invalid_kwarg():
+
+
+ def test_new_kwarg():
+- class Spam(TestRunnerBase):
++ class Spam(T_RunnerBase):
+ @keyword()
+ def spam(self, spam, kwargs):
+ return [spam]
+@@ -44,7 +46,7 @@ def test_new_kwarg():
+
+
+ def test_priority():
+- class Spam(TestRunnerBase):
++ class Spam(T_RunnerBase):
+ @keyword()
+ def spam(self, spam, kwargs):
+ return [spam]
+@@ -61,7 +63,7 @@ def test_priority():
+
+
+ def test_docs():
+- class Spam(TestRunnerBase):
++ class Spam(T_RunnerBase):
+ @keyword()
+ def spam(self, spam, kwargs):
+ """
+diff --git a/setup.cfg b/setup.cfg
+index 206e6f8..5b3e995 100644
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -12,7 +12,7 @@ all_files = 1
+ upload-dir = docs/_build/html
+ show-response = 1
+
+-[pytest]
++[tool:pytest]
+ minversion = 2.3.3
+ norecursedirs = ".tox" "build" "docs[\/]_build" "astropy[\/]extern" "astropy[\/]utils[\/]compat[\/]futures"
+ doctest_plus = enabled
--- /dev/null
+From: Marten van Kerkwijk <mhvk@astro.utoronto.ca>
+Date: Sat, 24 Dec 2016 17:06:08 -0500
+Subject: Ensure NUMPY_LT_1_12 works for beta prerelease.
+
+Pull request: https://github.com/astropy/astropy/pull/5646
+---
+ astropy/utils/compat/numpycompat.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/astropy/utils/compat/numpycompat.py b/astropy/utils/compat/numpycompat.py
+index fbdd029..bda721f 100644
+--- a/astropy/utils/compat/numpycompat.py
++++ b/astropy/utils/compat/numpycompat.py
+@@ -21,7 +21,7 @@ NUMPY_LT_1_9_1 = not minversion('numpy', '1.9.1')
+ NUMPY_LT_1_10 = not minversion('numpy', '1.10.0')
+ NUMPY_LT_1_10_4 = not minversion('numpy', '1.10.4')
+ NUMPY_LT_1_11 = not minversion('numpy', '1.11.0')
+-NUMPY_LT_1_12 = not minversion('numpy', '1.12dev')
++NUMPY_LT_1_12 = not minversion('numpy', '1.12')
+
+
+ def _monkeypatch_unicode_mask_fill_values():
--- /dev/null
+From: Thomas Robitaille <thomas.robitaille@gmail.com>
+Date: Thu, 12 Jan 2017 11:54:25 +0000
+Subject: Fix default value for remote_data option
+
+Pull request: https://github.com/astropy/astropy/pull/5689
+---
+ astropy/tests/runner.py | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/astropy/tests/runner.py b/astropy/tests/runner.py
+index cf11c2f..6f1e6b4 100644
+--- a/astropy/tests/runner.py
++++ b/astropy/tests/runner.py
+@@ -353,7 +353,7 @@ class TestRunner(TestRunnerBase):
+
+ return []
+
+- @keyword()
++ @keyword(default_value='none')
+ def remote_data(self, remote_data, kwargs):
+ """
+ remote_data : {'none', 'astropy', 'any'}, optional
+@@ -369,9 +369,10 @@ class TestRunner(TestRunnerBase):
+ remote_data = 'none'
+ elif remote_data not in ('none', 'astropy', 'any'):
+ warnings.warn("The remote_data option should be one of "
+- "none/astropy/any. For backward-compatibility, "
++ "none/astropy/any (found {0}). For backward-compatibility, "
+ "assuming 'any', but you should change the option to be "
+- "one of the supported ones to avoid issues in future.",
++ "one of the supported ones to avoid issues in "
++ "future.".format(remote_data),
+ AstropyDeprecationWarning)
+ remote_data = 'any'
+
--- /dev/null
+From: kelle <kellecruz@gmail.com>
+Date: Sat, 7 Jan 2017 17:45:29 -0500
+Subject: Use parametrize instead of yield.
+
+Pull request: https://github.com/astropy/astropy/pull/5678
+Pull request: https://github.com/astropy/astropy/pull/5682
+---
+ astropy/io/votable/tests/vo_test.py | 5 +-
+ astropy/units/tests/test_format.py | 466 ++++++++++++++++--------------------
+ astropy/wcs/tests/test_profiling.py | 99 +++-----
+ astropy/wcs/tests/test_wcs.py | 146 +++++------
+ 4 files changed, 298 insertions(+), 418 deletions(-)
+
+diff --git a/astropy/io/votable/tests/vo_test.py b/astropy/io/votable/tests/vo_test.py
+index 587fc59..31acb9c 100644
+--- a/astropy/io/votable/tests/vo_test.py
++++ b/astropy/io/votable/tests/vo_test.py
+@@ -737,13 +737,10 @@ def table_from_scratch():
+
+
+ def test_open_files():
+- def test_file(filename):
+- parse(filename, pedantic=False)
+-
+ for filename in get_pkg_data_filenames('data', pattern='*.xml'):
+ if filename.endswith('custom_datatype.xml'):
+ continue
+- yield test_file, filename
++ parse(filename, pedantic=False)
+
+
+ @raises(VOTableSpecError)
+diff --git a/astropy/units/tests/test_format.py b/astropy/units/tests/test_format.py
+index 9316a59..b5e9d12 100644
+--- a/astropy/units/tests/test_format.py
++++ b/astropy/units/tests/test_format.py
+@@ -13,7 +13,7 @@ from __future__ import (absolute_import, unicode_literals, division,
+ from ...extern import six
+
+ from numpy.testing.utils import assert_allclose
+-from ...tests.helper import raises, pytest, catch_warnings
++from ...tests.helper import pytest, catch_warnings
+
+ from ... import units as u
+ from ...constants import si
+@@ -22,246 +22,205 @@ from .. import format as u_format
+ from ..utils import is_effectively_unity
+
+
+-def test_unit_grammar():
+- def _test_unit_grammar(s, unit):
++@pytest.mark.parametrize('strings, unit', [
++ (["m s", "m*s", "m.s"], u.m * u.s),
++ (["m/s", "m*s**-1", "m /s", "m / s", "m/ s"], u.m / u.s),
++ (["m**2", "m2", "m**(2)", "m**+2", "m+2", "m^(+2)"], u.m ** 2),
++ (["m**-3", "m-3", "m^(-3)", "/m3"], u.m ** -3),
++ (["m**(1.5)", "m(3/2)", "m**(3/2)", "m^(3/2)"], u.m ** 1.5),
++ (["2.54 cm"], u.Unit(u.cm * 2.54)),
++ (["10+8m"], u.Unit(u.m * 1e8)),
++ # This is the VOUnits documentation, but doesn't seem to follow the
++ # unity grammar (["3.45 10**(-4)Jy"], 3.45 * 1e-4 * u.Jy)
++ (["sqrt(m)"], u.m ** 0.5),
++ (["dB(mW)", "dB (mW)"], u.DecibelUnit(u.mW)),
++ (["mag"], u.mag),
++ (["mag(ct/s)"], u.MagUnit(u.ct / u.s)),
++ (["dex"], u.dex),
++ (["dex(cm s**-2)", "dex(cm/s2)"], u.DexUnit(u.cm / u.s**2))])
++def test_unit_grammar(strings, unit):
++ for s in strings:
+ print(s)
+ unit2 = u_format.Generic.parse(s)
+ assert unit2 == unit
+
+- data = [
+- (["m s", "m*s", "m.s"], u.m * u.s),
+- (["m/s", "m*s**-1", "m /s", "m / s", "m/ s"], u.m / u.s),
+- (["m**2", "m2", "m**(2)", "m**+2", "m+2", "m^(+2)"], u.m ** 2),
+- (["m**-3", "m-3", "m^(-3)", "/m3"], u.m ** -3),
+- (["m**(1.5)", "m(3/2)", "m**(3/2)", "m^(3/2)"], u.m ** 1.5),
+- (["2.54 cm"], u.Unit(u.cm * 2.54)),
+- (["10+8m"], u.Unit(u.m * 1e8)),
+- # This is the VOUnits documentation, but doesn't seem to follow the
+- # unity grammar (["3.45 10**(-4)Jy"], 3.45 * 1e-4 * u.Jy)
+- (["sqrt(m)"], u.m ** 0.5),
+- (["dB(mW)", "dB (mW)"], u.DecibelUnit(u.mW)),
+- (["mag"], u.mag),
+- (["mag(ct/s)"], u.MagUnit(u.ct / u.s)),
+- (["dex"], u.dex),
+- (["dex(cm s**-2)", "dex(cm/s2)"], u.DexUnit(u.cm / u.s**2))
+- ]
+-
+- for strings, unit in data:
+- for s in strings:
+- yield _test_unit_grammar, s, unit
+-
+-
+-def test_unit_grammar_fail():
+- @raises(ValueError)
+- def _test_unit_grammar_fail(s):
+- u_format.Generic.parse(s)
+-
+- data = ['sin( /pixel /s)',
+- 'mag(mag)',
+- 'dB(dB(mW))',
+- 'dex()']
+-
+- for s in data:
+- yield _test_unit_grammar_fail, s
+-
+-
+-def test_cds_grammar():
+- def _test_cds_grammar(s, unit):
++
++@pytest.mark.parametrize('string', ['sin( /pixel /s)', 'mag(mag)',
++ 'dB(dB(mW))', 'dex()'])
++def test_unit_grammar_fail(string):
++ with pytest.raises(ValueError):
++ print(string)
++ u_format.Generic.parse(string)
++
++@pytest.mark.parametrize('strings, unit', [
++ (["0.1nm"], u.AA),
++ (["mW/m2"], u.Unit(u.erg / u.cm ** 2 / u.s)),
++ (["mW/(m2)"], u.Unit(u.erg / u.cm ** 2 / u.s)),
++ (["km/s", "km.s-1"], u.km / u.s),
++ (["10pix/nm"], u.Unit(10 * u.pix / u.nm)),
++ (["1.5x10+11m"], u.Unit(1.5e11 * u.m)),
++ (["1.5×10+11m"], u.Unit(1.5e11 * u.m)),
++ (["m2"], u.m ** 2),
++ (["10+21m"], u.Unit(u.m * 1e21)),
++ (["2.54cm"], u.Unit(u.cm * 2.54)),
++ (["20%"], 0.20 * u.dimensionless_unscaled),
++ (["10+9"], 1.e9 * u.dimensionless_unscaled),
++ (["2x10-9"], 2.e-9 * u.dimensionless_unscaled),
++ (["---"], u.dimensionless_unscaled),
++ (["ma"], u.ma),
++ (["mAU"], u.mAU),
++ (["uarcmin"], u.uarcmin),
++ (["uarcsec"], u.uarcsec),
++ (["kbarn"], u.kbarn),
++ (["Gbit"], u.Gbit),
++ (["Gibit"], 2 ** 30 * u.bit),
++ (["kbyte"], u.kbyte),
++ (["mRy"], 0.001 * u.Ry),
++ (["mmag"], u.mmag),
++ (["Mpc"], u.Mpc),
++ (["Gyr"], u.Gyr),
++ (["°"], u.degree),
++ (["°/s"], u.degree / u.s),
++ (["Ã…"], u.AA),
++ (["Ã…/s"], u.AA / u.s),
++ (["\\h"], si.h)])
++def test_cds_grammar(strings, unit):
++ for s in strings:
+ print(s)
+ unit2 = u_format.CDS.parse(s)
+ assert unit2 == unit
+
+- data = [
+- (["0.1nm"], u.AA),
+- (["mW/m2"], u.Unit(u.erg / u.cm ** 2 / u.s)),
+- (["mW/(m2)"], u.Unit(u.erg / u.cm ** 2 / u.s)),
+- (["km/s", "km.s-1"], u.km / u.s),
+- (["10pix/nm"], u.Unit(10 * u.pix / u.nm)),
+- (["1.5x10+11m"], u.Unit(1.5e11 * u.m)),
+- (["1.5×10+11m"], u.Unit(1.5e11 * u.m)),
+- (["m2"], u.m ** 2),
+- (["10+21m"], u.Unit(u.m * 1e21)),
+- (["2.54cm"], u.Unit(u.cm * 2.54)),
+- (["20%"], 0.20 * u.dimensionless_unscaled),
+- (["10+9"], 1.e9 * u.dimensionless_unscaled),
+- (["2x10-9"], 2.e-9 * u.dimensionless_unscaled),
+- (["---"], u.dimensionless_unscaled),
+- (["ma"], u.ma),
+- (["mAU"], u.mAU),
+- (["uarcmin"], u.uarcmin),
+- (["uarcsec"], u.uarcsec),
+- (["kbarn"], u.kbarn),
+- (["Gbit"], u.Gbit),
+- (["Gibit"], 2 ** 30 * u.bit),
+- (["kbyte"], u.kbyte),
+- (["mRy"], 0.001 * u.Ry),
+- (["mmag"], u.mmag),
+- (["Mpc"], u.Mpc),
+- (["Gyr"], u.Gyr),
+- (["°"], u.degree),
+- (["°/s"], u.degree / u.s),
+- (["Ã…"], u.AA),
+- (["Ã…/s"], u.AA / u.s),
+- (["\\h"], si.h)]
+-
+- for strings, unit in data:
+- for s in strings:
+- yield _test_cds_grammar, s, unit
+-
+-
+-def test_cds_grammar_fail():
+- @raises(ValueError)
+- def _test_cds_grammar_fail(s):
+- print(s)
+- u_format.CDS.parse(s)
+-
+- data = ['0.1 nm',
+- 'solMass(3/2)',
+- 'km / s',
+- 'km s-1',
+- 'pix0.1nm',
+- 'pix/(0.1nm)',
+- 'km*s',
+- 'km**2',
+- '5x8+3m',
+- '0.1---',
+- '---m',
+- 'm---',
+- 'mag(s-1)',
+- 'dB(mW)',
+- 'dex(cm s-2)']
+-
+- for s in data:
+- yield _test_cds_grammar_fail, s
+-
+-
+-def test_ogip_grammar():
+- def _test_ogip_grammar(s, unit):
++
++@pytest.mark.parametrize('string', [
++ '0.1 nm',
++ 'solMass(3/2)',
++ 'km / s',
++ 'km s-1',
++ 'pix0.1nm',
++ 'pix/(0.1nm)',
++ 'km*s',
++ 'km**2',
++ '5x8+3m',
++ '0.1---',
++ '---m',
++ 'm---',
++ 'mag(s-1)',
++ 'dB(mW)',
++ 'dex(cm s-2)'])
++def test_cds_grammar_fail(string):
++ with pytest.raises(ValueError):
++ print(string)
++ u_format.CDS.parse(string)
++
++
++# These examples are taken from the EXAMPLES section of
++# http://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/general/ogip_93_001/
++@pytest.mark.parametrize('strings, unit', [
++ (["count /s", "count/s", "count s**(-1)", "count / s", "count /s "],
++ u.count / u.s),
++ (["/pixel /s", "/(pixel * s)"], (u.pixel * u.s) ** -1),
++ (["count /m**2 /s /eV", "count m**(-2) * s**(-1) * eV**(-1)",
++ "count /(m**2 * s * eV)"],
++ u.count * u.m ** -2 * u.s ** -1 * u.eV ** -1),
++ (["erg /pixel /s /GHz", "erg /s /GHz /pixel", "erg /pixel /(s * GHz)"],
++ u.erg / (u.s * u.GHz * u.pixel)),
++ (["keV**2 /yr /angstrom", "10**(10) keV**2 /yr /m"],
++ # Though this is given as an example, it seems to violate the rules
++ # of not raising scales to powers, so I'm just excluding it
++ # "(10**2 MeV)**2 /yr /m"
++ u.keV**2 / (u.yr * u.angstrom)),
++ (["10**(46) erg /s", "10**46 erg /s", "10**(39) J /s", "10**(39) W",
++ "10**(15) YW", "YJ /fs"],
++ 10**46 * u.erg / u.s),
++ (["10**(-7) J /cm**2 /MeV", "10**(-9) J m**(-2) eV**(-1)",
++ "nJ m**(-2) eV**(-1)", "nJ /m**2 /eV"],
++ 10 ** -7 * u.J * u.cm ** -2 * u.MeV ** -1),
++ (["sqrt(erg /pixel /s /GHz)", "(erg /pixel /s /GHz)**(0.5)",
++ "(erg /pixel /s /GHz)**(1/2)",
++ "erg**(0.5) pixel**(-0.5) s**(-0.5) GHz**(-0.5)"],
++ (u.erg * u.pixel ** -1 * u.s ** -1 * u.GHz ** -1) ** 0.5),
++ (["(count /s) (/pixel /s)", "(count /s) * (/pixel /s)",
++ "count /pixel /s**2"],
++ (u.count / u.s) * (1.0 / (u.pixel * u.s)))])
++def test_ogip_grammar(strings, unit):
++ for s in strings:
+ print(s)
+ unit2 = u_format.OGIP.parse(s)
+ assert unit2 == unit
+
+- # These examples are taken from the EXAMPLES section of
+- # http://heasarc.gsfc.nasa.gov/docs/heasarc/ofwg/docs/general/ogip_93_001/
+- data = [
+- (["count /s", "count/s", "count s**(-1)", "count / s", "count /s "],
+- u.count / u.s),
+- (["/pixel /s", "/(pixel * s)"], (u.pixel * u.s) ** -1),
+- (["count /m**2 /s /eV", "count m**(-2) * s**(-1) * eV**(-1)",
+- "count /(m**2 * s * eV)"],
+- u.count * u.m ** -2 * u.s ** -1 * u.eV ** -1),
+- (["erg /pixel /s /GHz", "erg /s /GHz /pixel", "erg /pixel /(s * GHz)"],
+- u.erg / (u.s * u.GHz * u.pixel)),
+- (["keV**2 /yr /angstrom", "10**(10) keV**2 /yr /m",
+- # Though this is given as an example, it seems to violate the rules
+- # of not raising scales to powers, so I'm just excluding it
+- # "(10**2 MeV)**2 /yr /m"
+- ],
+- u.keV**2 / (u.yr * u.angstrom)),
+- (["10**(46) erg /s", "10**46 erg /s", "10**(39) J /s", "10**(39) W",
+- "10**(15) YW", "YJ /fs"],
+- 10**46 * u.erg / u.s),
+- (["10**(-7) J /cm**2 /MeV", "10**(-9) J m**(-2) eV**(-1)",
+- "nJ m**(-2) eV**(-1)", "nJ /m**2 /eV"],
+- 10 ** -7 * u.J * u.cm ** -2 * u.MeV ** -1),
+- (["sqrt(erg /pixel /s /GHz)", "(erg /pixel /s /GHz)**(0.5)",
+- "(erg /pixel /s /GHz)**(1/2)",
+- "erg**(0.5) pixel**(-0.5) s**(-0.5) GHz**(-0.5)"],
+- (u.erg * u.pixel ** -1 * u.s ** -1 * u.GHz ** -1) ** 0.5),
+- (["(count /s) (/pixel /s)", "(count /s) * (/pixel /s)",
+- "count /pixel /s**2"],
+- (u.count / u.s) * (1.0 / (u.pixel * u.s)))]
+-
+- for strings, unit in data:
+- for s in strings:
+- yield _test_ogip_grammar, s, unit
+-
+-
+-def test_ogip_grammar_fail():
+- @raises(ValueError)
+- def _test_ogip_grammar_fail(s):
+- u_format.OGIP.parse(s)
+-
+- data = ['log(photon /m**2 /s /Hz)',
+- 'sin( /pixel /s)',
+- 'log(photon /cm**2 /s /Hz) /(sin( /pixel /s))',
+- 'log(photon /cm**2 /s /Hz) (sin( /pixel /s))**(-1)',
+- 'dB(mW)', 'dex(cm/s**2)']
+-
+- for s in data:
+- yield _test_ogip_grammar_fail, s
+-
+-
+-def test_roundtrip():
+- def _test_roundtrip(unit):
+- a = core.Unit(unit.to_string('generic'), format='generic')
+- b = core.Unit(unit.decompose().to_string('generic'), format='generic')
+- assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
+- assert_allclose(b.decompose().scale, unit.decompose().scale, rtol=1e-2)
+-
+- for key, val in u.__dict__.items():
+- if isinstance(val, core.UnitBase) and not isinstance(val, core.PrefixUnit):
+- yield _test_roundtrip, val
+-
+-
+-def test_roundtrip_vo_unit():
+- def _test_roundtrip_vo_unit(unit, skip_decompose):
+- a = core.Unit(unit.to_string('vounit'), format='vounit')
+- assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
+- if skip_decompose:
+- return
+- u = unit.decompose().to_string('vounit')
+- assert ' ' not in u
+- b = core.Unit(u, format='vounit')
+- assert_allclose(b.decompose().scale, unit.decompose().scale, rtol=1e-2)
+-
+- x = u_format.VOUnit
+- for key, val in x._units.items():
+- if isinstance(val, core.UnitBase) and not isinstance(val, core.PrefixUnit):
+- yield _test_roundtrip_vo_unit, val, val in (u.mag, u.dB)
+-
+-
+-def test_roundtrip_fits():
+- def _test_roundtrip_fits(unit):
+- s = unit.to_string('fits')
+- a = core.Unit(s, format='fits')
+- assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
+-
+- for key, val in u_format.Fits._units.items():
+- if isinstance(val, core.UnitBase) and not isinstance(val, core.PrefixUnit):
+- yield _test_roundtrip_fits, val
+-
+
+-def test_roundtrip_cds():
+- def _test_roundtrip_cds(unit):
+- a = core.Unit(unit.to_string('cds'), format='cds')
+- assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
+- try:
+- b = core.Unit(unit.decompose().to_string('cds'), format='cds')
+- except ValueError: # skip mag: decomposes into dex, unknown to OGIP
+- return
++@pytest.mark.parametrize('string', [
++ 'log(photon /m**2 /s /Hz)',
++ 'sin( /pixel /s)',
++ 'log(photon /cm**2 /s /Hz) /(sin( /pixel /s))',
++ 'log(photon /cm**2 /s /Hz) (sin( /pixel /s))**(-1)',
++ 'dB(mW)', 'dex(cm/s**2)'])
++def test_ogip_grammar_fail(string):
++ with pytest.raises(ValueError):
++ print(string)
++ u_format.OGIP.parse(string)
++
++
++@pytest.mark.parametrize('unit', [val for key, val in u.__dict__.items()
++ if (isinstance(val, core.UnitBase) and
++ not isinstance(val, core.PrefixUnit))])
++def test_roundtrip(unit):
++ a = core.Unit(unit.to_string('generic'), format='generic')
++ b = core.Unit(unit.decompose().to_string('generic'), format='generic')
++ assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
++ assert_allclose(b.decompose().scale, unit.decompose().scale, rtol=1e-2)
++
++
++@pytest.mark.parametrize('unit', [
++ val for key, val in u_format.VOUnit._units.items()
++ if (isinstance(val, core.UnitBase) and
++ not isinstance(val, core.PrefixUnit))])
++def test_roundtrip_vo_unit(unit):
++ a = core.Unit(unit.to_string('vounit'), format='vounit')
++ assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
++ if unit not in (u.mag, u.dB):
++ ud = unit.decompose().to_string('vounit')
++ assert ' ' not in ud
++ b = core.Unit(ud, format='vounit')
+ assert_allclose(b.decompose().scale, unit.decompose().scale, rtol=1e-2)
+
+- x = u_format.CDS
+- for key, val in x._units.items():
+- if isinstance(val, core.UnitBase) and not isinstance(val, core.PrefixUnit):
+- yield _test_roundtrip_cds, val
+
++@pytest.mark.parametrize('unit', [
++ val for key, val in u_format.Fits._units.items()
++ if (isinstance(val, core.UnitBase) and
++ not isinstance(val, core.PrefixUnit))])
++def test_roundtrip_fits(unit):
++ s = unit.to_string('fits')
++ a = core.Unit(s, format='fits')
++ assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
+
+-def test_roundtrip_ogip():
+- def _test_roundtrip_ogip(unit):
+- a = core.Unit(unit.to_string('ogip'), format='ogip')
+- assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
+- try:
+- b = core.Unit(unit.decompose().to_string('ogip'), format='ogip')
+- except ValueError: # skip mag: decomposes into dex, unknown to OGIP
+- return
+- assert_allclose(b.decompose().scale, unit.decompose().scale, rtol=1e-2)
+
+- x = u_format.OGIP
+- for key, val in x._units.items():
+- if isinstance(val, core.UnitBase) and not isinstance(val, core.PrefixUnit):
+- yield _test_roundtrip_ogip, val
++@pytest.mark.parametrize('unit', [
++ val for key, val in u_format.CDS._units.items()
++ if (isinstance(val, core.UnitBase) and
++ not isinstance(val, core.PrefixUnit))])
++def test_roundtrip_cds(unit):
++ a = core.Unit(unit.to_string('cds'), format='cds')
++ assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
++ try:
++ b = core.Unit(unit.decompose().to_string('cds'), format='cds')
++ except ValueError: # skip mag: decomposes into dex, unknown to OGIP
++ return
++ assert_allclose(b.decompose().scale, unit.decompose().scale, rtol=1e-2)
++
++
++@pytest.mark.parametrize('unit', [
++ val for key, val in u_format.OGIP._units.items()
++ if (isinstance(val, core.UnitBase) and
++ not isinstance(val, core.PrefixUnit))])
++def test_roundtrip_ogip(unit):
++ a = core.Unit(unit.to_string('ogip'), format='ogip')
++ assert_allclose(a.decompose().scale, unit.decompose().scale, rtol=1e-2)
++ try:
++ b = core.Unit(unit.decompose().to_string('ogip'), format='ogip')
++ except ValueError: # skip mag: decomposes into dex, unknown to OGIP
++ return
++ assert_allclose(b.decompose().scale, unit.decompose().scale, rtol=1e-2)
+
+
+ def test_fits_units_available():
+@@ -307,22 +266,16 @@ def test_latex_inline_scale():
+ assert fluxunit.to_string('latex_inline') == latex_inline
+
+
+-def test_format_styles():
++@pytest.mark.parametrize('format_spec, string', [
++ ('generic','erg / (cm2 s)'),
++ ('s', 'erg / (cm2 s)'),
++ ('console', ' erg \n ------\n s cm^2'),
++ ('latex', '$\\mathrm{\\frac{erg}{s\\,cm^{2}}}$'),
++ ('latex_inline', '$\\mathrm{erg\\,s^{-1}\\,cm^{-2}}$'),
++ ('>20s',' erg / (cm2 s)')])
++def test_format_styles(format_spec, string):
+ fluxunit = u.erg / (u.cm ** 2 * u.s)
+- def _test_format_styles(format_spec, s):
+- assert format(fluxunit, format_spec) == s
+-
+- format_s_pairs = [
+- ('generic','erg / (cm2 s)'),
+- ('s', 'erg / (cm2 s)'),
+- ('console', ' erg \n ------\n s cm^2'),
+- ('latex', '$\\mathrm{\\frac{erg}{s\\,cm^{2}}}$'),
+- ('latex_inline', '$\\mathrm{erg\\,s^{-1}\\,cm^{-2}}$'),
+- ('>20s',' erg / (cm2 s)'),
+- ]
+-
+- for format_, s in format_s_pairs:
+- yield _test_format_styles, format_, s
++ assert format(fluxunit, format_spec) == string
+
+
+ def test_flatten_to_known():
+@@ -332,10 +285,9 @@ def test_flatten_to_known():
+ assert myunit2.to_string('fits') == 'bit3 erg Hz-1'
+
+
+-@raises(ValueError)
+ def test_flatten_impossible():
+ myunit = u.def_unit("FOOBAR_Two")
+- with u.add_enabled_units(myunit):
++ with u.add_enabled_units(myunit), pytest.raises(ValueError):
+ myunit.to_string('fits')
+
+
+@@ -434,34 +386,20 @@ def test_deprecated_did_you_mean_units():
+ assert '0.1nm' in six.text_type(w[0].message)
+
+
+-def test_fits_function():
++@pytest.mark.parametrize('string', ['mag(ct/s)', 'dB(mW)', 'dex(cm s**-2)'])
++def test_fits_function(string):
+ # Function units cannot be written, so ensure they're not parsed either.
+- @raises(ValueError)
+- def _test_fits_grammar_fail(s):
+- print(s)
+- u_format.Fits().parse(s)
+-
+- data = ['mag(ct/s)',
+- 'dB(mW)',
+- 'dex(cm s**-2)']
+-
+- for s in data:
+- yield _test_fits_grammar_fail, s
++ with pytest.raises(ValueError):
++ print(string)
++ u_format.Fits().parse(string)
+
+
+-def test_vounit_function():
++@pytest.mark.parametrize('string', ['mag(ct/s)', 'dB(mW)', 'dex(cm s**-2)'])
++def test_vounit_function(string):
+ # Function units cannot be written, so ensure they're not parsed either.
+- @raises(ValueError)
+- def _test_vounit_grammar_fail(s):
+- print(s)
+- u_format.VOUnit().parse(s)
+-
+- data = ['mag(ct/s)',
+- 'dB(mW)',
+- 'dex(cm s**-2)']
+-
+- for s in data:
+- yield _test_vounit_grammar_fail, s
++ with pytest.raises(ValueError):
++ print(string)
++ u_format.VOUnit().parse(string)
+
+
+ def test_vounit_binary_prefix():
+diff --git a/astropy/wcs/tests/test_profiling.py b/astropy/wcs/tests/test_profiling.py
+index a17a076..57d9a93 100644
+--- a/astropy/wcs/tests/test_profiling.py
++++ b/astropy/wcs/tests/test_profiling.py
+@@ -7,84 +7,61 @@ import os
+
+ import numpy as np
+
++from ...tests.helper import pytest
+ from ...utils.data import get_pkg_data_filenames, get_pkg_data_contents
+ from ...utils.misc import NumpyRNGContext
+
+ from ... import wcs
+
++#hdr_map_file_list = list(get_pkg_data_filenames("maps", pattern="*.hdr"))
+
+-def test_maps():
+- def test_map(filename):
+- header = get_pkg_data_contents(os.path.join("maps", filename))
+- wcsobj = wcs.WCS(header)
+-
+- with NumpyRNGContext(123456789):
+- x = np.random.rand(2 ** 12, wcsobj.wcs.naxis)
+- world = wcsobj.wcs_pix2world(x, 1)
+- pix = wcsobj.wcs_world2pix(x, 1)
+-
+- hdr_file_list = list(get_pkg_data_filenames("maps", pattern="*.hdr"))
+-
+- # actually perform a test for each one
+- for filename in hdr_file_list:
+-
+- # use the base name of the file, because everything we yield
+- # will show up in the test name in the pandokia report
+- filename = os.path.basename(filename)
+-
+- # yield a function name and parameters to make a generated test
+- yield test_map, filename
++# use the base name of the file, because everything we yield
++# will show up in the test name in the pandokia report
++hdr_map_file_list = [os.path.basename(fname) for fname in get_pkg_data_filenames("maps", pattern="*.hdr")]
+
+- # AFTER we tested with every file that we found, check to see that we
+- # actually have the list we expect. If N=0, we will not have performed
+- # any tests at all. If N < n_data_files, we are missing some files,
+- # so we will have skipped some tests. Without this check, both cases
+- # happen silently!
++# Checking the number of files before reading them in.
++# OLD COMMENTS:
++# AFTER we tested with every file that we found, check to see that we
++# actually have the list we expect. If N=0, we will not have performed
++# any tests at all. If N < n_data_files, we are missing some files,
++# so we will have skipped some tests. Without this check, both cases
++# happen silently!
+
+- # how many do we expect to see?
+- n_data_files = 28
+-
+- if len(hdr_file_list) != n_data_files:
+- assert False, (
+- "test_maps has wrong number data files: found {}, expected "
+- " {}".format(len(hdr_file_list), n_data_files))
+- # b.t.w. If this assert happens, py.test reports one more test
+- # than it would have otherwise.
++def test_read_map_files():
++ # how many map files we expect to see
++ n_map_files = 28
+
++ assert len(hdr_map_file_list) == n_map_files, (
++ "test_read_map_files has wrong number data files: found {}, expected "
++ " {}".format(len(hdr_map_file_list), n_map_files))
+
+-def test_spectra():
+- def test_spectrum(filename):
+- header = get_pkg_data_contents(os.path.join("spectra", filename))
++@pytest.mark.parametrize("filename", hdr_map_file_list)
++def test_map(filename):
++ header = get_pkg_data_contents(os.path.join("maps", filename))
+ wcsobj = wcs.WCS(header)
++
+ with NumpyRNGContext(123456789):
+- x = np.random.rand(2 ** 16, wcsobj.wcs.naxis)
++ x = np.random.rand(2 ** 12, wcsobj.wcs.naxis)
+ world = wcsobj.wcs_pix2world(x, 1)
+ pix = wcsobj.wcs_world2pix(x, 1)
+
+- hdr_file_list = list(get_pkg_data_filenames("spectra", pattern="*.hdr"))
++hdr_spec_file_list = [os.path.basename(fname) for fname in get_pkg_data_filenames("spectra", pattern="*.hdr")]
+
+- # actually perform a test for each one
+- for filename in hdr_file_list:
++def test_read_spec_files():
++ # how many spec files expected
++ n_spec_files = 6
+
+- # use the base name of the file, because everything we yield
+- # will show up in the test name in the pandokia report
+- filename = os.path.basename(filename)
+-
+- # yield a function name and parameters to make a generated test
+- yield test_spectrum, filename
+-
+- # AFTER we tested with every file that we found, check to see that we
+- # actually have the list we expect. If N=0, we will not have performed
+- # any tests at all. If N < n_data_files, we are missing some files,
+- # so we will have skipped some tests. Without this check, both cases
+- # happen silently!
+-
+- # how many do we expect to see?
+- n_data_files = 6
+-
+- if len(hdr_file_list) != n_data_files:
+- assert False, (
++ assert len(hdr_spec_file_list) == n_spec_files, (
+ "test_spectra has wrong number data files: found {}, expected "
+- " {}".format(len(hdr_file_list), n_data_files))
++ " {}".format(len(hdr_spec_file_list), n_spec_files))
+ # b.t.w. If this assert happens, py.test reports one more test
+ # than it would have otherwise.
++
++@pytest.mark.parametrize("filename", hdr_spec_file_list)
++def test_spectrum(filename):
++ header = get_pkg_data_contents(os.path.join("spectra", filename))
++ wcsobj = wcs.WCS(header)
++ with NumpyRNGContext(123456789):
++ x = np.random.rand(2 ** 16, wcsobj.wcs.naxis)
++ world = wcsobj.wcs_pix2world(x, 1)
++ pix = wcsobj.wcs_world2pix(x, 1)
+diff --git a/astropy/wcs/tests/test_wcs.py b/astropy/wcs/tests/test_wcs.py
+index cf9db9a..12e77bc 100644
+--- a/astropy/wcs/tests/test_wcs.py
++++ b/astropy/wcs/tests/test_wcs.py
+@@ -26,99 +26,67 @@ from ...io import fits
+ from ...extern.six.moves import range
+
+
+-# test_maps() is a generator
+-def test_maps():
++class TestMaps(object):
++ def setup(self):
++ # get the list of the hdr files that we want to test
++ self._file_list = list(get_pkg_data_filenames("maps", pattern="*.hdr"))
+
+- # test_map() is the function that is called to perform the generated test
+- def test_map(filename):
+-
+- # the test parameter is the base name of the file to use; find
+- # the file in the installed wcs test directory
+- header = get_pkg_data_contents(
+- os.path.join("maps", filename), encoding='binary')
+- wcsobj = wcs.WCS(header)
+-
+- world = wcsobj.wcs_pix2world([[97, 97]], 1)
+-
+- assert_array_almost_equal(world, [[285.0, -66.25]], decimal=1)
+-
+- pix = wcsobj.wcs_world2pix([[285.0, -66.25]], 1)
+-
+- assert_array_almost_equal(pix, [[97, 97]], decimal=0)
+-
+- # get the list of the hdr files that we want to test
+- hdr_file_list = list(get_pkg_data_filenames("maps", pattern="*.hdr"))
+-
+- # actually perform a test for each one
+- for filename in hdr_file_list:
+-
+- # use the base name of the file, because everything we yield
+- # will show up in the test name in the pandokia report
+- filename = os.path.basename(filename)
+-
+- # yield a function name and parameters to make a generated test
+- yield test_map, filename
+-
+- # AFTER we tested with every file that we found, check to see that we
+- # actually have the list we expect. If N=0, we will not have performed
+- # any tests at all. If N < n_data_files, we are missing some files,
+- # so we will have skipped some tests. Without this check, both cases
+- # happen silently!
+-
+- # how many do we expect to see?
+- n_data_files = 28
+-
+- if len(hdr_file_list) != n_data_files:
+- assert False, (
+- "test_maps has wrong number data files: found {}, expected "
+- " {}".format(len(hdr_file_list), n_data_files))
+- # b.t.w. If this assert happens, py.test reports one more test
+- # than it would have otherwise.
++ def test_consistency(self):
++ # Check to see that we actually have the list we expect, so that we
++ # do not get in a situation where the list is empty or incomplete and
++ # the tests still seem to pass correctly.
+
++ # how many do we expect to see?
++ n_data_files = 28
+
+-# test_spectra() is a generator
+-def test_spectra():
+-
+- # test_spectrum() is the function that is called to perform the
+- # generated test
+- def test_spectrum(filename):
+-
+- # the test parameter is the base name of the file to use; find
+- # the file in the installed wcs test directory
+- header = get_pkg_data_contents(
+- os.path.join("spectra", filename), encoding='binary')
+-
+- all_wcs = wcs.find_all_wcs(header)
+- assert len(all_wcs) == 9
+-
+- # get the list of the hdr files that we want to test
+- hdr_file_list = list(get_pkg_data_filenames("spectra", pattern="*.hdr"))
+-
+- # actually perform a test for each one
+- for filename in hdr_file_list:
+-
+- # use the base name of the file, because everything we yield
+- # will show up in the test name in the pandokia report
+- filename = os.path.basename(filename)
+-
+- # yield a function name and parameters to make a generated test
+- yield test_spectrum, filename
+-
+- # AFTER we tested with every file that we found, check to see that we
+- # actually have the list we expect. If N=0, we will not have performed
+- # any tests at all. If N < n_data_files, we are missing some files,
+- # so we will have skipped some tests. Without this check, both cases
+- # happen silently!
+-
+- # how many do we expect to see?
+- n_data_files = 6
+-
+- if len(hdr_file_list) != n_data_files:
+- assert False, (
++ assert len(self._file_list) == n_data_files, (
++ "test_spectra has wrong number data files: found {}, expected "
++ " {}".format(len(self._file_list), n_data_files))
++
++ def test_maps(self):
++ for filename in self._file_list:
++ # use the base name of the file, so we get more useful messages
++ # for failing tests.
++ filename = os.path.basename(filename)
++ # Now find the associated file in the installed wcs test directory.
++ header = get_pkg_data_contents(
++ os.path.join("maps", filename), encoding='binary')
++ # finally run the test.
++ wcsobj = wcs.WCS(header)
++ world = wcsobj.wcs_pix2world([[97, 97]], 1)
++ assert_array_almost_equal(world, [[285.0, -66.25]], decimal=1)
++ pix = wcsobj.wcs_world2pix([[285.0, -66.25]], 1)
++ assert_array_almost_equal(pix, [[97, 97]], decimal=0)
++
++
++class TestSpectra(object):
++ def setup(self):
++ self._file_list = list(get_pkg_data_filenames("spectra",
++ pattern="*.hdr"))
++
++ def test_consistency(self):
++ # Check to see that we actually have the list we expect, so that we
++ # do not get in a situation where the list is empty or incomplete and
++ # the tests still seem to pass correctly.
++
++ # how many do we expect to see?
++ n_data_files = 6
++
++ assert len(self._file_list) == n_data_files, (
+ "test_spectra has wrong number data files: found {}, expected "
+- " {}".format(len(hdr_file_list), n_data_files))
+- # b.t.w. If this assert happens, py.test reports one more test
+- # than it would have otherwise.
++ " {}".format(len(self._file_list), n_data_files))
++
++ def test_spectra(self):
++ for filename in self._file_list:
++ # use the base name of the file, so we get more useful messages
++ # for failing tests.
++ filename = os.path.basename(filename)
++ # Now find the associated file in the installed wcs test directory.
++ header = get_pkg_data_contents(
++ os.path.join("spectra", filename), encoding='binary')
++ # finally run the test.
++ all_wcs = wcs.find_all_wcs(header)
++ assert len(all_wcs) == 9
+
+
+ def test_fixes():
--- /dev/null
+From: Ole Streicher <olebole@debian.org>
+Date: Tue, 13 Dec 2016 09:41:39 +0100
+Subject: Disable astropy-helpers copy
+
+---
+ setup.cfg | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/setup.cfg b/setup.cfg
+index cc67de4..206e6f8 100644
+--- a/setup.cfg
++++ b/setup.cfg
+@@ -23,7 +23,7 @@ open_files_ignore = "astropy.log" "/etc/hosts"
+ bitmap = static/wininst_background.bmp
+
+ [ah_bootstrap]
+-auto_use = True
++auto_use = False
+
+ [pep8]
+ # E101 - mix of tabs and spaces
--- /dev/null
+From: Ole Streicher <olebole@debian.org>
+Date: Thu, 12 Jan 2017 11:37:47 +0100
+Subject: Use external python modules instead of convenience copies
+
+---
+ astropy/coordinates/angle_utilities.py | 2 +-
+ astropy/extern/configobj.py | 5 ++++-
+ astropy/extern/six.py | 2 +-
+ astropy/table/jsviewer.py | 14 ++++++++------
+ astropy/table/tests/test_jsviewer.py | 6 +++---
+ astropy/tests/helper.py | 2 +-
+ astropy/units/format/cds.py | 4 ++--
+ astropy/units/format/generic.py | 4 ++--
+ astropy/units/format/ogip.py | 4 ++--
+ 9 files changed, 24 insertions(+), 19 deletions(-)
+
+diff --git a/astropy/coordinates/angle_utilities.py b/astropy/coordinates/angle_utilities.py
+index ddaeaf6..06eefaf 100644
+--- a/astropy/coordinates/angle_utilities.py
++++ b/astropy/coordinates/angle_utilities.py
+@@ -64,7 +64,7 @@ class _AngleParser(object):
+
+ @classmethod
+ def _make_parser(cls):
+- from ..extern.ply import lex, yacc
++ from ply import lex, yacc
+
+ # List of token names.
+ tokens = (
+diff --git a/astropy/extern/configobj.py b/astropy/extern/configobj.py
+index 8d1bd8c..e3bb0e0 100644
+--- a/astropy/extern/configobj.py
++++ b/astropy/extern/configobj.py
+@@ -7,5 +7,8 @@ currently installed version of python.
+ Also, this should actually never actually show up as a docstring, because
+ it should get overwritten by the appropriate configobj docstring.
+ """
++from __future__ import absolute_import
++import validate
++import configobj
++
+
+-from .configobj import configobj, validate, __doc__
+diff --git a/astropy/extern/six.py b/astropy/extern/six.py
+index 5398fc0..fb3a30c 100644
+--- a/astropy/extern/six.py
++++ b/astropy/extern/six.py
+@@ -13,7 +13,7 @@ _SIX_MIN_VERSION = StrictVersion('1.10.0')
+ # Update this to prevent Astropy from using its bundled copy of six
+ # (but only if some other version of at least _SIX_MIN_VERSION can
+ # be provided)
+-_SIX_SEARCH_PATH = ['astropy.extern.bundled.six', 'six']
++_SIX_SEARCH_PATH = ['six']
+
+
+ def _find_module(name, path=None):
+diff --git a/astropy/table/jsviewer.py b/astropy/table/jsviewer.py
+index ae99eb9..d856cf8 100644
+--- a/astropy/table/jsviewer.py
++++ b/astropy/table/jsviewer.py
+@@ -30,8 +30,8 @@ class Conf(_config.ConfigNamespace):
+ conf = Conf()
+
+
+-EXTERN_JS_DIR = abspath(join(dirname(extern.__file__), 'js'))
+-EXTERN_CSS_DIR = abspath(join(dirname(extern.__file__), 'css'))
++EXTERN_JS_DIR = '/usr/share/javascript'
++EXTERN_CSS_DIR = EXTERN_JS_DIR
+
+ IPYNB_JS_SCRIPT = """
+ <script>
+@@ -108,22 +108,24 @@ class JSViewer(object):
+ @property
+ def jquery_urls(self):
+ if self._use_local_files:
+- return ['file://' + join(EXTERN_JS_DIR, 'jquery-3.1.1.min.js'),
+- 'file://' + join(EXTERN_JS_DIR, 'jquery.dataTables.min.js')]
++ return ['file://' + join(EXTERN_JS_DIR, 'jquery', 'jquery.min.js'),
++ 'file://' + join(EXTERN_JS_DIR, 'jquery-datatables',
++ 'jquery.dataTables.min.js')]
+ else:
+ return [conf.jquery_url, conf.datatables_url]
+
+ @property
+ def css_urls(self):
+ if self._use_local_files:
+- return ['file://' + join(EXTERN_CSS_DIR,
++ return ['file://' + join(EXTERN_CSS_DIR, 'jquery-datatables', 'css',
+ 'jquery.dataTables.css')]
+ else:
+ return conf.css_urls
+
+ def _jstable_file(self):
+ if self._use_local_files:
+- return 'file://' + join(EXTERN_JS_DIR, 'jquery.dataTables.min')
++ return 'file://' + join(EXTERN_JS_DIR, 'jquery-datatables',
++ 'jquery.dataTables.min')
+ else:
+ return conf.datatables_url[:-3]
+
+diff --git a/astropy/table/tests/test_jsviewer.py b/astropy/table/tests/test_jsviewer.py
+index af04b7e..e02d4be 100644
+--- a/astropy/table/tests/test_jsviewer.py
++++ b/astropy/table/tests/test_jsviewer.py
+@@ -127,9 +127,9 @@ def test_write_jsviewer_local(tmpdir):
+ table_id='test',
+ length='50',
+ display_length='10, 25, 50, 100, 500, 1000',
+- datatables_css_url='file://' + join(EXTERN_DIR, 'css', 'jquery.dataTables.css'),
+- datatables_js_url='file://' + join(EXTERN_DIR, 'js', 'jquery.dataTables.min.js'),
+- jquery_url='file://' + join(EXTERN_DIR, 'js', 'jquery-3.1.1.min.js')
++ datatables_css_url='file:///usr/share/javascript/jquery-datatables/css/jquery.dataTables.css',
++ datatables_js_url='file:///usr/share/javascript/jquery-datatables/jquery.dataTables.min.js',
++ jquery_url='file:///usr/share/javascript/jquery/jquery.min.js'
+ )
+ with open(tmpfile) as f:
+ assert f.read().strip() == ref.strip()
+diff --git a/astropy/tests/helper.py b/astropy/tests/helper.py
+index 9b0bf3b..b9743c5 100644
+--- a/astropy/tests/helper.py
++++ b/astropy/tests/helper.py
+@@ -40,7 +40,7 @@ __all__ = ['raises', 'enable_deprecations_as_exceptions', 'remote_data',
+ 'pickle_protocol', 'generic_recursive_equality_test']
+
+
+-if os.environ.get('ASTROPY_USE_SYSTEM_PYTEST') or '_pytest' in sys.modules:
++if True:
+ import pytest
+
+ else:
+diff --git a/astropy/units/format/cds.py b/astropy/units/format/cds.py
+index ecb78e2..d864738 100644
+--- a/astropy/units/format/cds.py
++++ b/astropy/units/format/cds.py
+@@ -78,7 +78,7 @@ class CDS(Base):
+
+ @classmethod
+ def _make_lexer(cls):
+- from ...extern.ply import lex
++ from ply import lex
+
+ tokens = cls._tokens
+
+@@ -141,7 +141,7 @@ class CDS(Base):
+ <https://bitbucket.org/nxg/unity/>`_.
+ """
+
+- from ...extern.ply import yacc
++ from ply import yacc
+
+ tokens = cls._tokens
+
+diff --git a/astropy/units/format/generic.py b/astropy/units/format/generic.py
+index f4aa8c0..d404017 100644
+--- a/astropy/units/format/generic.py
++++ b/astropy/units/format/generic.py
+@@ -102,7 +102,7 @@ class Generic(Base):
+
+ @classmethod
+ def _make_lexer(cls):
+- from ...extern.ply import lex
++ from ply import lex
+
+ tokens = cls._tokens
+
+@@ -181,7 +181,7 @@ class Generic(Base):
+ formats, the only difference being the set of available unit
+ strings.
+ """
+- from ...extern.ply import yacc
++ from ply import yacc
+
+ tokens = cls._tokens
+
+diff --git a/astropy/units/format/ogip.py b/astropy/units/format/ogip.py
+index 7c66a6b..9eed1de 100644
+--- a/astropy/units/format/ogip.py
++++ b/astropy/units/format/ogip.py
+@@ -110,7 +110,7 @@ class OGIP(generic.Generic):
+
+ @classmethod
+ def _make_lexer(cls):
+- from ...extern.ply import lex
++ from ply import lex
+
+ tokens = cls._tokens
+
+@@ -179,7 +179,7 @@ class OGIP(generic.Generic):
+ <https://bitbucket.org/nxg/unity/>`_.
+ """
+
+- from ...extern.ply import yacc
++ from ply import yacc
+
+ tokens = cls._tokens
+
--- /dev/null
+From: Ole Streicher <olebole@debian.org>
+Date: Tue, 13 Dec 2016 09:41:39 +0100
+Subject: Make TFORMx check more flexible The maximal column length in cfitsio
+ changed between version 3370 and 3380. This patch checks their syntax,
+ without a specific length.
+
+---
+ astropy/io/fits/tests/test_image.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/astropy/io/fits/tests/test_image.py b/astropy/io/fits/tests/test_image.py
+index a8551dd..17af9a0 100644
+--- a/astropy/io/fits/tests/test_image.py
++++ b/astropy/io/fits/tests/test_image.py
+@@ -1107,7 +1107,7 @@ class TestCompressedImage(FitsTestCase):
+ hdu.writeto(self.temp('test.fits'))
+
+ with fits.open(self.temp('test.fits')) as hdul:
+- assert (hdul['SCI'].data == cube).all()
++ assert np.abs(hdul['SCI'].data - cube).max() < 1./15.
+
+ def test_subtractive_dither_seed(self):
+ """
--- /dev/null
+From: Ole Streicher <olebole@debian.org>
+Date: Tue, 13 Dec 2016 09:41:39 +0100
+Subject: Mark all known test failures as xfail. These failures have been
+ discussed with upstream.
+
+---
+ astropy/table/tests/test_info.py | 4 +++-
+ astropy/tests/tests/test_socketblocker.py | 4 ++--
+ astropy/visualization/wcsaxes/tests/test_display_world_coordinates.py | 4 ++++
+ astropy/vo/samp/tests/test_standard_profile.py | 2 ++
+ 4 files changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/astropy/table/tests/test_info.py b/astropy/table/tests/test_info.py
+index 2bbcc7a..50fbdb4 100644
+--- a/astropy/table/tests/test_info.py
++++ b/astropy/table/tests/test_info.py
+@@ -8,6 +8,7 @@ from collections import OrderedDict
+
+ import numpy as np
+
++from ...tests.helper import pytest
+ from ...extern import six
+ from ...extern.six.moves import cStringIO as StringIO
+ from ... import units as u
+@@ -229,7 +230,8 @@ def test_class_attribute():
+ t.info(out=out)
+ assert out.getvalue().splitlines() == exp
+
+-
++# see https://github.com/astropy/astropy/issues/4336
++@pytest.mark.xfail()
+ def test_ignore_warnings():
+ t = table.Table([[np.nan, np.nan]])
+ with warnings.catch_warnings(record=True) as warns:
+diff --git a/astropy/tests/tests/test_socketblocker.py b/astropy/tests/tests/test_socketblocker.py
+index c362fa5..783defe 100644
+--- a/astropy/tests/tests/test_socketblocker.py
++++ b/astropy/tests/tests/test_socketblocker.py
+@@ -66,8 +66,8 @@ PY3_4 = sys.version_info[:2] >= (3, 4)
+ def _square(x):
+ return x ** 2
+
+-
+-@pytest.mark.skipif('not PY3_4 or sys.platform == "win32" or sys.platform.startswith("gnu0")')
++# see https://github.com/astropy/astropy/issues/4193
++@pytest.mark.skipif(True, reason="Blocks on Debian CI test")
+ def test_multiprocessing_forkserver():
+ """
+ Test that using multiprocessing with forkserver works. Perhaps
+diff --git a/astropy/visualization/wcsaxes/tests/test_display_world_coordinates.py b/astropy/visualization/wcsaxes/tests/test_display_world_coordinates.py
+index 53436dd..4c710e7 100644
+--- a/astropy/visualization/wcsaxes/tests/test_display_world_coordinates.py
++++ b/astropy/visualization/wcsaxes/tests/test_display_world_coordinates.py
+@@ -3,6 +3,8 @@ from ..core import WCSAxes
+ import matplotlib.pyplot as plt
+ from matplotlib.backend_bases import KeyEvent
+
++import pytest
++
+ from ....wcs import WCS
+ from ....extern import six
+ from ....coordinates import FK5
+@@ -93,6 +95,8 @@ class TestDisplayWorldCoordinate(BaseImageTests):
+
+ assert string_world5 == six.u('267.652 -28\xb046\'23" (world, overlay 3)')
+
++ # See https://github.com/astropy/astropy/issues/5601
++ @pytest.mark.xfail()
+ def test_cube_coords(self, tmpdir):
+ wcs = WCS(self.cube_header)
+
+diff --git a/astropy/vo/samp/tests/test_standard_profile.py b/astropy/vo/samp/tests/test_standard_profile.py
+index 325ac96..ac25e55 100644
+--- a/astropy/vo/samp/tests/test_standard_profile.py
++++ b/astropy/vo/samp/tests/test_standard_profile.py
+@@ -62,6 +62,8 @@ class TestStandardProfile(object):
+
+ self.hub.stop()
+
++ # see https://github.com/astropy/astropy/issues/5460
++ @pytest.mark.skipif(True, reason="Setup fails due to SSL problems")
+ def test_main(self):
+
+ self.client1_id = self.client1.get_public_id()
--- /dev/null
+From: Ole Streicher <olebole@debian.org>
+Date: Tue, 13 Dec 2016 09:41:39 +0100
+Subject: Install the scripts only for the Python 3 version
+
+---
+ setup.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index ea11de4..aab845e 100755
+--- a/setup.py
++++ b/setup.py
+@@ -53,7 +53,8 @@ package_info['package_data'].setdefault('astropy', []).append('data/*')
+ # Add any necessary entry points
+ entry_points = {}
+ # Command-line scripts
+-entry_points['console_scripts'] = [
++if sys.version_info[0] == 3:
++ entry_points['console_scripts'] = [
+ 'fits2bitmap = astropy.visualization.scripts.fits2bitmap:main',
+ 'fitscheck = astropy.io.fits.scripts.fitscheck:main',
+ 'fitsdiff = astropy.io.fits.scripts.fitsdiff:main',
--- /dev/null
+disable_helper.patch
+fix_for_cfitsio_3380.patch
+only_python3-binaries.patch
+mark_known_failures.patch
+Ensure-NUMPY_LT_1_12-works-for-beta-prerelease.patch
+external_python_pkgs.patch
+Fix-default-value-for-remote_data-option.patch
+Use-parametrize-instead-of-yield.patch
+Allow-pytest-3.x-to-use-plugin-for-doctests-in-.rst-files.patch
--- /dev/null
+Document: python-astropy
+Title: Astropy Documentation
+Author: The Astropy Collaboration.
+Section: Science/Astronomy
+Abstract: Astropy is a community-driven package intended to contain much of
+ the core functionality and some common tools needed for performing astronomy
+ and astrophysics with Python.
+
+Format: HTML
+Index: /usr/share/doc/python-astropy-doc/html/index.html
+Files: /usr/share/doc/python-astropy-doc/html/
--- /dev/null
+docs/_build/html
--- /dev/null
+# We store an extra license file since this is linked within the
+# HTML documentation. It seems to be better to keep this file than
+# to remove these links or to link to the machine-readable Debian
+# copyright file.
+extra-license-file usr/share/doc/python-astropy-doc/html/_sources/license.txt
--- /dev/null
+usr/lib/python2*/dist-packages/astropy*
--- /dev/null
+# The hardening is switched on, but does not cover all functions mentioned
+# in hardening-check.
+hardening-no-fortify-functions */astropy/utils/xml/_iterparser*.so
+# Python packages install all files into a common subdir by purpose.
+python-astropy: image-file-in-usr-lib
--- /dev/null
+usr/lib/python3*/dist-packages/astropy*
--- /dev/null
+# The hardening is switched on, but does not cover all functions mentioned
+# in hardening-check.
+hardening-no-fortify-functions */astropy/utils/xml/_iterparser*.*
+# Python packages install all files into a common subdir by purpose.
+python3-astropy: image-file-in-usr-lib
--- /dev/null
+#!/usr/bin/make -f
+
+PYTHON2:=$(shell pyversions -vr)
+PYTHON3:=$(shell py3versions -vr)
+
+# set the MPLCONFIGDIR to avoid writing into non writable location
+export HOME=$(CURDIR)/build
+export MPLCONFIGDIR=$(CURDIR)/build
+
+# Prevent setuptools/distribute from accessing the internet.
+export http_proxy = http://127.0.9.1:9
+
+%:
+ dh $@ --with python2,python3,sphinxdoc
+
+build-python%:
+ python$* setup.py build --use-system-libraries
+
+# We need to build python2 first, since cython is currently only available for
+# python2, and we need cython to (re-) generate some of the C files.
+override_dh_auto_build: $(PYTHON2:%=build-python%) $(PYTHON3:%=build-python%)
+ #dh_auto_build
+
+install-python%:
+ python$* setup.py install --root=$(CURDIR)/debian/tmp --install-layout=deb
+
+override_dh_auto_install: $(PYTHON3:%=install-python%)
+ dh_auto_install
+
+override_dh_auto_build:
+ dh_auto_build -- --use-system-libraries
+
+override_dh_shlibdeps:
+ dh_shlibdeps
+ dh_numpy
+ dh_numpy3
+
+override_dh_installdocs-indep:
+ python setup.py build_sphinx
+ dh_installdocs
+
+override_dh_sphinxdoc-arch:
+ # sphinxdoc is only needed on indep and does not work here.
+
+override_dh_installchangelogs:
+ dh_installchangelogs docs/changelog.rst
+
+override_dh_auto_clean:
+ dh_auto_clean
+ rm -rf build astropy.egg-info
+ rm -rf astropy_helpers-*.egg
+ rm -rf docs/_build docs/_generated
+
+ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
+test-python%:
+ python$* setup.py test -vv --args -vv
+
+override_dh_auto_test: $(PYTHON2:%=test-python%) $(PYTHON3:%=test-python%)
+endif
+
+override_dh_strip_nondeterminism:
+ dh_strip_nondeterminism -Xinvalid.dat.gz
--- /dev/null
+.TH SAMP_HUB 1 "April 2015" "samp_hub" "astropy 1.0.2"
+.SH NAME
+samp_hub \- SAMP Hub Server
+.SH DESCRIPTION
+usage: samp_hub [\-h] [\-k CODE] [\-d ADDR] [\-p PORT] [\-f FILE] [\-w]
+.TP
+[\-P SIZE] [\-t SECONDS] [\-c SECONDS] [\-L LEVEL] [\-O FILE]
+[\-l LABEL] [\-m] [\-s] [\-C FILE] [\-K FILE]
+[\-\-cert\-reqs STRING] [\-\-ca\-certs FILE]
+[\-\-ssl\-version STRING]
+.SS "optional arguments:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+show this help message and exit
+.TP
+\fB\-k\fR CODE, \fB\-\-secret\fR CODE
+custom secret code.
+.TP
+\fB\-d\fR ADDR, \fB\-\-addr\fR ADDR
+listening address (or IP).
+.TP
+\fB\-p\fR PORT, \fB\-\-port\fR PORT
+listening port number.
+.TP
+\fB\-f\fR FILE, \fB\-\-lockfile\fR FILE
+custom lockfile.
+.TP
+\fB\-w\fR, \fB\-\-no\-web\-profile\fR
+run the Hub disabling the Web Profile.
+.TP
+\fB\-P\fR SIZE, \fB\-\-pool\-size\fR SIZE
+the socket connections pool size.
+.SS "Timeout group:"
+.IP
+Special options to setup hub and client timeouts.It contains a set of
+special options that allows one to set up the Hub and clients inactivity
+timeouts, that is the Hub or client inactivity time interval after which
+the Hub shuts down or unregisters the client. Notification of
+samp.hub.disconnect MType is sent to the clients forcibly unregistered for
+timeout expiration.
+.TP
+\fB\-t\fR SECONDS, \fB\-\-timeout\fR SECONDS
+set the Hub inactivity timeout in SECONDS. By default
+it is set to 0, that is the Hub never expires.
+.TP
+\fB\-c\fR SECONDS, \fB\-\-client\-timeout\fR SECONDS
+set the client inactivity timeout in SECONDS. By
+default it is set to 0, that is the client never
+expires.
+.SS "Logging options:"
+.IP
+Additional options which allow one to customize the logging output. By default
+the SAMP Hub uses the standard output and standard error devices to print
+out INFO level logging messages. Using the options here below it is
+possible to modify the logging level and also specify the output files
+where redirect the logging messages.
+.TP
+\fB\-L\fR LEVEL, \fB\-\-log\-level\fR LEVEL
+set the Hub instance log level (OFF, ERROR, WARNING,
+INFO, DEBUG).
+.TP
+\fB\-O\fR FILE, \fB\-\-log\-output\fR FILE
+set the output file for the log messages.
+.SS "Advanced group:"
+.IP
+Advanced options addressed to facilitate administrative tasks and allow
+new non\-standard Hub behaviors. In particular the \fB\-\-label\fR options is used
+to assign a value to hub.label token and is used to assign a name to the
+Hub instance. The very special \fB\-\-multi\fR option allows one to start a Hub in
+multi\-instance mode. Multi\-instance mode is a non\-standard Hub behavior
+that enables multiple contemporaneous running Hubs. Multi\-instance hubs
+place their non\-standard lock\-files within the <home directory>/.samp\-1
+directory naming them making use of the format: samp\-hub\-<PID>\-<ID>, where
+PID is the Hub process ID while ID is an internal ID (integer).
+.TP
+\fB\-l\fR LABEL, \fB\-\-label\fR LABEL
+assign a LABEL to the Hub.
+.TP
+\fB\-m\fR, \fB\-\-multi\fR
+run the Hub in multi\-instance mode generating a custom
+lockfile with a random name.
+.SS "SSL group:"
+.IP
+Additional options to launch the Hub instance using the Secure Sockets
+Layer (HTTPS). The \fB\-\-key\-file\fR and \fB\-\-cert\-file\fR parameters specify optional
+files which contain a certificate to be used to identify the local side of
+the connection. Often the private key is stored in the same file as the
+certificate; in this case, only the \fB\-\-cert\-file\fR parameter need be passed.
+If the private key is stored in a separate file, both parameters must be
+used. If the private key is stored in the certificate file, it should come
+before the first certificate in the certificate chain.
+.TP
+\fB\-s\fR, \fB\-\-https\fR
+run the Hub using the Secure Sockets Layer.
+.TP
+\fB\-C\fR FILE, \fB\-\-cert\-file\fR FILE
+set the certificate file.
+.TP
+\fB\-K\fR FILE, \fB\-\-key\-file\fR FILE
+set the key file. By default this option is ignored,
+assuming that the private key is stored in the
+certificate file.
+.TP
+\fB\-\-cert\-reqs\fR STRING
+this option specifies whether a certificate is
+required from the client side of the connection, and
+whether it will be validated if provided. It must be
+one of the three values NONE (certificates ignored,
+default), OPTIONAL (not required, but validated if
+provided), or REQUIRED (required and validated). If
+the value of this option is not NONE, then the \fB\-\-cacerts\fR option must point to a file of CA certificates.
+.TP
+\fB\-\-ca\-certs\fR FILE
+the \fB\-\-ca\-certs\fR file contains a set of concatenated
+"certification authority" certificates, which are used
+to validate certificates passed from the client end of
+the connection.
+.TP
+\fB\-\-ssl\-version\fR STRING
+the \fB\-\-ssl\-version\fR option specifies which version of
+the SSL protocol to use. Typically, the server chooses
+a particular protocol version, and the client must
+adapt to the server's choice. Most of the versions are
+not interoperable with the other versions. If not
+specified the default SSL version is taken from the
+default in the Python standard `ssl` library for the
+version of Python that is installed. Other SSL
+protocol versions are: SSLv2, SSLv3, SSLv23, TLSv1,
+TLSv1_1, TLSv1_2 but not all of them may be available
+on all versions of Python.
--- /dev/null
+3.0 (quilt)
--- /dev/null
+# We don't use the convinience copies of wcslib, so we can
+# safely ignore their lintian warnings.
+outdated-autotools-helper-file cextern/wcslib/config/config.*
+# See https://tests.reproducible-builds.org/debian/rb-pkg/unstable/amd64/python-astropy.html:
+# Actually, it shouldn't be necessary for python-astropy to build-depends
+# on dh-strip-nondeterminism. The override_dh_strip_nondeterminism
+# target in debian/rules will be ignored unless debhelper actually
+# tries to call dh_strip_nondeterminism, in which case debhelper itself
+# would depend on dh-strip-nondeterminism. (Andrew Ayer)
+missing-build-dependency-for-dh_-command
\ No newline at end of file
--- /dev/null
+Tests: python-astropy
+Depends: python-astropy, python-scipy
+Restrictions: allow-stderr
+
+Tests: python3-astropy
+Depends: python3-astropy, python3-scipy
+Restrictions: allow-stderr
--- /dev/null
+#!/usr/bin/env python
+
+import os
+os.chdir(os.getenv('ADTTMP', '/tmp'))
+
+import astropy
+res = astropy.test()
+exit(res)
--- /dev/null
+#!/usr/bin/env python3
+
+import os
+os.chdir(os.getenv('ADTTMP', '/tmp'))
+
+import astropy
+res = astropy.test()
+exit(res)
+
--- /dev/null
+ASCL-Id: 1304.002
+Bug-Database: https://github.com/astropy/astropy/issues
+Contact: Astronomical Python mailing list <astropy@scipy.org>
+Name: astropy
+Reference:
+ author: >
+ Astropy Collaboration, and Robitaille, T.P. and Tollerud, E.J. and
+ Greenfield, P. and Droettboom, M. and Bray, E. and Aldcroft, T. and
+ Davis, M. and Ginsburg, A. and Price-Whelan, A.M. and Kerzendorf, W.E. and
+ Conley, A. and Crighton, N. and Barbary, K. and Muna, D. and
+ Ferguson, H. and Grollier, F. and Parikh, M.M. and Nair, P.H. and
+ Unther, H.M. and Deil, C. and Woillez, J. and Conseil, S. and
+ Kramer, R. and Turner, J.E.H. and Singer, L. and Fox, R. and
+ Weaver, B.A. and Zabalza, V. and Edwards, Z.I. and Azalee Bostroem, K. and
+ Burke, D.J. and Casey, A.R. and Crawford, S.M. and Dencheva, N. and
+ Ely, J. and Jenness, T. and Labrie, K. and Lim, P.L. and
+ Pierfederici, F. and Pontzen, A. and Ptak, A. and Refsdal, B. and
+ Servillat, M. and Streicher, O.
+ title: "Astropy: A community Python package for astronomy"
+ journal: Astronomy & Astrophysics
+ volume: 558
+ number: A33
+ pages: A33
+ doi: 10.1051/0004-6361/201322068
+ year: 2013
+ URL: http://adsabs.harvard.edu/abs/2013A%26A...558A..33A
+ eprint: http://www.aanda.org/articles/aa/pdf/2013/10/aa22068-13.pdf
+Repository: https://github.com/astropy/astropy/
--- /dev/null
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1
+
+mQINBFH7b50BEACYW2Cs+1jo1iU2Al8o8GFkQH9HKXSRzqMjvXxThM8f340CjUom
+rgAZ2PeWDS9Np/h9f+L41D09tcPQINkWCK7NbgKMFA+PSdldx/9tG9Qh8RlPAvzb
+J56L6VaQOawK7/pqbPZUwvegsq2vxlV9nF8YGxUaHLglSppPqMlqW8z4Mcdm7nWh
+DfzhCgirjCAPrcOdNKSnM8lroCzrUmD4q3p9v5Rp15xQ1EXBZt2KA25HZCV8/ZzB
+F3HlZSKFmTSVW/emwb8RG8vJekDsPcT+00jjGH8vHScVqFEHpbzJz5OdEq9cqzcd
+FxWaHbJXTmdN1zdjtH2OV3yNEUHJ+bJVJuNNYCGeIfDjU2vZLhbvLpifg/dnj6Wu
+1qdrtdOB+C05mPO+CHQoh/EJfq3Lcap6khU0hMc2SNMdN59cfHKcFO5f8bzaUBDA
++du/Vnss32LkU26wXiuG6FCslNWY107v+cbfi3ZYmCN6i7Y+7TmVE83JpdVEnQht
+ybXxg18TwMxw4x3aISSWnuk7V5hVAU+Lyf/P5MWaTMyhhjrdrFPJL//0Ls9zCgaH
+iFDqxxbDJaa4p8TEBC7Nt2QiK1bY3FKFag65nJGoEVVJ6NkJpj/dhOhTHvVvg/cz
+xg2q0sTAmHz0079lPlLx0jZ9VUisGYXZXNm71gdLlK2KMWsa+ypHJYIuGwARAQAB
+tCZUaG9tYXMgUm9iaXRhaWxsZSA8cm9iaXRhaWxsZUBtcGlhLmRlPokCOAQTAQIA
+IgUCUftvnQIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQUsxycB4e+Yrh
+CBAAjjtV06cn/uhLvd0puzA0bghlVYBtor5BFyq4hYooKg+uIooX2Lkzu6L/QhVE
+tI3Rrkiygz9otha1r6vHDuPZH16j4d88TEzbNoVJasCNxX2Uab2TtQQZRojSbvO8
+rzIlOPgVPQUOGHbT+VlD2bdneB2/cBy7Wz9LvbLh+KbuDdSBXYljinVARc5vTnxv
+Hoi23OcacuH28GdkiO2EWmlOc9oy3dSgS5+YKt6tLAhqT/l8g04b1/OacYH5eD7n
+fhTyGTOpBuNN7ReArCi5QG5yP2XwOU0NuGA+Hlu2f0w8OHCXgkNRvfnJsLZfyxZz
+tn4p0+X+IKsmwGREG/R0HcdlmE61exvRAEuBfCXfNTYwShA3Eys+SEiWqaz7FAAI
+sivOjRT1NQ6yf5OR8ljUFA9Brnv9paMWwYeirx1op4SFj6gX1buxWCREI2E9yikQ
+goewTLBYNRWQPovW2kWfztMnCfak3DsA+kRPOD6HXpXSXzAfGUpk0ssy5Jn4cVE2
+bZf8XylCWRJwWNIXcTA8gI9XSLAg+11bb2kOz7aGlZUevAj/wAbOy+X0p41F3H1W
+q8wUczs4SXj0qGsesGwiThcxRJtmesJzDSaKSiYAwD7JER6U76zIMMVzof+/bjM2
+S/XogSoFAvdnSp+f93rEdvleJqJy7Fn25lpjiK9cTyQ7V9O5Ag0EUftvnQEQAKoe
+Y/s5dpuTVJs5U+wvHUm0HdKwXLj/Essz78zZ6ofuI/jgkt/SwtGs1fIfGcF8wmRk
+4tSfLkttKdXPqRWy1NA3cJYOHtL1bQm80JQREGIDOtPUu9aEO/yVosSsoFbPz6tp
+V3cPA8SmYbsi1HM64dFu0lnj+oVpPkRAQOTvSPdRQ3baFKqKVowvG9gF9E6TExtV
+7BtLbWNuGoDXs0MTr30H8R2vf1H/TsSGixf/IlQseNxKUTGepOSptyK3uSh+p5a1
++TePyNziVcc2+uiayOd4ZzaGpLh4jhf9BehffnGv/pd4hL91U1tAsDhnv4MDazqj
+f6zKhuaND9TeLp0VjSf3kyfqvSVhD8CJN0OpX7n2mLqxyw7lr/NWVI/MDb1Ozxde
+jhj2WobtdJogCWOFXyXN0qOZa9GdUR/9OOoi1KFjkME7JBT4tDdaKF1uyKpHymfH
+S2/tSJm5x8D+OgyfHNBOudzomK6S/hDykTd2AKcmMfdfaGGU3TNnK1w6+5XcIrEQ
+Z0GQn48L9pg4MDs4PxqzPqYbhcokF30fWMI30bm9CDudMbwx2QAoMo0SZWeU2alu
+EmfbRWOeiUQrb+wSCp45J59TSjqNiIKmpshhH2cMa21lZ7PHBSN8MkphtNHfrEfj
+jLvMR6xf856+q7xp4PZB2tBy5MDGO9kwAcereXTPABEBAAGJAh8EGAECAAkFAlH7
+b50CGwwACgkQUsxycB4e+Yqm0Q/+OYYW682YxpeR6q47mtGDBGi0HspAgM7uRxGZ
+lDna9NwDSE1Nu7dtciEMSIGo0s8i+7iYCRPCOO0JrltfntQuRhyyZRshw2wpyzrw
+6r0olZIOyq0qU7QJvfLg0Jg/WjRTMcHdthVeFT4vLrVVPMs2EonbKHlqdujQDMHH
+p61blTrgZtCQlGqwnT4Rb9qObwEz2f4BHjttuNcDpEfHoo+PaAbHhjCLD2eyp4O2
+Fj31sDkc9KUL5kQtbeEIthThhJxxNyiGWqlfEb/21mYESBt/NKCcJ+aYOegghtVx
+lL/i6drmDFwMrxD7ihBZws9r2INw804yCsgwZUeTArFfyglw0iJJXoby/+owf821
+oex/US9tVg1cPujXVfziCLB6MHZcqX+Qmx9jIv6Eo4gPppZj088LzgFGrnhc3W1R
+bFtlyNSFO47ORweSLTmhteANdiMdsjpU9ryE6Zoc3qUJ84WT0AYMKSPOMWaAhi7H
+WhTYRxxUkNEtAjCFR39pSQhBpP4XUWekmyrnmQJOwcWPnIISU8ah7D5MNkQRpgBD
+QOm8vI2ax4Q0Rd6cWZrbSwZ3V/7smfS6ofRg3DtxF+uoV7sVhqaWfBjQFNZSTcAs
+ZLrphYDT9xGxaNk7pMYVv9gxY0ymbBlgQZbfY4ozw5lLoBTZvNO+pLxUTHmPgMa4
+PasnssY=
+=jVcg
+-----END PGP PUBLIC KEY BLOCK-----
--- /dev/null
+.TH VOLINT 1 "April 2015" "volint" "astropy 1.0.2"
+.SH NAME
+volint \- Check a VOTable file for compliance to the VOTable specification
+.SH DESCRIPTION
+usage: volint [\-h] filename
+.SS "positional arguments:"
+.TP
+filename
+Path to VOTable file to check
+.SS "optional arguments:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+show this help message and exit
--- /dev/null
+version=3
+opts=uversionmangle=s/(rc|a|b|c)/~$1/;s/\.(post)/+$1/,pgpsigurlmangle=s/$/.asc/ \
+http://pypi.debian.net/astropy/astropy-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
--- /dev/null
+.TH WCSLINT 1 "April 2015" "wcslint" "astropy 1.0.2"
+.SH NAME
+wcslint \- Check the WCS keywords in a FITS file for compliance against the standards
+.SH DESCRIPTION
+usage: wcslint [\-h] filename
+.SS "positional arguments:"
+.TP
+filename
+Path to FITS file to check
+.SS "optional arguments:"
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+show this help message and exit