예제 #1
0
    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))
예제 #2
0
    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)
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
    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))