Skip to content

aggregated_by/collapsed inconsistency for integer points #4455

Open
@rcomer

Description

@rcomer

🐛 Bug Report

Following on from #4315, #1528. When handling integer coordinates, collapsed and aggregated_by produce inconsistent points.

How To Reproduce

Minimal example:

import iris
import iris.cube
import iris.coords

import numpy as np

N = 6
cube = iris.cube.Cube(range(N), long_name="foo")
dim_coord = iris.coords.DimCoord(range(N), long_name="bar")
aux_coord = iris.coords.AuxCoord(np.arange(N) // 2, long_name="baz")

cube.add_dim_coord(dim_coord, 0)
cube.add_aux_coord(aux_coord, 0)

print(cube.aggregated_by("baz", iris.analysis.MEAN).coord("bar"))

# Emulate aggregated_by procedure with extract and collapsed.
for baz_val in np.unique(aux_coord.points):
    constraint = iris.Constraint(baz=baz_val)
    sub_cube = cube.extract(constraint)
    mean = sub_cube.collapsed("bar", iris.analysis.MEAN) 
    print(mean.coord("bar"))

"bar" coord after aggregated_by:

DimCoord(array([0.5, 2.5, 4.5]), bounds=array([[0, 1],
       [2, 3],
       [4, 5]]), standard_name=None, units=Unit('unknown'), long_name='bar')

"bar" coords after extract and collapse:

DimCoord(array([0]), bounds=array([[0, 1]]), standard_name=None, units=Unit('unknown'), long_name='bar')
DimCoord(array([2]), bounds=array([[2, 3]]), standard_name=None, units=Unit('unknown'), long_name='bar')
DimCoord(array([4]), bounds=array([[4, 5]]), standard_name=None, units=Unit('unknown'), long_name='bar')

Expected behaviour

The output points should either be 0, 2, 4 in both cases, or 0.5, 2.5, 4.5 in both cases. Note that @pp-mo at #1528 expected integer output points.

Environment

  • Iris Version: 3.2.dev0

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions