def setUp(self, verbose=0): util_mdtf.check_required_dirs( already_exist=[], create_if_nec=[self.MODEL_WK_DIR, self.MODEL_DATA_DIR], verbose=verbose) self.envvars.update({ "DATADIR": self.MODEL_DATA_DIR, "variab_dir": self.MODEL_WK_DIR, "CASENAME": self.case_name, "model": self.model_name, "FIRSTYR": self.firstyr.format(precision=1), "LASTYR": self.lastyr.format(precision=1) }) # set env vars for unit conversion factors (TODO: honest unit conversion) translate = util_mdtf.VariableTranslator() if self.convention not in translate.units: raise AssertionError( ("Variable name translation doesn't recognize " "{}.").format(self.convention)) temp = translate.variables[self.convention].to_dict() for key, val in iter(temp.items()): util_mdtf.setenv(key, val, self.envvars, verbose=verbose) temp = translate.units[self.convention].to_dict() for key, val in iter(temp.items()): util_mdtf.setenv(key, val, self.envvars, verbose=verbose) for pod in self.iter_pods(): self._setup_pod(pod) self._build_data_dicts()
def setUp(self, mock_read_json): setUp_ConfigManager( config=self.default_case, paths=self.dummy_paths, pods={'C': self.default_pod_CF} ) _ = util_mdtf.VariableTranslator(unittest = True)
def tearDown(self): # call _reset method deleting clearing Translator for unit testing, # otherwise the second, third, .. tests will use the instance created # in the first test instead of being properly initialized temp = util.VariableTranslator(unittest_flag=True) temp._reset() temp = util.PathManager() temp._reset()
def from_pod_varlist(cls, pod_convention, var, dm_args): translate = util_mdtf.VariableTranslator() var_copy = var.copy() var_copy.update(dm_args) ds = cls(**var_copy) ds.original_name = ds.name ds.CF_name = translate.toCF(pod_convention, ds.name) alt_ds_list = [] for alt_var in ds.alternates: alt_ds = ds.copy(new_name=alt_var) alt_ds.original_name = ds.original_name alt_ds.CF_name = translate.toCF(pod_convention, alt_ds.name) alt_ds.alternates = [] alt_ds_list.append(alt_ds) ds.alternates = alt_ds_list return ds
def tearDown_ConfigManager(): # clear Singletons try: temp = util_mdtf.ConfigManager(unittest=True) temp._reset() except: pass try: temp = util_mdtf.VariableTranslator(unittest=True) temp._reset() except: pass try: temp = util_mdtf.TempDirManager() temp._reset() except: pass
def _populate_pod__local_data(self, pod): # reproduce logic in DataManager._setup_pod rather than invoke it here config = util_mdtf.ConfigManager(unittest=True) translate = util_mdtf.VariableTranslator(unittest=True) case_name = 'A' ds_list = [] for var in pod.varlist: ds_list.append( DataSet.from_pod_varlist(pod.convention, var, {'DateFreqMixin': DateFrequency})) pod.varlist = ds_list for var in pod.iter_vars_and_alts(): var.name_in_model = translate.fromCF('not_CF', var.CF_name) freq = var.date_freq.format_local() var._local_data = os.path.join( config.paths.MODEL_DATA_ROOT, case_name, freq, "{}.{}.{}.nc".format(case_name, var.name_in_model, freq))
def _setup_pod(self, pod): config = util_mdtf.ConfigManager() translate = util_mdtf.VariableTranslator() # transfer DataManager-specific settings pod.__dict__.update(config.paths.pod_paths(pod, self)) pod.TEMP_HTML = self.TEMP_HTML pod.pod_env_vars.update(self.envvars) pod.dry_run = self.dry_run # express varlist as DataSet objects ds_list = [] for var in pod.varlist: ds_list.append( DataSet.from_pod_varlist(pod.convention, var, {'DateFreqMixin': self.DateFreq})) pod.varlist = ds_list for var in pod.iter_vars_and_alts(): var.name_in_model = translate.fromCF(self.convention, var.CF_name) if var.date_freq.is_static: # placeholder value for time-independent data var.date_range = datelabel.FXDateRange else: var.date_range = self.date_range var._local_data = self.local_path(self.dataset_key(var)) var.axes = copy.deepcopy(translate.axes[self.convention]) if self.data_freq is not None: for var in pod.iter_vars_and_alts(): if var.date_freq != self.data_freq: pod.skipped = PodRequirementFailure( pod, ("{0} requests {1} (= {2}) at {3} frequency, which isn't " "compatible with case {4} providing data at {5} frequency " "only.").format(pod.name, var.name_in_model, var.name, var.date_freq, self.case_name, self.data_freq)) break
def setUp(self, mock_read_json): # set up translation dictionary without calls to filesystem _ = util.VariableTranslator(unittest_flag=True)
def test_read_model_varnames_multiple(self, mock_read_json): # create multiple entries when multiple models specified temp = util.VariableTranslator(unittest_flag=True) self.assertEqual(temp.fromCF('A', 'B'), 'D') self.assertEqual(temp.fromCF('C', 'B'), 'D') temp._reset()
def test_read_model_varnames(self, mock_read_json): # normal operation - convert string to list temp = util.VariableTranslator(unittest_flag=True) self.assertEqual(temp.fromCF('A', 'B'), 'D') temp._reset()
def test_variabletranslator_no_key(self): temp = util.VariableTranslator(unittest_flag=True) self.assertRaises(AssertionError, temp.toCF, 'B', 'PRECT') self.assertRaises(KeyError, temp.toCF, 'not_CF', 'nonexistent_var') self.assertRaises(AssertionError, temp.fromCF, 'B', 'PRECT') self.assertRaises(KeyError, temp.fromCF, 'not_CF', 'nonexistent_var')
def test_variabletranslator_cf(self): temp = util.VariableTranslator(unittest_flag=True) self.assertEqual(temp.toCF('CF', 'pr_var'), 'pr_var') self.assertEqual(temp.fromCF('CF', 'pr_var'), 'pr_var')
def test_variabletranslator_no_key(self, mock_read_json): temp = util_mdtf.VariableTranslator(unittest=True) self.assertRaises(AssertionError, temp.toCF, 'B', 'PRECT') self.assertRaises(KeyError, temp.toCF, 'not_CF', 'nonexistent_var') self.assertRaises(AssertionError, temp.fromCF, 'B', 'PRECT') self.assertRaises(KeyError, temp.fromCF, 'not_CF', 'nonexistent_var')
def test_variabletranslator_cf(self, mock_read_json): temp = util_mdtf.VariableTranslator(unittest=True) self.assertEqual(temp.toCF('CF', 'pr_var'), 'pr_var') self.assertEqual(temp.fromCF('CF', 'pr_var'), 'pr_var')
def setUp(self, mock_read_json): setUp_ConfigManager(paths=self.dummy_paths, pods={'DUMMY_POD': self.default_pod}) _ = util_mdtf.VariableTranslator(unittest=True)
def _post_parse_hook(self, cli_obj, config): # init other services _ = util_mdtf.TempDirManager() _ = util_mdtf.VariableTranslator() self.verify_paths(config)