def read_narrative_data(self, narrative_name): """Read narrative data file Arguments --------- narrative_name: str Name of the narrative Returns ------- list A list with dictionaries containing the contents of 'narrative_name' data file """ # Find filename for this narrative filename = None project_config = self._read_project_config() for narrative in project_config['narratives']: if narrative['name'] == narrative_name: filename = narrative['filename'] break if filename is None: raise DataNotFoundError( 'Narrative \'{}\' has no data defined'.format(narrative_name)) # Read the narrative data from file try: narrative_data = load(os.path.join(self.file_dir['narratives'], filename)) except FileNotFoundError: raise DataNotFoundError( 'Narrative \'{}\' has no data defined'.format(narrative_name)) return narrative_data
def read_region_definition_data(self, region_definition_name): """Read region_definition data file into a Fiona feature collection The file format must be possible to parse with GDAL, and must contain an attribute "name" to use as an identifier for the region_definition. Arguments --------- region_definition_name: str Name of the region_definition Returns ------- list A list of data from the specified file in a fiona formatted dict """ # Find filename for this region_definition_name region_definitions = self.read_region_definitions() try: filename = next( rdef['filename'] for rdef in region_definitions if rdef['name'] == region_definition_name ) except StopIteration: raise DataNotFoundError( "Region definition '{}' not found".format(region_definition_name)) # Read the region data from file filepath = os.path.join(self.file_dir['region_definitions'], filename) with fiona.drivers(): with fiona.open(filepath) as src: data = [f for f in src] return data
def delete_sector_model(self, sector_model_name): """Delete a sector model Arguments --------- sector_model_name: str A sector_model name """ if not self._sector_model_exists(sector_model_name): raise DataNotFoundError("sector_model '%s' not found" % sector_model_name) os.remove(os.path.join(self.file_dir['sector_models'], sector_model_name + '.yml'))
def delete_sos_model(self, sos_model_name): """Delete a system-of-system model run Arguments --------- sos_model_name: str A sos_model name """ if not self._sos_model_exists(sos_model_name): raise DataNotFoundError("sos_model '%s' not found" % sos_model_name) os.remove(os.path.join(self.file_dir['sos_models'], sos_model_name + '.yml'))
def read_sos_model_run(self, sos_model_run_name): """Read a system-of-system model run Arguments --------- sos_model_run_name: str A sos_model_run name Returns ------- sos_model_run: dict A sos_model_run dictionary """ if not self._sos_model_run_exists(sos_model_run_name): raise DataNotFoundError("sos_model_run '%s' not found" % sos_model_run_name) return self._read_yaml_file(self.file_dir['sos_model_runs'], sos_model_run_name)
def read_sector_model(self, sector_model_name): """Read a sector model Arguments --------- sector_model_name: str A sector_model name Returns ------- sector_model: dict A sector_model dictionary """ if not self._sector_model_exists(sector_model_name): raise DataNotFoundError("sector_model '%s' not found" % sector_model_name) return self._read_yaml_file(self.file_dir['sector_models'], sector_model_name)
def read_sos_model(self, sos_model_name): """Read a specific system-of-system model Arguments --------- sos_model_name: str A sos_model name Returns ------- sos_model: dict A sos_model dictionary """ if not self._sos_model_exists(sos_model_name): raise DataNotFoundError("sos_model '%s' not found" % sos_model_name) return self._read_yaml_file(self.file_dir['sos_models'], sos_model_name)
def read_scenario_data(self, scenario_name, parameter_name, spatial_resolution, temporal_resolution, timestep): """Read scenario data file Arguments --------- scenario_name: str Name of the scenario parameter_name: str Name of the scenario parameter to read spatial_resolution : str temporal_resolution : str timestep: int Returns ------- data: numpy.ndarray """ # Find filenames for this scenario filename = None project_config = self._read_project_config() for scenario_data in project_config['scenarios']: if scenario_data['name'] == scenario_name: for param in scenario_data['parameters']: if param['name'] == parameter_name: filename = param['filename'] break break if filename is None: raise DataNotFoundError( "Scenario '{}' with parameter '{}' not found".format( scenario_name, parameter_name)) # Read the scenario data from file filepath = os.path.join(self.file_dir['scenarios'], filename) data = [ datum for datum in self._get_data_from_csv(filepath) if int(datum['year']) == timestep ] region_names = self._read_region_names(spatial_resolution) interval_names = self._read_interval_names(temporal_resolution) return self.data_list_to_ndarray(data, region_names, interval_names)
def read_narrative(self, narrative_name): """Read all narratives from a certain narrative Arguments --------- narrative_name: str Name of the narrative Returns ------- list A narrative dictionary """ project_config = self._read_project_config() for narrative_data in project_config['narratives']: if narrative_data['name'] == narrative_name: return narrative_data raise DataNotFoundError("narrative '%s' not found" % narrative_name)
def read_scenario(self, scenario_name): """Read a scenario Arguments --------- scenario_name: str Name of the scenario Returns ------- dict A scenario dictionary """ project_config = self._read_project_config() for scenario_data in project_config['scenarios']: if scenario_data['name'] == scenario_name: return scenario_data raise DataNotFoundError("scenario '%s' not found" % scenario_name)
def read_narrative_definition(self, narrative_name): """Read the narrative definition Arguments --------- narrative_name: str Name of the narrative Returns ------- dict """ project_config = self._read_project_config() for narrative in project_config['narratives']: if narrative['name'] == narrative_name: return narrative raise DataNotFoundError('Narrative \'{}\' not found'.format(narrative_name))
def delete_narrative(self, narrative_name): """Delete narrative from project configuration Arguments --------- narrative_name: str A narrative name """ if not self._narrative_exists(narrative_name): raise DataNotFoundError("narrative '%s' not found" % narrative_name) project_config = self._read_project_config() project_config['narratives'] = [ entry for entry in project_config['narratives'] if (entry['name'] != narrative_name) ] self._write_project_config(project_config)
def delete_scenario(self, scenario_name): """Delete scenario from project configuration Arguments --------- scenario_name: str A scenario name """ if not self._scenario_exists(scenario_name): raise DataNotFoundError("scenario '%s' not found" % scenario_name) project_config = self._read_project_config() project_config['scenarios'] = [ entry for entry in project_config['scenarios'] if (entry['name'] != scenario_name) ] self._write_project_config(project_config)
def update_sos_model_run(self, sos_model_run_name, sos_model_run): """Update system-of-system model run in Yaml file Arguments --------- sos_model_run_name: str A sos_model_run name sos_model_run: dict A sos_model_run dictionary """ if sos_model_run_name != sos_model_run['name']: raise DataMismatchError( "sos_model_run name '{}' must match '{}'".format( sos_model_run_name, sos_model_run['name'])) if not self._sos_model_run_exists(sos_model_run_name): raise DataNotFoundError("sos_model_run '%s' not found" % sos_model_run_name) self._write_yaml_file(self.file_dir['sos_model_runs'], sos_model_run['name'], sos_model_run)
def update_sector_model(self, sector_model_name, sector_model): """Update sector model in Yaml file Arguments --------- sector_model_name: str A sector_model name sector_model: dict A sector_model dictionary """ if sector_model_name != sector_model['name']: raise DataMismatchError( "sector_model name '{}' must match '{}'".format( sector_model_name, sector_model['name'])) if not self._sector_model_exists(sector_model_name): raise DataNotFoundError("sector_model '%s' not found" % sector_model_name) self._write_yaml_file(self.file_dir['sector_models'], sector_model['name'], sector_model)
def update_narrative(self, narrative_name, narrative): """Update narrative to project configuration Arguments --------- narrative_name: str Name of the (original) entry narrative: dict The updated narrative dict """ if not self._narrative_exists(narrative_name): raise DataNotFoundError("narrative '%s' not found" % narrative_name) project_config = self._read_project_config() project_config['narratives'] = [ entry for entry in project_config['narratives'] if (entry['name'] != narrative['name'] and entry['name'] != narrative_name) ] project_config['narratives'].append(narrative) self._write_project_config(project_config)
def read_scenario_definition(self, scenario_name): """Read scenario definition data Arguments --------- scenario_name: str Name of the scenario Returns ------- dict The scenario definition """ project_config = self._read_project_config() try: return next( sdef for sdef in project_config['scenarios'] if sdef['name'] == scenario_name ) except StopIteration: raise DataNotFoundError( "Scenario definition '{}' not found".format(scenario_name))
def update_scenario(self, scenario_name, scenario): """Update scenario to project configuration Arguments --------- scenario_name: str Name of the (original) entry scenario: dict The updated scenario dict """ if not self._scenario_exists(scenario_name): raise DataNotFoundError("scenario '%s' not found" % scenario_name) project_config = self._read_project_config() project_config['scenarios'] = [ entry for entry in project_config['scenarios'] if (entry['name'] != scenario['name'] and entry['name'] != scenario_name) ] project_config['scenarios'].append(scenario) self._write_project_config(project_config)
def read_scenario_set(self, scenario_set_name): """Read a scenario_set Arguments --------- scenario_set_name: str Name of the scenario_set Returns ------- dict Scenario set definition """ project_config = self._read_project_config() try: return next( scenario_set for scenario_set in project_config['scenario_sets'] if scenario_set['name'] == scenario_set_name ) except StopIteration: raise DataNotFoundError( "Scenario set '{}' not found".format(scenario_set_name))