Skip to content

Commit

Permalink
cf.field.cell_methods bug fix
Browse files Browse the repository at this point in the history
  • Loading branch information
davidhassell committed May 30, 2024
1 parent 3a76bfc commit 5967991
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 0 deletions.
11 changes: 11 additions & 0 deletions Changelog.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
Version NEXTVERSION
-------------------

**2024-??-??**

* Fix bug that returned incorrect results when an invalid identifer is
provided to `cf.Field.cell_methods`
(https://github.com/NCAS-CMS/cfdm/issues/2699)

----

Version 1.11.1.0
----------------

Expand Down
19 changes: 19 additions & 0 deletions cfdm/field.py
Original file line number Diff line number Diff line change
Expand Up @@ -662,6 +662,18 @@ def cell_methods(self, *identities, **filter_kwargs):
**Examples**
>>> f = {{package}}.example_field(1)
>>> print(f.cell_methods())
Constructs:
{'cellmethod0': <CellMethod: domainaxis1: domainaxis2: mean where land (interval: 0.1 degrees)>,
'cellmethod1': <CellMethod: domainaxis3: maximum>}
>>> print(f.cell_methods('time'))
Constructs:
{'cellmethod1': <CellMethod: domainaxis3: maximum>}
>>> print(f.cell_methods('bad identifier'))
Constructs:
{}
"""
cached = filter_kwargs.get("cached")
if cached is not None:
Expand Down Expand Up @@ -702,6 +714,13 @@ def cell_methods(self, *identities, **filter_kwargs):
keys.add(cm_key)

identities = ()
if not keys:
# Specify a key of None to ensure that no cell methods
# are selected. (If keys is an empty set then all cell
# methods are selected, which is not what we want,
# here.)
keys = (None,)

filter_kwargs = {
"filter_by_key": keys,
"todict": filter_kwargs.pop("todict", False),
Expand Down
4 changes: 4 additions & 0 deletions cfdm/test/test_Field.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,10 @@ def test_Field_CONSTRUCTS(self):
for key, value in constructs.items():
self.assertIsInstance(value, cfdm.CellMethod)

# Check that no cell methods are returned when a bad
# identifier is provided
self.assertFalse(f.cell_methods("bad identifier"))

constructs = f.coordinate_references()
n = 2
self.assertEqual(len(constructs), n)
Expand Down

0 comments on commit 5967991

Please sign in to comment.