Skip to content

WIP: Standardized runner func#30

Open
delgadom wants to merge 9 commits intomasterfrom
standardized_runner_func
Open

WIP: Standardized runner func#30
delgadom wants to merge 9 commits intomasterfrom
standardized_runner_func

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.

1 participant