Source code for gosmart.parameters

from __future__ import print_function

# This file is part of the Go-Smart Simulation Architecture (GSSA).
# Go-Smart is an EU-FP7 project, funded by the European Commission.
#
# Copyright (C) 2013-  NUMA Engineering Ltd. (see AUTHORS file)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
import yaml
import os
import gosmart
from gosmart.dicts import AttributeDict, ParameterDict
from gosmart.region import Region
import gosmart.status


[docs]class GoSmartParameterLoader: """Turn stored parameters (inc. regions) into usable Python objects.""" def __init__(self, prefix): self._prefix = prefix self.initiated = False self._parameter_dict = None self._needle_parameter_dicts = {} self._region_dict = {}
[docs] def get_parameters(self): """Return both global parameters and a dictionary of needle parameter dictionaries (tuple).""" if self.initiated is False: raise RuntimeError("Initiate first") return self.P, self.NP
[docs] def get_regions(self): """Return the global region class.""" if self.initiated is False: raise RuntimeError("Initiate first") return self.R
[docs] def get_region_dict(self): """Return the region dict (mostly internal).""" if self.initiated is False: raise RuntimeError("Initiate first") return self._region_dict
def _load_parameters(self): if gosmart._parameters is not False: with open(os.path.join(self._prefix, 'parameters.yml'), 'r') as f: self._parameter_dict = yaml.safe_load(f) with open(os.path.join(self._prefix, 'needle_parameters.yml'), 'r') as f: self._needle_parameter_dicts = dict({v['index']: v['parameters'] for v in yaml.safe_load_all(f)}) with open(os.path.join(self._prefix, 'regions.yml'), 'r') as f: self._region_dict = yaml.safe_load(f)
[docs] def initiate(self): """Load and process regions and parameters.""" self._load_parameters() self._initiate_region_dict() self._initiate_parameter_dict() self.initiated = True
def _initiate_region_dict(self): R = AttributeDict({k: Region(v) for k, v in self._region_dict.items()}) R.group = Region.group R.meshed_as = Region.meshed_as R.zone = Region.zone R.surface = Region.surface self.R = R def _initiate_parameter_dict(self): P = ParameterDict() P.update(self._parameter_dict) self.P = P self.NP = {k: ParameterDict(v) for k, v in self._needle_parameter_dicts.items()}
R = None P = None NP = None update = None update_available = None region_dict = None
[docs]def load(): """Set up the objects that end-users may wish to use from this module directly - especially, R, P and NP.""" global R, P, NP, update, update_available, region_dict loader = GoSmartParameterLoader(gosmart._prefix) loader.initiate() R = loader.get_regions() P, NP = loader.get_parameters() region_dict = loader.get_region_dict() update = gosmart.status.StatusUpdater() update_available = update.connect()
try: load() except FileNotFoundError as e: print("Could not load the parameters", e)