def testSetValuesByTime(self): item = ExchangeItem('e1', 'Test', 'Test Exchange Item') # set start and end dates st = datetime.datetime(2014, 1, 1, 12, 0, 0) et = datetime.datetime(2014, 2, 1, 12, 0, 0) timestep_in_seconds = 3600 # build geometries x = [random.random() for i in range(0,150)] y = [random.random() for i in range(0,150)] geoms = geometry.build_point_geometries(x,y) item.addGeometries2(geoms) values = range(30) # set values for geometry=0, beginning at the start time success = item.setValuesBySlice(values, time_index_slice=(0,30,1), geometry_index_slice=(0, 1, 1)) self.assertFalse(success) # initialize the dates and values containers item.initializeDatesValues(st, et, timestep_in_seconds) success = item.setValuesBySlice(values, time_index_slice=(0,30,1), geometry_index_slice=(0, 1, 1)) self.assertTrue(success) # get the data geoms = item.getGeometries2() times = item.getDates2() vals = item.getValues2() # assert that data is set properly self.assertTrue(len(geoms) == 150) self.assertTrue(times[0][1] == st) self.assertTrue(times[-1][1] == et) self.assertTrue((times[-1][1] - times[-2][1]).total_seconds() == float(timestep_in_seconds)) self.assertTrue(vals.shape[0] == len(times)) self.assertTrue(vals.shape[1] == len(geoms))
def setUp(self): self.item = ExchangeItem('e1', 'Test', 'Test Exchange Item') # set start and end dates self.st = datetime.datetime(2014, 1, 1, 12, 0, 0) self.et = datetime.datetime(2014, 2, 1, 12, 0, 0) self.timestep_in_seconds = 3600 # build geometries x = [random.random() for i in range(0, 150)] y = [random.random() for i in range(0, 150)] geoms = geometry.build_point_geometries(x, y) self.item.addGeometries2(geoms) values = range(30) # initialize the dates and values containers self.item.initializeDatesValues(self.st, self.et, self.timestep_in_seconds) success = self.item.setValuesBySlice(values, time_index_slice=(0, 30, 1), geometry_index_slice=(0, 1, 1)) self.assertTrue(success)
def setUp(self): self.item = ExchangeItem('e1', 'Test', 'Test Exchange Item') # set start and end dates self.st = datetime.datetime(2014, 1, 1, 12, 0, 0) self.et = datetime.datetime(2014, 2, 1, 12, 0, 0) self.timestep_in_seconds = 3600 # build geometries x = [random.random() for i in range(0,150)] y = [random.random() for i in range(0,150)] geoms = geometry.build_point_geometries(x,y) self.item.addGeometries2(geoms) values = range(30) # initialize the dates and values containers self.item.initializeDatesValues(self.st, self.et, self.timestep_in_seconds) success = self.item.setValuesBySlice(values, time_index_slice=(0,30,1), geometry_index_slice=(0, 1, 1)) self.assertTrue(success)
def build_swmm_inputs_and_outputs(self, geoms): # define the model inputs and outputs outputs = { 'subcatchment': [ 'Groundwater_outflow', 'Wash_off_concentration', 'Groundwater_elevation', 'Runoff_rate' ], 'link': ['Flow_depth', 'Flow_rate', 'Flow_velocity'], 'node': [ 'Volume_stored_ponded', 'Lateral_inflow', 'Total_inflow', 'Depth_above_invert', 'Hydraulic_head', 'Flow_lost_flooding' ] } inputs = { 'subcatchment': ['Evaporation', 'Rainfall', 'Snow_depth'], 'link': ['Froude_number', 'Capacity'], 'node': [] } # get spatial reference system (use default if none is provided in config) srs = spatial.get_srs_from_epsg(code=None) if self.config_params.has_key('spatial'): if self.config_params['spatial'].has_key('srs'): srs = spatial.get_srs_from_epsg( self.config_params['spatial']['srs']) # build outputs output_items = [] for key, vars in outputs.iteritems(): for var_name in vars: # build variable and unit variable = mdl.create_variable(var_name) unit = mdl.create_unit(var_name) # build elementset geometries = geoms[key] elementset = [] for i, geom in geometries.iteritems(): dv = DataValues() elem = Geometry(geom=geom, id=i) elem.type(geom.geom_type) elem.srs(srs) elem.datavalues(dv) elementset.append(elem) id = uuid.uuid4().hex[:5] # create exchange item ei = ExchangeItem(id, name=variable.VariableNameCV(), desc=variable.VariableDefinition(), geometry=elementset, unit=unit, variable=variable, type=ExchangeItemType.Output) # save the output item output_items.append(ei) # build inputs input_items = [] for key, vars in inputs.iteritems(): for var_name in vars: # build variable and unit variable = mdl.create_variable(var_name) unit = mdl.create_unit(var_name) # build elementset id_inc = 0 geometries = geoms[key] elementset = [] for i, geom in geometries: dv = DataValues() elem = Geometry(geom=geom, id=id_inc) elem.type(geom.geom_type) elem.srs(srs) elem.datavalues(dv) elementset.append(elem) id_inc += 1 # create exchange item ei = ExchangeItem(id, name=variable.VariableNameCV(), desc=variable.VariableDefinition(), geometry=elementset, unit=unit, variable=variable, type=ExchangeItemType.Input) # save the output item input_items.append(ei) # set the input and output items self.outputs(value=output_items) self.inputs(value=input_items)
def build_swmm_inputs_and_outputs(self, geoms): # define the model inputs and outputs # outputs = {'subcatchment':['Groundwater_outflow','Wash_off_concentration','Groundwater_elevation','Runoff_rate'], # 'link' : ['Flow_depth','Flow_rate','Flow_velocity'], # 'node' : ['Volume_stored_ponded','Lateral_inflow','Total_inflow','Depth_above_invert','Hydraulic_head','Flow_lost_flooding'] # } # # inputs = {'subcatchment' : ['Evaporation','Rainfall','Snow_depth'], # 'link' : ['Froude_number','Capacity','Flow_rate','Flow_velocity'], # 'node' : ['Lateral_inflow','Hydraulic_head'] # } outputs = { 'link' : ['Flow_depth','Flow_rate'], 'node' : ['Hydraulic_head'] } inputs = {'subcatchment' : ['Rainfall'], 'link' : ['Flow_rate'], 'node' : ['Hydraulic_head'] } # get spatial reference system (use default if none is provided in config) srs = spatial.get_srs_from_epsg(code=None) if self.config_params.has_key('spatial'): if self.config_params['spatial'].has_key('srs'): srs = spatial.get_srs_from_epsg(self.config_params['spatial']['srs']) # build outputs output_items = [] for key, vars in outputs.iteritems(): for var_name in vars: # build variable and unit variable = mdl.create_variable(var_name) unit = mdl.create_unit(var_name) # build elementset geometries = geoms[key] elements = [] for i, v in geometries.iteritems(): # get the geometry object, multi-geometries g = v['geometry'][0] # save the geometry for lookup later self.__geom_lookup[i] = g elements.append(g) # create exchange item ei = ExchangeItem(id, name=variable.VariableNameCV(), desc=variable.VariableDefinition(), geometry=elements, unit= unit, variable=variable, type=ExchangeItemType.OUTPUT) # save the output item output_items.append(ei) # build inputs input_items = [] for key, vars in inputs.iteritems(): for var_name in vars: # build variable and unit variable = mdl.create_variable(var_name) unit = mdl.create_unit(var_name) # build elementset id_inc = 0 geometries = geoms[key] elements = [] for i, v in geometries.iteritems(): # get the geometry object, multi-geometries g = v['geometry'][0] # save the geometry for lookup later self.__geom_lookup[i] = g elements.append(g) # create exchange item ei = ExchangeItem(id, name=variable.VariableNameCV(), desc=variable.VariableDefinition(), geometry=elements, unit= unit, variable=variable, type=ExchangeItemType.INPUT) # save the output item input_items.append(ei) # set the input and output items self.outputs(value = output_items) self.inputs(value = input_items)
class testDates(unittest.TestCase): def setUp(self): self.item = ExchangeItem('e1', 'Test', 'Test Exchange Item') # set start and end dates self.st = datetime.datetime(2014, 1, 1, 12, 0, 0) self.et = datetime.datetime(2014, 2, 1, 12, 0, 0) self.timestep_in_seconds = 3600 # build geometries x = [random.random() for i in range(0,150)] y = [random.random() for i in range(0,150)] geoms = geometry.build_point_geometries(x,y) self.item.addGeometries2(geoms) values = range(30) # initialize the dates and values containers self.item.initializeDatesValues(self.st, self.et, self.timestep_in_seconds) success = self.item.setValuesBySlice(values, time_index_slice=(0,30,1), geometry_index_slice=(0, 1, 1)) self.assertTrue(success) def tearDown(self): pass def test_getDates(self): # get the dates that were created during setup dates = self.item.getDates() # calculate the number of values that should exist dt = (self.et - self.st).total_seconds() num = dt / self.timestep_in_seconds + 1 # assertions self.assertTrue(len(dates) == num) self.assertTrue(dates[0][1] == self.st) self.assertTrue(dates[-1][1] == self.et) def test_getNearestDates(self): # define a search time dt = self.st + datetime.timedelta(seconds=30) # test non-list nearest = self.item.getNearestDates(dt) self.assertTrue(nearest.shape == (0,)) # test single value, left nearest = self.item.getNearestDates([dt], 'left') self.assertTrue(nearest[0][0] == 0) # test single value, right nearest = self.item.getNearestDates([dt], 'right') self.assertTrue(nearest[0][0] == 0) # test value in between two times dt = self.st + datetime.timedelta(minutes=30) nearest = self.item.getNearestDates([dt], 'left') self.assertTrue(nearest[0][0] == 0) nearest = self.item.getNearestDates([dt], 'right') self.assertTrue(nearest[0][0] == 0) # test list of values dt = [self.st + datetime.timedelta(minutes=30), self.st + datetime.timedelta(minutes=45), self.st + datetime.timedelta(minutes=123), self.st + datetime.timedelta(minutes=145), self.st + datetime.timedelta(minutes=230)] nearest = self.item.getNearestDates(dt) self.assertTrue(nearest[0][0] == 0) self.assertTrue(nearest[1][0] == 1) self.assertTrue(nearest[2][0] == 2) self.assertTrue(nearest[3][0] == 2) self.assertTrue(nearest[4][0] == 4)
class testDates(unittest.TestCase): def setUp(self): self.item = ExchangeItem('e1', 'Test', 'Test Exchange Item') # set start and end dates self.st = datetime.datetime(2014, 1, 1, 12, 0, 0) self.et = datetime.datetime(2014, 2, 1, 12, 0, 0) self.timestep_in_seconds = 3600 # build geometries x = [random.random() for i in range(0, 150)] y = [random.random() for i in range(0, 150)] geoms = geometry.build_point_geometries(x, y) self.item.addGeometries2(geoms) values = range(30) # initialize the dates and values containers self.item.initializeDatesValues(self.st, self.et, self.timestep_in_seconds) success = self.item.setValuesBySlice(values, time_index_slice=(0, 30, 1), geometry_index_slice=(0, 1, 1)) self.assertTrue(success) def tearDown(self): pass def test_getDates(self): # get the dates that were created during setup dates = self.item.getDates() # calculate the number of values that should exist dt = (self.et - self.st).total_seconds() num = dt / self.timestep_in_seconds + 1 # assertions self.assertTrue(len(dates) == num) self.assertTrue(dates[0][1] == self.st) self.assertTrue(dates[-1][1] == self.et) def test_getNearestDates(self): # define a search time dt = self.st + datetime.timedelta(seconds=30) # test non-list nearest = self.item.getNearestDates(dt) self.assertTrue(nearest.shape == (0, )) # test single value, left nearest = self.item.getNearestDates([dt], 'left') self.assertTrue(nearest[0][0] == 0) # test single value, right nearest = self.item.getNearestDates([dt], 'right') self.assertTrue(nearest[0][0] == 0) # test value in between two times dt = self.st + datetime.timedelta(minutes=30) nearest = self.item.getNearestDates([dt], 'left') self.assertTrue(nearest[0][0] == 0) nearest = self.item.getNearestDates([dt], 'right') self.assertTrue(nearest[0][0] == 0) # test list of values dt = [ self.st + datetime.timedelta(minutes=30), self.st + datetime.timedelta(minutes=45), self.st + datetime.timedelta(minutes=123), self.st + datetime.timedelta(minutes=145), self.st + datetime.timedelta(minutes=230) ] nearest = self.item.getNearestDates(dt) self.assertTrue(nearest[0][0] == 0) self.assertTrue(nearest[1][0] == 1) self.assertTrue(nearest[2][0] == 2) self.assertTrue(nearest[3][0] == 2) self.assertTrue(nearest[4][0] == 4)
def testSetValuesByTime(self): item = ExchangeItem('e1', 'Test', 'Test Exchange Item') # set start and end dates st = datetime.datetime(2014, 1, 1, 12, 0, 0) et = datetime.datetime(2014, 2, 1, 12, 0, 0) timestep_in_seconds = 3600 # build geometries x = [random.random() for i in range(0, 150)] y = [random.random() for i in range(0, 150)] geoms = geometry.build_point_geometries(x, y) item.addGeometries2(geoms) values = range(30) # set values for geometry=0, beginning at the start time success = item.setValuesBySlice(values, time_index_slice=(0, 30, 1), geometry_index_slice=(0, 1, 1)) self.assertFalse(success) # initialize the dates and values containers item.initializeDatesValues(st, et, timestep_in_seconds) success = item.setValuesBySlice(values, time_index_slice=(0, 30, 1), geometry_index_slice=(0, 1, 1)) self.assertTrue(success) # get the data geoms = item.getGeometries2() times = item.getDates2() vals = item.getValues2() # assert that data is set properly self.assertTrue(len(geoms) == 150) self.assertTrue(times[0][1] == st) self.assertTrue(times[-1][1] == et) self.assertTrue( (times[-1][1] - times[-2][1]).total_seconds() == float(timestep_in_seconds)) self.assertTrue(vals.shape[0] == len(times)) self.assertTrue(vals.shape[1] == len(geoms))