Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ Version NEXTVERSION

* Fix bug in `cf.read` that prevented some OPeNDAP URLS being read
(https://github.com/NCAS-CMS/cf-python/issues/948)
* Fix bug that caused weighted `cf.collapse` and `cf.weights` to fail
when a cell meausures has a size 1 axis
(https://github.com/NCAS-CMS/cf-python/issues/952)

----

Expand Down
2 changes: 1 addition & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ recursive-exclude cf/data *.rst
prune cf/test
recursive-include cf/test __init__.py test_*.py
recursive-include cf/test cfa_test.sh run_tests.py setup_create_field.py create_test_files*.py individual_tests.sh
recursive-include cf/test test_file.nc test_file[2-4].nc file.nc file[1-9].nc ugrid_global_1.nc ugrid_global_2.nc create_test_files.npz create_test_files_2.npz wgdos_packed.pp extra_data.pp file1.pp *.cdl create_test_files.npz create_test_files_2.npz example_field_0.nc
recursive-include cf/test test_file.nc test_file[2-4].nc file.nc file[1-9].nc ugrid_global_1.nc ugrid_global_2.nc create_test_files.npz create_test_files_2.npz wgdos_packed.pp extra_data.pp file1.pp *.cdl create_test_files.npz create_test_files_2.npz example_field_0.nc cell_measures.nc
recursive-include cf/test/example_field_0.zarr[23] *
include cf/test/example_field_0.kerchunk
prune cf/test/dir
Binary file added cf/test/cell_measures.nc
Binary file not shown.
28 changes: 28 additions & 0 deletions cf/test/test_collapse.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ def setUp(self):
self.filename2 = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "test_file2.nc"
)
self.cell_measures = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "cell_measures.nc"
)

def test_Field_collapse_CLIMATOLOGICAL_TIME(self):
verbose = False
Expand Down Expand Up @@ -853,6 +856,31 @@ def test_Field_collapse_HEALPix(self):
g1.coordinate_reference("grid_mapping_name:latitude_longitude")
)

def test_Field_cell_measures(self):
"""Test collapse weights by area and volume cell measures."""
f = cf.read(self.cell_measures)[0]
self.assertEqual(f.shape, (1, 5, 5, 5))
self.assertEqual(f.cell_measure("measure:area").shape, (5, 5))
self.assertEqual(f.cell_measure("measure:volume").shape, (1, 5, 5, 5))

f.collapse("area: mean", weights="area")
f.collapse("volume: mean", weights="volume")

self.assertEqual(f.weights("area").shape, (5, 5))
self.assertEqual(f.weights("volume").shape, (5, 5, 5))

g = f[..., 0]

self.assertEqual(g.shape, (1, 5, 5, 1))
self.assertEqual(g.cell_measure("measure:area").shape, (5, 1))
self.assertEqual(g.cell_measure("measure:volume").shape, (1, 5, 5, 1))

g.collapse("area: mean", weights="area")
g.collapse("volume: mean", weights="volume")

self.assertEqual(g.weights("area").shape, (5,))
self.assertEqual(g.weights("volume").shape, (5, 5))


if __name__ == "__main__":
print("Run date:", datetime.datetime.now())
Expand Down
6 changes: 3 additions & 3 deletions cf/weights.py
Original file line number Diff line number Diff line change
Expand Up @@ -1548,9 +1548,9 @@ def cell_measure(
)

clm = clm.get_data(_fill_value=False).copy()
if clm_axes != clm_axes0:
iaxes = [clm_axes0.index(axis) for axis in clm_axes]
clm.squeeze(iaxes, inplace=True)

# Squeeze out size 1 axes
clm.squeeze(inplace=True)

if methods:
weights[tuple(clm_axes)] = measure + " cell measure"
Expand Down
Loading