[Debian-astro-maintainers] Bug#1074627: gammapy: tests fail with matplotlib 3.8

Drew Parsons dparsons at debian.org
Tue Jul 2 11:09:08 BST 2024


Source: gammapy
Version: 1.1-5
Severity: normal

gammapy is failing tests against matplotlib 3.8 from experimental

Possibly astropy is at fault rather than gammapy.


237s _____________________________ test_plot_at_energy ______________________________
237s 
237s self = <Quantity 1. 1 / (GeV s sr)>, unit = Unit(dimensionless)
237s equivalencies = []
237s 
237s     def to_value(self, unit=None, equivalencies=[]):
237s         """
237s         The numerical value, possibly in a different unit.
237s     
237s         Parameters
237s         ----------
237s         unit : unit-like, optional
237s             The unit in which the value should be given. If not given or `None`,
237s             use the current unit.
237s     
237s         equivalencies : list of tuple, optional
237s             A list of equivalence pairs to try if the units are not directly
237s             convertible (see :ref:`astropy:unit_equivalencies`). If not provided
237s             or ``[]``, class default equivalencies will be used (none for
237s             `~astropy.units.Quantity`, but may be set for subclasses).
237s             If `None`, no equivalencies will be applied at all, not even any
237s             set globally or within a context.
237s     
237s         Returns
237s         -------
237s         value : ndarray or scalar
237s             The value in the units specified. For arrays, this will be a view
237s             of the data if no unit conversion was necessary.
237s     
237s         See Also
237s         --------
237s         to : Get a new instance in a different unit.
237s         """
237s         if unit is None or unit is self.unit:
237s             value = self.view(np.ndarray)
237s         elif not self.dtype.names:
237s             # For non-structured, we attempt a short-cut, where we just get
237s             # the scale.  If that is 1, we do not have to do anything.
237s             unit = Unit(unit)
237s             # We want a view if the unit does not change.  One could check
237s             # with "==", but that calculates the scale that we need anyway.
237s             # TODO: would be better for `unit.to` to have an in-place flag.
237s             try:
237s >               scale = self.unit._to(unit)
237s 
237s /usr/lib/python3/dist-packages/astropy/units/quantity.py:987: 
237s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
237s 
237s self = Unit("1 / (GeV s sr)"), other = Unit(dimensionless)
237s 
237s     def _to(self, other):
237s         """
237s         Returns the scale to the specified unit.
237s     
237s         See `to`, except that a Unit object should be given (i.e., no
237s         string), and that all defaults are used, i.e., no
237s         equivalencies and value=1.
237s         """
237s         # There are many cases where we just want to ensure a Quantity is
237s         # of a particular unit, without checking whether it's already in
237s         # a particular unit.  If we're being asked to convert from a unit
237s         # to itself, we can short-circuit all of this.
237s         if self is other:
237s             return 1.0
237s     
237s         # Don't presume decomposition is possible; e.g.,
237s         # conversion to function units is through equivalencies.
237s         if isinstance(other, UnitBase):
237s             self_decomposed = self.decompose()
237s             other_decomposed = other.decompose()
237s     
237s             # Check quickly whether equivalent.  This is faster than
237s             # `is_equivalent`, because it doesn't generate the entire
237s             # physical type list of both units.  In other words it "fails
237s             # fast".
237s             if self_decomposed.powers == other_decomposed.powers and all(
237s                 self_base is other_base
237s                 for (self_base, other_base) in zip(
237s                     self_decomposed.bases, other_decomposed.bases
237s                 )
237s             ):
237s                 return self_decomposed.scale / other_decomposed.scale
237s     
237s >       raise UnitConversionError(f"'{self!r}' is not a scaled version of '{other!r}'")
237s E       astropy.units.core.UnitConversionError: 'Unit("1 / (GeV s sr)")' is not a scaled version of 'Unit(dimensionless)'
237s 
237s /usr/lib/python3/dist-packages/astropy/units/core.py:1160: UnitConversionError
237s 
237s During handling of the above exception, another exception occurred:
237s 
237s self = <Quantity 1. 1 / (GeV s sr)>
237s 
237s     def __float__(self):
237s         try:
237s >           return float(self.to_value(dimensionless_unscaled))
237s 
237s /usr/lib/python3/dist-packages/astropy/units/quantity.py:1355: 
237s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
237s /usr/lib/python3/dist-packages/astropy/units/quantity.py:990: in to_value
237s     value = self._to_value(unit, equivalencies)
237s /usr/lib/python3/dist-packages/astropy/units/quantity.py:896: in _to_value
237s     return self.unit.to(
237s /usr/lib/python3/dist-packages/astropy/units/core.py:1196: in to
237s     return self._get_converter(Unit(other), equivalencies)(value)
237s /usr/lib/python3/dist-packages/astropy/units/core.py:1125: in _get_converter
237s     raise exc
237s /usr/lib/python3/dist-packages/astropy/units/core.py:1108: in _get_converter
237s     return self._apply_equivalencies(
237s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
237s 
237s self = Unit("1 / (GeV s sr)"), unit = Unit("1 / (GeV s sr)")
237s other = Unit(dimensionless), equivalencies = []
237s 
237s     def _apply_equivalencies(self, unit, other, equivalencies):
237s         """
237s         Internal function (used from `_get_converter`) to apply
237s         equivalence pairs.
237s         """
237s     
237s         def make_converter(scale1, func, scale2):
237s             def convert(v):
237s                 return func(_condition_arg(v) / scale1) * scale2
237s     
237s             return convert
237s     
237s         for funit, tunit, a, b in equivalencies:
237s             if tunit is None:
237s                 ratio = other.decompose() / unit.decompose()
237s                 try:
237s                     ratio_in_funit = ratio.decompose([funit])
237s                     return make_converter(ratio_in_funit.scale, a, 1.0)
237s                 except UnitsError:
237s                     pass
237s             else:
237s                 try:
237s                     scale1 = funit._to(unit)
237s                     scale2 = tunit._to(other)
237s                     return make_converter(scale1, a, scale2)
237s                 except UnitsError:
237s                     pass
237s                 try:
237s                     scale1 = tunit._to(unit)
237s                     scale2 = funit._to(other)
237s                     return make_converter(scale1, b, scale2)
237s                 except UnitsError:
237s                     pass
237s     
237s         def get_err_str(unit):
237s             unit_str = unit.to_string("unscaled")
237s             physical_type = unit.physical_type
237s             if physical_type != "unknown":
237s                 unit_str = f"'{unit_str}' ({physical_type})"
237s             else:
237s                 unit_str = f"'{unit_str}'"
237s             return unit_str
237s     
237s         unit_str = get_err_str(unit)
237s         other_str = get_err_str(other)
237s     
237s >       raise UnitConversionError(f"{unit_str} and {other_str} are not convertible")
237s E       astropy.units.core.UnitConversionError: '1 / (GeV s sr)' and '' (dimensionless) are not convertible
237s 
237s /usr/lib/python3/dist-packages/astropy/units/core.py:1086: UnitConversionError
237s 
237s During handling of the above exception, another exception occurred:
237s 
237s bkg_3d = <gammapy.irf.background.Background3D object at 0x7f9d2c4f6240>
237s 
237s     def test_plot_at_energy(bkg_3d):
237s         with mpl_plot_check():
237s >           bkg_3d.plot_at_energy(energy=[5] * u.TeV)
237s 
237s /usr/lib/python3/dist-packages/gammapy/irf/tests/test_background.py:136: 
237s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
237s /usr/lib/python3/dist-packages/gammapy/irf/background.py:211: in plot_at_energy
237s     cbar = ax.figure.colorbar(caxes, ax=ax, label=label, fraction=cfraction)
237s /usr/lib/python3/dist-packages/matplotlib/figure.py:1310: in colorbar
237s     cb = cbar.Colorbar(cax, mappable, **{
237s /usr/lib/python3/dist-packages/matplotlib/colorbar.py:395: in __init__
237s     self._reset_locator_formatter_scale()
237s /usr/lib/python3/dist-packages/matplotlib/colorbar.py:1159: in _reset_locator_formatter_scale
237s     self._process_values()
237s /usr/lib/python3/dist-packages/matplotlib/colorbar.py:1093: in _process_values
237s     self.norm.vmin, self.norm.vmax = mtransforms.nonsingular(
237s /usr/lib/python3/dist-packages/matplotlib/transforms.py:2855: in nonsingular
237s     vmin, vmax = map(float, [vmin, vmax])
237s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
237s 
237s self = <Quantity 1. 1 / (GeV s sr)>
237s 
237s     def __float__(self):
237s         try:
237s             return float(self.to_value(dimensionless_unscaled))
237s         except (UnitsError, TypeError):
237s >           raise TypeError(
237s                 "only dimensionless scalar quantities can be "
237s                 "converted to Python scalars"
237s             )
237s E           TypeError: only dimensionless scalar quantities can be converted to Python scalars
237s 
237s /usr/lib/python3/dist-packages/astropy/units/quantity.py:1357: TypeError



More information about the Debian-astro-maintainers mailing list