def run (self, building_dataset, year, storage, in_table="development_events_exogenous",
             out_table="development_events_exogenous"):

        if not storage.has_table(in_table):
            logger.log_status('No exogenous developments.')
            return
        
        scheduled_development_events = DevelopmentEventDataset(in_storage=storage, 
                                                     in_table_name=in_table, 
                                                     out_table_name=out_table,
                                                     id_name='event_id')
        scheduled_index = where(scheduled_development_events.get_attribute("scheduled_year")==year)[0]
        scheduled_development_events.subset_by_index(scheduled_index,flush_attributes_if_not_loaded=False)
        
        max_building_id = building_dataset.get_id_attribute().max()
        new_buildings = {}        
        new_buildings["building_id"] = max_building_id + arange(1, scheduled_index.size+1)
        attained_attributes = ['parcel_id', 'residential_units', 'building_sqft', 'non_residential_sqft','building_type_id', 'blklot']
        for attribute in attained_attributes:
            new_buildings[attribute] = scheduled_development_events.get_attribute(attribute)
        
        new_buildings['year_built'] = ones(scheduled_index.size) * year
        building_dataset.add_elements(new_buildings, require_all_attributes=False)

        return scheduled_development_events
    def run(self,
            building_dataset,
            year,
            storage,
            in_table="development_events_exogenous",
            out_table="development_events_exogenous"):

        if not storage.has_table(in_table):
            logger.log_status('No exogenous developments.')
            return

        scheduled_development_events = DevelopmentEventDataset(
            in_storage=storage,
            in_table_name=in_table,
            out_table_name=out_table,
            id_name='event_id')
        scheduled_index = where(
            scheduled_development_events.get_attribute("scheduled_year") ==
            year)[0]
        scheduled_development_events.subset_by_index(
            scheduled_index, flush_attributes_if_not_loaded=False)

        max_building_id = building_dataset.get_id_attribute().max()
        new_buildings = {}
        new_buildings["building_id"] = max_building_id + arange(
            1, scheduled_index.size + 1)
        attained_attributes = [
            'parcel_id', 'residential_units', 'building_sqft',
            'non_residential_sqft', 'building_type_id', 'blklot'
        ]
        for attribute in attained_attributes:
            new_buildings[
                attribute] = scheduled_development_events.get_attribute(
                    attribute)

        new_buildings['year_built'] = ones(scheduled_index.size) * year
        building_dataset.add_elements(new_buildings,
                                      require_all_attributes=False)

        return scheduled_development_events