#1137044 astropy: FTBFS in bookworm

#1137044#5
Date:
2026-05-18 23:19:06 UTC
From:
To:
Dear maintainer:

During a rebuild of all packages in bookworm, this package failed to build.

[ Note: The bug is marked as fixed with the version in trixie/forky/sid, but
  packages in bookworm must still build in bookworm ].

Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:

https://people.debian.org/~sanvila/build-logs/bookworm/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you cannot reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:astropy, so that this is still
visible in the BTS web page for this package.

Thanks.
--------------------------------------------------------------------------------
[...]
 debian/rules clean
dh clean --with python3,sphinxdoc --buildsystem=pybuild
   debian/rules override_dh_auto_clean
make[1]: Entering directory '/<<PKGBUILDDIR>>'
dh_auto_clean
I: pybuild base:240: python3.11 setup.py clean
running clean
removing '/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build' (and everything under it)
'build/bdist.linux-x86_64' does not exist -- can't clean it
'build/scripts-3.11' does not exist -- can't clean it
rm -rf build astropy.egg-info

[... snipped ...]

    
            wmsg = ', '.join(['{0} of "{1}"'.format(warncounts[w], warnmsgs[w])
                              for w in warncodes])
                          ErfaWarning)
E           erfa.core.ErfaWarning: ERFA function "taiutc" yielded 17 of "dubious year (Note 4)"

/usr/lib/python3/dist-packages/erfa/core.py:154: ErfaWarning
____________ ERROR at setup of TestIERS_Auto.test_auto_max_age_none ____________

self = <class 'astropy.utils.iers.tests.test_iers.TestIERS_Auto'>

    def setup_class(self):
        """Set up useful data for the tests."""
        self.N = 40
        self.ame = 30.0
        self.iers_a_file_1 = get_pkg_data_filename(
            os.path.join("data", "finals2000A-2016-02-30-test")
        )
        self.iers_a_file_2 = get_pkg_data_filename(
            os.path.join("data", "finals2000A-2016-04-30-test")
        )
        self.iers_a_url_1 = Path(self.iers_a_file_1).as_uri()
        self.iers_a_url_2 = Path(self.iers_a_file_2).as_uri()

astropy/utils/iers/tests/test_iers.py:227:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
astropy/time/core.py:2613: in __add__
    out._set_scale(self.scale)
astropy/time/core.py:776: in _set_scale
    jd1, jd2 = conv_func(*args)
/usr/lib/python3/dist-packages/erfa/core.py:16911: in taiutc
    check_errwarn(c_retval, 'taiutc')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

statcodes = array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)
func_name = 'taiutc'

    def check_errwarn(statcodes, func_name):
        if not numpy.any(statcodes):
            return
        # Remap any errors into warnings in the STATUS_CODES_REMAP dict.
        if func_name in STATUS_CODES_REMAP:
            for before, after in STATUS_CODES_REMAP[func_name].items():
                statcodes[statcodes == before] = after
                STATUS_CODES[func_name][after] = STATUS_CODES[func_name][before]
    
        if numpy.any(statcodes < 0):
            # Errors present - only report the errors.
            if statcodes.shape:
                statcodes = statcodes[statcodes < 0]
    
            errcodes = numpy.unique(statcodes)
    
            errcounts = dict([(e, numpy.sum(statcodes == e)) for e in errcodes])
    
            elsemsg = STATUS_CODES[func_name].get('else', None)
            if elsemsg is None:
                errmsgs = dict([(e, STATUS_CODES[func_name].get(
                    e, 'Return code ' + str(e))) for e in errcodes])
            else:
                errmsgs = dict([(e, STATUS_CODES[func_name].get(
                    e, elsemsg)) for e in errcodes])
    
            emsg = ', '.join(['{0} of "{1}"'.format(errcounts[e], errmsgs[e])
                              for e in errcodes])
            raise ErfaError('ERFA function "{}" yielded {}'
                            .format(func_name, emsg))
    
        elif numpy.any(statcodes > 0):
            # Only warnings present.
            if statcodes.shape:
                statcodes = statcodes[statcodes > 0]
    
            warncodes = numpy.unique(statcodes)
    
            warncounts = dict([(w, numpy.sum(statcodes == w)) for w in warncodes])
    
            elsemsg = STATUS_CODES[func_name].get('else', None)
            if elsemsg is None:
                warnmsgs = dict([(w, STATUS_CODES[func_name].get(
                    w, 'Return code ' + str(w))) for w in warncodes])
            else:
                warnmsgs = dict([(w, STATUS_CODES[func_name].get(
                    w, elsemsg)) for w in warncodes])
    
            wmsg = ', '.join(['{0} of "{1}"'.format(warncounts[w], warnmsgs[w])
                              for w in warncodes])
                          ErfaWarning)
E           erfa.core.ErfaWarning: ERFA function "taiutc" yielded 17 of "dubious year (Note 4)"

/usr/lib/python3/dist-packages/erfa/core.py:154: ErfaWarning
__________ ERROR at setup of TestIERS_Auto.test_auto_max_age_minimum ___________

self = <class 'astropy.utils.iers.tests.test_iers.TestIERS_Auto'>

    def setup_class(self):
        """Set up useful data for the tests."""
        self.N = 40
        self.ame = 30.0
        self.iers_a_file_1 = get_pkg_data_filename(
            os.path.join("data", "finals2000A-2016-02-30-test")
        )
        self.iers_a_file_2 = get_pkg_data_filename(
            os.path.join("data", "finals2000A-2016-04-30-test")
        )
        self.iers_a_url_1 = Path(self.iers_a_file_1).as_uri()
        self.iers_a_url_2 = Path(self.iers_a_file_2).as_uri()

astropy/utils/iers/tests/test_iers.py:227:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
astropy/time/core.py:2613: in __add__
    out._set_scale(self.scale)
astropy/time/core.py:776: in _set_scale
    jd1, jd2 = conv_func(*args)
/usr/lib/python3/dist-packages/erfa/core.py:16911: in taiutc
    check_errwarn(c_retval, 'taiutc')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

statcodes = array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)
func_name = 'taiutc'

    def check_errwarn(statcodes, func_name):
        if not numpy.any(statcodes):
            return
        # Remap any errors into warnings in the STATUS_CODES_REMAP dict.
        if func_name in STATUS_CODES_REMAP:
            for before, after in STATUS_CODES_REMAP[func_name].items():
                statcodes[statcodes == before] = after
                STATUS_CODES[func_name][after] = STATUS_CODES[func_name][before]
    
        if numpy.any(statcodes < 0):
            # Errors present - only report the errors.
            if statcodes.shape:
                statcodes = statcodes[statcodes < 0]
    
            errcodes = numpy.unique(statcodes)
    
            errcounts = dict([(e, numpy.sum(statcodes == e)) for e in errcodes])
    
            elsemsg = STATUS_CODES[func_name].get('else', None)
            if elsemsg is None:
                errmsgs = dict([(e, STATUS_CODES[func_name].get(
                    e, 'Return code ' + str(e))) for e in errcodes])
            else:
                errmsgs = dict([(e, STATUS_CODES[func_name].get(
                    e, elsemsg)) for e in errcodes])
    
            emsg = ', '.join(['{0} of "{1}"'.format(errcounts[e], errmsgs[e])
                              for e in errcodes])
            raise ErfaError('ERFA function "{}" yielded {}'
                            .format(func_name, emsg))
    
        elif numpy.any(statcodes > 0):
            # Only warnings present.
            if statcodes.shape:
                statcodes = statcodes[statcodes > 0]
    
            warncodes = numpy.unique(statcodes)
    
            warncounts = dict([(w, numpy.sum(statcodes == w)) for w in warncodes])
    
            elsemsg = STATUS_CODES[func_name].get('else', None)
            if elsemsg is None:
                warnmsgs = dict([(w, STATUS_CODES[func_name].get(
                    w, 'Return code ' + str(w))) for w in warncodes])
            else:
                warnmsgs = dict([(w, STATUS_CODES[func_name].get(
                    w, elsemsg)) for w in warncodes])
    
            wmsg = ', '.join(['{0} of "{1}"'.format(warncounts[w], warnmsgs[w])
                              for w in warncodes])
                          ErfaWarning)
E           erfa.core.ErfaWarning: ERFA function "taiutc" yielded 17 of "dubious year (Note 4)"

/usr/lib/python3/dist-packages/erfa/core.py:154: ErfaWarning
____________ ERROR at setup of TestIERS_Auto.test_no_auto_download _____________

self = <class 'astropy.utils.iers.tests.test_iers.TestIERS_Auto'>

    def setup_class(self):
        """Set up useful data for the tests."""
        self.N = 40
        self.ame = 30.0
        self.iers_a_file_1 = get_pkg_data_filename(
            os.path.join("data", "finals2000A-2016-02-30-test")
        )
        self.iers_a_file_2 = get_pkg_data_filename(
            os.path.join("data", "finals2000A-2016-04-30-test")
        )
        self.iers_a_url_1 = Path(self.iers_a_file_1).as_uri()
        self.iers_a_url_2 = Path(self.iers_a_file_2).as_uri()

astropy/utils/iers/tests/test_iers.py:227:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
astropy/time/core.py:2613: in __add__
    out._set_scale(self.scale)
astropy/time/core.py:776: in _set_scale
    jd1, jd2 = conv_func(*args)
/usr/lib/python3/dist-packages/erfa/core.py:16911: in taiutc
    check_errwarn(c_retval, 'taiutc')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

statcodes = array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)
func_name = 'taiutc'

    def check_errwarn(statcodes, func_name):
        if not numpy.any(statcodes):
            return
        # Remap any errors into warnings in the STATUS_CODES_REMAP dict.
        if func_name in STATUS_CODES_REMAP:
            for before, after in STATUS_CODES_REMAP[func_name].items():
                statcodes[statcodes == before] = after
                STATUS_CODES[func_name][after] = STATUS_CODES[func_name][before]
    
        if numpy.any(statcodes < 0):
            # Errors present - only report the errors.
            if statcodes.shape:
                statcodes = statcodes[statcodes < 0]
    
            errcodes = numpy.unique(statcodes)
    
            errcounts = dict([(e, numpy.sum(statcodes == e)) for e in errcodes])
    
            elsemsg = STATUS_CODES[func_name].get('else', None)
            if elsemsg is None:
                errmsgs = dict([(e, STATUS_CODES[func_name].get(
                    e, 'Return code ' + str(e))) for e in errcodes])
            else:
                errmsgs = dict([(e, STATUS_CODES[func_name].get(
                    e, elsemsg)) for e in errcodes])
    
            emsg = ', '.join(['{0} of "{1}"'.format(errcounts[e], errmsgs[e])
                              for e in errcodes])
            raise ErfaError('ERFA function "{}" yielded {}'
                            .format(func_name, emsg))
    
        elif numpy.any(statcodes > 0):
            # Only warnings present.
            if statcodes.shape:
                statcodes = statcodes[statcodes > 0]
    
            warncodes = numpy.unique(statcodes)
    
            warncounts = dict([(w, numpy.sum(statcodes == w)) for w in warncodes])
    
            elsemsg = STATUS_CODES[func_name].get('else', None)
            if elsemsg is None:
                warnmsgs = dict([(w, STATUS_CODES[func_name].get(
                    w, 'Return code ' + str(w))) for w in warncodes])
            else:
                warnmsgs = dict([(w, STATUS_CODES[func_name].get(
                    w, elsemsg)) for w in warncodes])
    
            wmsg = ', '.join(['{0} of "{1}"'.format(warncounts[w], warnmsgs[w])
                              for w in warncodes])
                          ErfaWarning)
E           erfa.core.ErfaWarning: ERFA function "taiutc" yielded 17 of "dubious year (Note 4)"

/usr/lib/python3/dist-packages/erfa/core.py:154: ErfaWarning
=========================== short test summary info ============================
ERROR astropy/utils/iers/tests/test_iers.py::TestIERS_Auto::test_interpolate_error_formatting - erfa.core.ErfaWarning: ERFA function "taiutc" yielded 17 of "dubious year (...
ERROR astropy/utils/iers/tests/test_iers.py::TestIERS_Auto::test_auto_max_age_none - erfa.core.ErfaWarning: ERFA function "taiutc" yielded 17 of "dubious year (...
ERROR astropy/utils/iers/tests/test_iers.py::TestIERS_Auto::test_auto_max_age_minimum - erfa.core.ErfaWarning: ERFA function "taiutc" yielded 17 of "dubious year (...
ERROR astropy/utils/iers/tests/test_iers.py::TestIERS_Auto::test_no_auto_download - erfa.core.ErfaWarning: ERFA function "taiutc" yielded 17 of "dubious year (...
= 23322 passed, 588 skipped, 67 deselected, 117 xfailed, 192 xpassed, 4 errors in 166.44s (0:02:46) =
E: pybuild pybuild:388: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11/build; python3.11 -m pytest --astropy-header -m "not hypothesis"
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13
make[1]: *** [debian/rules:54: override_dh_auto_test] Error 25
make[1]: Leaving directory '/<<PKGBUILDDIR>>'
make: *** [debian/rules:28: binary] Error 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
--------------------------------------------------------------------------------

#1137044#10
Date:
2026-05-21 14:53:09 UTC
From:
To:
Hello,

Bug #1137044 in astropy reported by you has been fixed in the
Git repository and is awaiting an upload. You can see the commit
message below and you can check the diff of the fix at:

https://salsa.debian.org/debian-astro-team/astropy/-/commit/3a2d9d8eb4f7852b5147e17beb808e46daac3d21
------------------------------------------------------------------------
Ignore IERS warnings in tests

This fixes the FTBFS on bookworm.

Closes: #1137044
------------------------------------------------------------------------

(this message was generated automatically)
-- 
Greetings

https://bugs.debian.org/1137044

#1137044#17
Date:
2026-05-23 13:47:18 UTC
From:
To:
We believe that the bug you reported is fixed in the latest version of
astropy, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1137044@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Ole Streicher <olebole@debian.org> (supplier of updated astropy package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
Format: 1.8
Date: Thu, 21 May 2026 16:29:29 +0200
Source: astropy
Architecture: source
Version: 5.2.1-2+deb12u1
Distribution: bookworm
Urgency: medium
Maintainer: Debian Astronomy Maintainers <debian-astro-maintainers@lists.alioth.debian.org>
Changed-By: Ole Streicher <olebole@debian.org>
Closes: 1137044
Changes:
 astropy (5.2.1-2+deb12u1) bookworm; urgency=medium
 .
   * Ignore IERS warnings in tests (Closes: #1137044)
Checksums-Sha1:
 3fa8e38c0604258379844d5a9622b90b4501843e 3112 astropy_5.2.1-2+deb12u1.dsc
 f6dbfe8d094f0842a26c9e8dcca098869bdabf25 26144 astropy_5.2.1-2+deb12u1.debian.tar.xz
Checksums-Sha256:
 2b4212c92b3bcef0403570de006747a7ee2135d71feac3c3e74f96b3b32ee9b7 3112 astropy_5.2.1-2+deb12u1.dsc
 f92ed05474197336f5ab79cfb2d8a5a965a85c65eb0252047a25c88cc454619c 26144 astropy_5.2.1-2+deb12u1.debian.tar.xz
Files:
 632a9153ad75d523acb513f6ddd4b504 3112 python optional astropy_5.2.1-2+deb12u1.dsc
 7abc1f915895be9fc26e8e8b3b9bd9bd 26144 python optional astropy_5.2.1-2+deb12u1.debian.tar.xz
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEuvxshffLFD/utvsVcRWv0HcQ3PcFAmoRmC0ACgkQcRWv0HcQ
3Pcp4RAAipiVLpGXhuQHqOVVQmsiFfrft02ASAv0fw4jxjEDl1Hah916Lqqh5XIA
XPJTZ33EC8aZ834saEaMkc5MU2IrUDPwECaBw06vy69nvgaTZFFfR8FhoEkUEDLE
cyxntF752ZSisoqnBDEuis4JnNhiaPpAjc9BspdC18KjqnMYkliQf2kLqRcIDfii
2m32G1MyqExiMefxuS8iqhw5G8jQ3/GMxbYqbswMITZlFnEoZup6yLMY/nXBFEbM
1F1/wVrnDWeAjarg0WQVaeTadr40LuChzUCViivk5qQyRnUgHog/pltwWdxe4Lw3
o+SkJdUVu3aWA+gSr5YcPXL+yr+VzaREzTF1xdKgbtnpHwu1NOaPjdMqeBzjwK47
VVixRWl1c3Pf/2tkJy0gOwiofkE/MjEuiGUrvm82qr1xLTLFsCHd6rgNtk2ZZkk6
0PqX8BqO9HdAJWqLcf2A48uf3+zM1A9wItZY0lR3cuuDEC4IFAJ/FJPkwf/te/Wv
FyGXTBNd7R/KAr1R/4jTIhFLVKdMCv0OZWInr2RGaMaHWVj99A2W0/Z42iD/Gbzi
dv0SzBy99WN48A4RZhhG4PUGndHKLa1ZAyHU9XerGvRhoCB5/GAsoxNrM+E2d0+1
ImC7tgyOxtZRfDmS8GYeIBvr1WSCyU2Zyjhvp3u2i13ByS/5ZDA=
=7KDn
-----END PGP SIGNATURE-----