Skip to content

Conversation

@delgadom
Copy link
Member

@delgadom delgadom commented Sep 19, 2019

  • closes #xxxx
  • tests added / passed
  • docs reflect changes
  • passes flake8 climate_toolbox tests docs
  • entry in HISTORY.rst

An attempt at creating a single standardized runner function. Intended to be paired with climate_transform_specs PR !5

Proposal

Include the full load, transformation, aggregation, and writing phases as argument to a main aggregation function. Different loaders and transformations should be able to handle all variants of transformations, including loading multiple variables, multiple outputs, etc.

In this proposal, a call would look like the following:

transform_and_weighted_aggregate_climate_data(
    climate_data_loader=load_and_standardize_climate_dataset_from_pattern,
    loader_kwargs={
            'pattern': READ_PATH,
            'source': 'GMFDv1',
            'read_variable': 'tas'},
    transform=tas_poly,
    extra_transform_kwargs=None,
    aggregator=weighted_aggregate_grid_to_regions,
    extra_aggregation_kwargs={
        'variable': 'tas',
        'agglev': 'hierid',
        'aggwt': 'popwt'},
    validate=validate_tas_poly}],
    extra_validation_kwargs={
        'valid_tas_range': (-20, 55),
        'assert_no_nans': True},
    writers=[
        atomic_netcdf_write_to_pattern,
        fgh_header_write_to_pattern]}],
    extra_writer_kwargs: [
        {'pattern': WRITE_FILE, 'ext': 'nc4'},
        {'pattern': WRITE_FILE, 'ext': 'fgh'}],
    assign_attrs_list=[
        'source',
        'variable',
        'agglev',
        'aggwt',
        'valid_tas_range',
        'year'],
    year=1980,
    variable='tas-poly-3',
    power=power,
)

In a parameterized format, this could look like the following:

from toolz import curry as prepackage_keyword_arguments

tas_poly_gmfd = prepackage_keyword_arguments(
    climate_toolbox.transform_and_weighted_aggregate_climate_data,
    climate_data_loader=load_and_standardize_climate_dataset_from_pattern,
    loader_kwargs={
            'pattern': READ_PATH,
            'source': 'GMFDv1',
            'read_variable': 'tas'},
    transform=tas_poly,
    extra_transform_kwargs=None,
    aggregator=weighted_aggregate_grid_to_regions,
    extra_aggregation_kwargs={
        'variable': 'tas',
        'agglev': 'hierid',
        'aggwt': 'popwt'},
    validate=validate_tas_poly}],
    extra_validation_kwargs={
        'valid_tas_range': (-20, 55),
        'assert_no_nans': True},
    writers=[
        atomic_netcdf_write_to_pattern,
        fgh_header_write_to_pattern]}],
    extra_writer_kwargs: [
        {'pattern': WRITE_FILE, 'ext': 'nc4'},
        {'pattern': WRITE_FILE, 'ext': 'fgh'}],
    assign_attrs_list=[
        'source',
        'variable',
        'agglev',
        'aggwt',
        'valid_tas_range',
        'year'])

PARAMETERIZED_KWARGS = [
    [{'year': y} for y in common.GMFD_v1.MODEL_YEARS],
    [{
            'variable': ('tas-poly-{}'.format(power) if power > 1 else 'tas'),
            'power': power}
        for power in range(1, 6)],
]

if __name__ == '__main__':
    slurm_runner(job_spec=(PARAMETERIZED_KWARGS))(tas_poly_gmfd)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants