Source code for pymt.testing.services

import numpy as np

from pymt.grids import UniformRectilinearPoints


[docs]def get_instance(name): return _INSTANCES[name]
[docs]def instantiate(cls, name): if name in _INSTANCES: raise ValueError(name) else: _INSTANCES[name] = get_class(cls)()
[docs]def get_class(name): return _CLASSES[name]
[docs]def get_class_names(): return _CLASSES.keys()
# class EmptyPort:
[docs]class EmptyPort(UniformRectilinearPoints): _name = None def __init__(self): UniformRectilinearPoints.__init__(self, (4, 5), (1.0, 2.0), (0.0, 1.0)) # self._shape = (4, 5) # self._spacing = (1., 2.) # self._origin = (0., 1.) self._values = {} self._time = self.start_time
[docs] def get_component_name(self): return self._name
[docs] def initialize(self): for array in self._values.values(): array.fill(0.0)
[docs] def run(self, time): self._time = time for array in self._values.values(): array.fill(self.current_time)
[docs] def finalize(self): for array in self._values.values(): array.fill(0.0)
[docs] def get_var_grid(self, var_name): if var_name in self._values: return 0 else: raise KeyError(var_name)
[docs] def get_var_units(self, var_name): if var_name in self._values: return "-" else: raise KeyError(var_name)
[docs] def get_grid_shape(self, grid_id): if grid_id == 0: return self.get_shape() else: raise KeyError(grid_id)
[docs] def get_grid_spacing(self, grid_id): if grid_id == 0: return self.get_spacing() else: raise KeyError(grid_id)
[docs] def get_grid_origin(self, grid_id): if grid_id == 0: return self.get_origin() else: raise KeyError(grid_id)
[docs] def get_value(self, var_name, units=None): try: return self._values[var_name] except KeyError: print(self._values.keys()) raise
[docs] def set_value(self, var_name, values): try: self._values[var_name].flat = values.flat except KeyError: print(self._values.keys()) raise
@property def start_time(self): return 0.0 @property def current_time(self): return self._time @property def end_time(self): return 100.0 @property def time_step(self): return 1.0
[docs]class WaterPort(EmptyPort): _name = "water_port" def __init__(self): EmptyPort.__init__(self) self._values = { "ocean_surface__temperature": np.empty(self._shape), "ocean_surface__density": np.empty(self._shape), }
[docs]class AirPort(EmptyPort): _name = "air_port" def __init__(self): EmptyPort.__init__(self) self._values = { "air__temperature": np.empty(self._shape), "air__density": np.empty(self._shape), }
[docs]class EarthPort(EmptyPort): _name = "earth_port" def __init__(self): EmptyPort.__init__(self) self._values = { "earth_surface__temperature": np.empty(self._shape), "earth_surface__density": np.empty(self._shape), "glacier_top_surface__slope": np.empty(self._shape), }
_SERVICES = { "air_port": AirPort(), "water_port": WaterPort(), "earth_port": EarthPort(), } _CLASSES = {"air_port": AirPort, "water_port": WaterPort, "earth_port": EarthPort} _INSTANCES = {}