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()
Beispiel #2
0
 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)
Beispiel #3
0
 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
Beispiel #5
0
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
Beispiel #6
0
    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
Beispiel #8
0
 def setUp(self, mock_read_json):
     # set up translation dictionary without calls to filesystem
     _ = util.VariableTranslator(unittest_flag=True)
Beispiel #9
0
 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()
Beispiel #10
0
 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()
Beispiel #11
0
 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')
Beispiel #12
0
 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')
Beispiel #13
0
 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')
Beispiel #14
0
 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')
Beispiel #15
0
 def setUp(self, mock_read_json):
     setUp_ConfigManager(paths=self.dummy_paths,
                         pods={'DUMMY_POD': self.default_pod})
     _ = util_mdtf.VariableTranslator(unittest=True)
Beispiel #16
0
 def _post_parse_hook(self, cli_obj, config):
     # init other services
     _ = util_mdtf.TempDirManager()
     _ = util_mdtf.VariableTranslator()
     self.verify_paths(config)