[Debian-astro-maintainers] Bug#1137044: astropy: FTBFS in bookworm

Santiago Vila sanvila at debian.org
Tue May 19 00:19:06 BST 2026


Package: src:astropy
Version: 5.2.1-2
Severity: serious
Control: fixed -1 7.0.1-3
Tags: ftbfs bookworm

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])
>           warnings.warn('ERFA function "{}" yielded {}'.format(func_name, wmsg),
                          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()
>       self.t = Time.now() + TimeDelta(10, format="jd") * np.arange(self.N)

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])
>           warnings.warn('ERFA function "{}" yielded {}'.format(func_name, wmsg),
                          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()
>       self.t = Time.now() + TimeDelta(10, format="jd") * np.arange(self.N)

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])
>           warnings.warn('ERFA function "{}" yielded {}'.format(func_name, wmsg),
                          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()
>       self.t = Time.now() + TimeDelta(10, format="jd") * np.arange(self.N)

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])
>           warnings.warn('ERFA function "{}" yielded {}'.format(func_name, wmsg),
                          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
--------------------------------------------------------------------------------



More information about the Debian-astro-maintainers mailing list