NCAS-CMS / NCAS-CMS/cf-python

`aggregate`: explicit feedback about un-aggregatable outcome

Open
#789 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

aggregation API review (4.0.0) enhancement
Dominant language
Python
Stars
150
Forks
23
Avg merge
1d 11h
Merged PRs (30d)
2

Description

(In our summit today) a user has conveyed that they would like to get explicit notification when a call to cf.aggregate doesn't aggregate the input any further, e.g for the case of h from the example below unless verbosity is set to at least level of 2/info there is nothing that indicates that the entire FieldList was not aggregatable further, i.e. aggregation didn't work, and even at level 2 you have to count the fields that are mentioned as being unaggregatable or check the length of the resultant FieldList to confirm this.

I agree that the above is not ideal since lack of combination of fields from the input could easily be seen as a 'failure' outcome and therefore to me merits at least a 3/warning level output, with a summary line to cover the whole FieldList result and not just each field individually as per the log output from 2.

Example
>>> import cf
>>> f = cf.example_fields()
>>> g = cf.aggregate(f)  # pre-aggregate down
>>> 
>>> len(g)
11
>>> h = cf.aggregate(g)  # won't aggregate further
>>> len(h)
11
>>> h = cf.aggregate(g, verbose=2)  # won't aggregate further
Unaggregatable 'air_temperature' has been output: <CF AuxiliaryCoordinate: long_name=Grid latitude name(10) > has no identity or no data
Unaggregatable 'precipitation_flux' has been output: <CF AuxiliaryCoordinate: cf_role=timeseries_id(4) > has no identity or no data
Unaggregatable 'air_temperature' has been output: <CF AuxiliaryCoordinate: cf_role=timeseries_id(3) > has no identity or no data
Unaggregatable 'precipitation_amount' has been output: <CF AuxiliaryCoordinate: cf_role=timeseries_id(2) > has no identity or no data
Unaggregatable 'mole_fraction_of_ozone_in_air' has been output: <CF AuxiliaryCoordinate: cf_role=trajectory_id(1) > has no identity or no data

My suggestion is, specifically, that h = cf.aggregate(g) # won't aggregate further will here report a line stating something along the lines of "FieldList was not aggregatable." and perhaps we can make the suggestion of (after the previous) "Try applying further keywords to relax the aggregation conditions if you wish to try to combine the fields further.".

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the cf.aggregate entry point and reproduce the example with cf.example_fields(), first checking the unchanged result and then verbose=2 output. Done should include an explicit summary when a FieldList is not further aggregatable, with guidance about relaxing aggregation conditions if appropriate, while retaining the existing per-field feedback.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
data
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.