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)