Example #1
0
def test_output_graph_processing_splitfm_B():
    from awrams.utils import extents
    from awrams.utils import datetools as dt

    import awrams.models.awral.description
    awrams.models.awral.description.CLIMATE_DATA = os.path.join(
        os.path.dirname(__file__), '..', '..', 'test_data', 'simulation')

    from awrams.utils.nodegraph import nodes, graph
    from awrams.simulation.ondemand import OnDemandSimulator
    from awrams.models import awral

    input_map = awral.get_default_mapping()
    output_map = {
        's0_save':
        nodes.write_to_annual_ncfile(os.path.dirname(__file__), 's0', mode='w')
    }
    # outputs = graph.OutputGraph(output_map)
    runner = OnDemandSimulator(awral, input_map.mapping, omapping=output_map)

    print("RUNNER NEW (FILES EXISTING): multiple cells, multiple years")
    period = dt.dates('2010-2011')
    extent = extents.from_boundary_offset(200, 200, 201, 201)
    r = runner.run(period, extent)

    print("RUNNER OLD (FILES EXISTING): single cell, single year")
    period = dt.dates('2015')
    extent = extents.from_cell_offset(202, 202)
    r = runner.run(period, extent)
Example #2
0
def test_SplitFileWriterNode():
    from awrams.utils import extents
    from awrams.utils import datetools as dt

    import awrams.models.awral.description
    awrams.models.awral.description.CLIMATE_DATA = os.path.join(
        os.path.dirname(__file__), '..', '..', 'test_data', 'simulation')

    from awrams.utils.nodegraph import nodes
    from awrams.simulation.ondemand import OnDemandSimulator
    from awrams.models import awral

    input_map = awral.get_default_mapping()

    from awrams.utils.nodegraph import nodes
    from awrams.utils.metatypes import ObjectDict

    # output_path = './'
    mapping = {}
    mapping['qtot'] = nodes.write_to_annual_ncfile('./', 'qtot')

    output_map = ObjectDict(
        mapping=ObjectDict(mapping))  #,output_path=output_path)

    runner = OnDemandSimulator(awral,
                               input_map.mapping,
                               omapping=output_map.mapping)

    period = dt.dates('2010-2011')
    extent = extents.from_cell_offset(200, 200)
    r = runner.run(period, extent)
Example #3
0
def test_ondemand_region_v5():
    ### test region
    extent = extents.get_default_extent()
    extent = extent.icoords[-32:-34,115:118]
    from awrams.simulation.ondemand import OnDemandSimulator
    sim = OnDemandSimulator(awral,input_map,omapping=output_map)
    r = sim.run(period,extent)
Example #4
0
def test_ondemand_point():
    ### test point
    extent = extents.get_default_extent()
    extent = extent.icoords[-32.1,115.1]
    from awrams.simulation.ondemand import OnDemandSimulator
    sim = OnDemandSimulator(awral,input_map,omapping=output_map)
    r = sim.run(period,extent)
Example #5
0
def test_output_graph_processing_splitfm_B():
    from awrams.utils import extents
    from awrams.utils import datetools as dt

    e_all = extents.get_default_extent()

    from awrams.utils.nodegraph import nodes, graph
    from awrams.simulation.ondemand import OnDemandSimulator

    input_map = awral.get_default_mapping()
    climate_mod(input_map)
    output_map = awral.get_output_mapping()
    output_map['s0_save'] = nodes.write_to_annual_ncfile(
        os.path.dirname(__file__), 's0', mode='w')

    runner = OnDemandSimulator(awral, input_map, omapping=output_map)

    print("RUNNER NEW (FILES EXISTING): multiple cells, multiple years")
    period = dt.dates('2010-2011')
    extent = e_all.ioffset[200:202, 200:202]
    r = runner.run(period, extent)

    clear_files()

    print("RUNNER OLD (FILES EXISTING): single cell, single year")
    period = dt.dates('2015')
    extent = e_all.ioffset[202, 202]
    r = runner.run(period, extent)
def test_ondemand_point():
    from awrams.utils import extents
    from awrams.simulation.ondemand import OnDemandSimulator
    from awrams.models import awral
    ### test point
    extent = extents.from_cell_coords(-32.1, 115.1)
    sim = OnDemandSimulator(awral,
                            input_map.mapping,
                            omapping=output_map.mapping)
    r = sim.run(period, extent)
Example #7
0
def test_climatology_region():
    ### test region
    period = dt.dates('dec 2010')
    extent = extents.get_default_extent()
    extent = extent.icoords[-32:-35,115:118]

    from awrams.simulation.ondemand import OnDemandSimulator
    sim = OnDemandSimulator(awral,input_map)
    r,i = sim.run(period,extent,return_inputs=True)
    assert not np.isnan(i['solar_f']).any()
def test_ondemand_region():
    from awrams.utils import extents
    from awrams.simulation.ondemand import OnDemandSimulator
    from awrams.models import awral
    ### test region
    extent = extents.from_boundary_coords(-32, 115, -35, 118)
    sim = OnDemandSimulator(awral,
                            input_map.mapping,
                            omapping=output_map.mapping)
    r = sim.run(period, extent)
Example #9
0
def test_initial_states_point():
    import numpy as np

    from awrams.utils import extents
    from awrams.utils import datetools as dt

    from awrams.utils.nodegraph import nodes, graph
    from awrams.simulation.ondemand import OnDemandSimulator
    #from awrams.models import awral

    period = dt.dates('dec 2010')

    ### test a single cell
    extent = extents.get_default_extent()
    extent = extent.icoords[-30, 120.5]

    ### simulation with default initial states
    sim = OnDemandSimulator(awral, input_map)
    r, i = sim.run(period, extent, return_inputs=True)
    outputs_default = r['final_states']

    ### simulation with initial states read from nc files
    get_initial_states(input_map)
    sim = OnDemandSimulator(awral, input_map)
    r, i = sim.run(period, extent, return_inputs=True)
    outputs_init = r['final_states']

    ### compare final states with default states simulation
    ### should be different
    for k, o in outputs_init.items():
        assert not o == outputs_default[k]

    ### save initial states to compare
    ini_states = {}
    for k in i:
        try:
            if k.startswith('init'):
                ini_states[k] = i[k]
        except:
            pass

    ### simulation with initial states read from dict
    get_initial_states_dict(input_map, period, extent)
    sim = OnDemandSimulator(awral, input_map)
    r, i = sim.run(period, extent, return_inputs=True)
    outputs_init_dict = r['final_states']

    ### compare final states with other ini states simulation
    ### should be same
    for k, o in outputs_init_dict.items():
        assert o == outputs_init[k]

    ### compare initial states from both methods
    ### should be same
    for k in i:
        try:
            if k.startswith('init'):
                assert ini_states[k] == i[k]
        except:
            pass
Example #10
0
    def __init__(self, period, extent, observations):
        self.period = period
        self.extent = extent
        self.obs = observations

        self.evaluations = 0

        logger.info("initialising model simulator...")
        self.ods = OnDemandSimulator(MODEL, input_map.mapping)
        self.initial_results, self.inputs = self.ods.run(period,
                                                         extent,
                                                         return_inputs=True)
        logger.info("done")
        # print("XXXX",self.inputs)
        self.obj_fn = objective(self.obs[period])
Example #11
0
def test_ondemand_with_mask():
    # Make output map with daily frequency
    output_map['mleaf_hrudr_state'] = nodes.write_to_ncfile_snapshot(outpath,'mleaf_hrudr', freq='D')

    period = dt.dates('25 dec 2010', '26 dec 2010')
    from awrams.simulation.ondemand import OnDemandSimulator
    sim = OnDemandSimulator(awral, input_map, omapping=output_map)
    r = sim.run(period, extents.get_default_extent())

    # Grab a new copy of the default extent in case the simulator mutated it
    default_mask = extents.get_default_extent().mask

    # Check that the results are masked arrays, using the first results and the final states
    # as examples. Then check the masks are the default mask - masked arrays ensure that masked
    # values are not used in computations.
    assert all(type(r[key] == np.ma.core.MaskedArray) for key in r.keys())
    assert all(type(r['final_states'][key] == np.ma.core.MaskedArray) for key in r['final_states'].keys())
    assert all(np.array_equal(r[key].mask[0], default_mask) for key in r.keys() if key != 'final_states')
    assert all(np.array_equal(r['final_states'][key].mask, default_mask) for key in r['final_states'].keys())
Example #12
0
def test_output_graph_processing_splitfm_G():
    from awrams.utils import extents
    from awrams.utils import datetools as dt

    e_all = extents.get_default_extent()

    from awrams.utils.nodegraph import nodes,graph
    from awrams.simulation.ondemand import OnDemandSimulator


    print("RUNNER NEW: single cell ncf, multiple years")
    period = dt.dates('2010-2011')
    extent = e_all.ioffset[202,202]

    #input_map = awral.get_default_mapping()
    output_map = awral.get_output_mapping()
    output_map['s0_save'] = nodes.write_to_annual_ncfile(os.path.dirname(__file__),'s0')
    # outputs = graph.OutputGraph(output_map)
    runner = OnDemandSimulator(awral,input_map,omapping=output_map)
    r = runner.run(period,extent)
Example #13
0
def test_output_graph_processing_snapshotfm_A():
    from awrams.utils import extents
    from awrams.utils import datetools as dt

    e_all = extents.get_default_extent()

    from awrams.utils.nodegraph import nodes,graph
    from awrams.simulation.ondemand import OnDemandSimulator

    #input_map = awral.get_default_mapping()
    output_map = awral.get_output_mapping()
    output_map['s0_save'] = nodes.write_to_ncfile_snapshot(
                            os.path.dirname(__file__), 's0')

    runner = OnDemandSimulator(awral, input_map, omapping=output_map)

    print("RUNNER NEW: multiple cells, multiple years")
    period = dt.dates('2010-2011')
    extent = e_all.ioffset[200, 200:202]
    r = runner.run(period,extent)
Example #14
0
def test_SplitFileWriterNode():
    from awrams.utils import extents
    from awrams.utils import datetools as dt

    extent = extents.get_default_extent()

    from awrams.utils.nodegraph import nodes
    from awrams.simulation.ondemand import OnDemandSimulator

    input_map = awral.get_default_mapping()
    climate_mod(input_map)

    from awrams.utils.nodegraph import nodes
    from awrams.utils.metatypes import ObjectDict

    # output_path = './'
    output_map = awral.get_output_mapping()
    output_map['qtot_save'] = nodes.write_to_annual_ncfile('./', 'qtot')

    runner = OnDemandSimulator(awral, input_map, omapping=output_map)

    period = dt.dates('2010-2011')
    extent = extent.ioffset[200, 200:202]
    r = runner.run(period, extent)
Example #15
0
def test_OutputNode():
    import awrams.models.awral.description
    awrams.models.awral.description.CLIMATE_DATA = os.path.join(
        os.path.dirname(__file__), '..', '..', 'test_data', 'simulation')

    from awrams.simulation.ondemand import OnDemandSimulator
    from awrams.models import awral

    input_map = awral.get_default_mapping()
    output_map = awral.get_default_output_mapping()

    runner = OnDemandSimulator(awral,
                               input_map.mapping,
                               omapping=output_map.mapping)

    print(runner.outputs)
Example #16
0
def test_climatology_region():
    import numpy as np
    from awrams.utils import extents
    from awrams.utils import datetools as dt
    from awrams.simulation.ondemand import OnDemandSimulator
    #from awrams.models import awral

    ### test region
    period = dt.dates('dec 2010')
    extent = extents.get_default_extent()
    extent = extent.icoords[-32:-35, 115:118]

    sim = OnDemandSimulator(awral, input_map)  #,omapping=output_map.mapping)
    r, i = sim.run(period, extent, return_inputs=True)
    ### this should be true
    assert np.isnan(i['solar_f']).any()

    insert_climatology(input_map)
    sim = OnDemandSimulator(awral, input_map)  #,omapping=output_map.mapping)
    r, i = sim.run(period, extent, return_inputs=True)
    assert not np.isnan(i['solar_f']).any()
Example #17
0
def test_climatology_point():
    import numpy as np
    from awrams.utils import extents
    from awrams.utils import datetools as dt
    from awrams.simulation.ondemand import OnDemandSimulator
    from awrams.models import awral

    ### test point
    period = dt.dates('dec 2010')
    extent = extents.from_cell_coords(-30, 120.5)

    sim = OnDemandSimulator(awral,
                            input_map.mapping)  #,omapping=output_map.mapping)
    r, i = sim.run(period, extent, return_inputs=True)
    ### this should be true
    assert np.isnan(i['solar_f']).any()

    insert_climatology(input_map)
    sim = OnDemandSimulator(awral,
                            input_map.mapping)  #,omapping=output_map.mapping)
    r, i = sim.run(period, extent, return_inputs=True)
    assert not np.isnan(i['solar_f']).any()
Example #18
0
class RunoffEvaluator(Evaluator):
    '''
    compare qtot against gauging station data observations
    '''
    def __init__(self, period, extent, observations):
        self.period = period
        self.extent = extent
        self.obs = observations

        self.evaluations = 0

        logger.info("initialising model simulator...")
        self.ods = OnDemandSimulator(MODEL, input_map.mapping)
        self.initial_results, self.inputs = self.ods.run(period,
                                                         extent,
                                                         return_inputs=True)
        logger.info("done")
        # print("XXXX",self.inputs)
        self.obj_fn = objective(self.obs[period])

    def new(self):
        return self

    def run_sim(self, parameters):
        for k, v in parameters.iteritems():
            try:
                # self.ods.input_runner.input_graph[k]['exe'].value = v
                self.inputs[k] = v
            except KeyError:  ### ignore score column
                pass

        # return self.ods.run(self.period,self.extent)
        return self.ods.run_prepack(self.inputs, self.period, self.extent)

    def evaluate(self, parameters):
        self.evaluations += 1

        results = self.run_sim(parameters)
        qtot_results = results['qtot']

        ### mm_to cumecs is approximate, could be improved by using actual cell areas
        ### this would require osgeo.ogr etc
        catchment_qtot_mod = qtot_results.mean(axis=1) * mm_to_cumecs(
            qtot_results.shape[1])

        res = 1 - self.obj_fn(catchment_qtot_mod)
        return res

    def plot(self, results, period=None):
        if period is None:
            period = self.period

        cal_catchment_qtot = results['qtot'].mean(axis=1) * mm_to_cumecs(
            results['qtot'].shape[1])

        ax = pd.DataFrame(cal_catchment_qtot,
                          columns=['modelled'],
                          index=self.period).loc[period].plot(figsize=(18, 6),
                                                              legend=True)
        pd.DataFrame(self.obs[period].values,
                     columns=['observed'],
                     index=period).plot(legend=True, ax=ax)
Example #19
0
def test_initial_states_region():
    period = dt.dates('dec 2010')
    ### test a region
    extent = extents.get_default_extent()
    extent = extent.ioffset[400:408,170:178]
    print(extent)

    ### simulation with default initial states
    from awrams.simulation.ondemand import OnDemandSimulator
    sim = OnDemandSimulator(awral,input_map)
    r,i = sim.run(period,extent,return_inputs=True)
    outputs_default = r['final_states']

    ### simulation with initial states read from nc files
    get_initial_states(input_map)
    sim = OnDemandSimulator(awral,input_map)
    r,i = sim.run(period,extent,return_inputs=True)
    outputs_init = r['final_states']

    ### compare final states with default states simulation
    ### should be different
    for k,o in outputs_init.items():
        assert not (o == outputs_default[k]).any()

    ### save initial states to compare
    ini_states = {}
    for k in i:
        try:
            if k.startswith('init'):
                ini_states[k] = i[k]
        except:
            pass

    ### simulation with initial states read from dict
    get_initial_states_dict(input_map,period,extent)
    sim = OnDemandSimulator(awral,input_map)
    r,i = sim.run(period,extent,return_inputs=True)
    outputs_init_dict = r['final_states']

    ### compare final states with other ini states simulation
    ### should be same
    for k,o in outputs_init_dict.items():
        assert (o == outputs_init[k]).any()

    ### compare initial states from both methods
    ### should be same
    for k in i:
        try:
            if k.startswith('init'):
                assert ini_states[k] == i[k]
        except:
            pass

    ### simulation with initial states read from nc files
    get_initial_states(input_map)
    sim = OnDemandSimulator(awral,input_map)
    r,i = sim.run(period,extent,return_inputs=True)
    outputs_init = r['final_states']

    ### compare final states with other ini states simulation
    ### should be same
    for k,o in outputs_init_dict.items():
        assert (o == outputs_init[k]).any()

    ### compare initial states from both methods
    ### should be same
    for k in i:
        try:
            if k.startswith('init'):
                assert ini_states[k] == i[k]
        except:
            pass
Example #20
0
def test_initial_states_region():
    import numpy as np

    from awrams.utils import extents
    from awrams.utils import datetools as dt

    from awrams.utils.nodegraph import nodes, graph
    from awrams.simulation.ondemand import OnDemandSimulator
    from awrams.models import awral

    period = dt.dates('dec 2010')
    ### test a region
    extent = extents.from_boundary_offset(400, 170, 407, 177)
    print(extent)

    ### simulation with default initial states
    sim = OnDemandSimulator(awral, input_map.mapping)
    r, i = sim.run(period, extent, return_inputs=True)
    outputs_default = r['final_states']

    ### simulation with initial states read from nc files
    get_initial_states(input_map)
    sim = OnDemandSimulator(awral, input_map.mapping)
    r, i = sim.run(period, extent, return_inputs=True)
    outputs_init = r['final_states']

    ### compare final states with default states simulation
    ### should be different
    for k, o in outputs_init.items():
        assert not (o == outputs_default[k]).any()

    ### save initial states to compare
    ini_states = {}
    for k in i:
        try:
            if k.startswith('init'):
                ini_states[k] = i[k]
        except:
            pass

    ### simulation with initial states read from dict
    get_initial_states_dict(input_map, period, extent)
    sim = OnDemandSimulator(awral, input_map.mapping)
    r, i = sim.run(period, extent, return_inputs=True)
    outputs_init_dict = r['final_states']

    ### compare final states with other ini states simulation
    ### should be same
    for k, o in outputs_init_dict.items():
        assert (o == outputs_init[k]).any()

    ### compare initial states from both methods
    ### should be same
    for k in i:
        try:
            if k.startswith('init'):
                assert ini_states[k] == i[k]
        except:
            pass

    extent = extents.from_boundary_coords(-30, 120.5, -30.35, 120.85)
    print(extent)

    ### simulation with initial states read from nc files
    get_initial_states(input_map)
    sim = OnDemandSimulator(awral, input_map.mapping)
    r, i = sim.run(period, extent, return_inputs=True)
    outputs_init = r['final_states']

    ### compare final states with other ini states simulation
    ### should be same
    for k, o in outputs_init_dict.items():
        assert (o == outputs_init[k]).any()

    ### compare initial states from both methods
    ### should be same
    for k in i:
        try:
            if k.startswith('init'):
                assert ini_states[k] == i[k]
        except:
            pass
Example #21
0
from awrams.utils import extents
import numpy as np
from awrams.utils.nodegraph import nodes, graph
from awrams.simulation.ondemand import OnDemandSimulator

full_extent = extents.get_default_extent()

period = dt.dates('dec 2010 - jan 2011')
extent = full_extent.ioffset[200:250, 200:250]

from awrams.models.awral import model

m = model.AWRALModel()
imap = m.get_default_mapping()

ods = OnDemandSimulator(m, imap)

print("running...")
res = ods.run(period, extent)

from awrams.utils.io.data_mapping import SplitFileManager

print("opening comparison results")

sfm = SplitFileManager.open_existing('./test_sim_outputs', 'qtot*', 'qtot')

qtot = sfm.get_data(period, extent)

max_diff = np.max(np.abs(res['qtot'] - qtot))
print(max_diff)
assert (max_diff < 1e-5)