CLIMATE-639 - Add subregion support to config writing
Project: http://git-wip-us.apache.org/repos/asf/climate/repo Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/19d861cf Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/19d861cf Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/19d861cf Branch: refs/heads/master Commit: 19d861cfbbd11eb32f6d466fe9ea3e8add35f827 Parents: 917dbdb Author: Michael Joyce <[email protected]> Authored: Thu May 28 12:31:28 2015 -0700 Committer: Michael Joyce <[email protected]> Committed: Thu May 28 12:31:28 2015 -0700 ---------------------------------------------------------------------- ocw-config-runner/configuration_writer.py | 17 ++++++++++ ocw-config-runner/tests/test_config_writer.py | 37 ++++++++++++++++++++-- 2 files changed, 52 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/climate/blob/19d861cf/ocw-config-runner/configuration_writer.py ---------------------------------------------------------------------- diff --git a/ocw-config-runner/configuration_writer.py b/ocw-config-runner/configuration_writer.py index f7fb1c9..8fc9242 100644 --- a/ocw-config-runner/configuration_writer.py +++ b/ocw-config-runner/configuration_writer.py @@ -37,6 +37,7 @@ def export_evaluation_to_config(evaluation, file_path='./exported_eval.yaml'): config['evaluation'] = generate_evaluation_information(evaluation) config['datasets'] = generate_dataset_information(evaluation) config['metrics'] = generate_metric_information(evaluation) + config['subregions'] = generate_subregion_information(evaluation) yaml.dump(config, file(file_path, 'w')) @@ -158,6 +159,22 @@ def generate_evaluation_information(evaluation): return eval_config +def generate_subregion_information(evaluation): + ''' Generate subregion config file output from a given Evaluation object. + + :param evaluation: The evaluation object from which to extract metrics. + :type evaluation: :class:`evaluation.Evaluation` + + :returns: A :func:`list` of :func:`list` objects containing bounding + box info for export into a configuration file + :rtype: :func:`list` of :func:`list` + ''' + subregions = [] + for s in evaluation.subregions: + subregions.append([s.lat_min, s.lat_max, s.lon_min, s.lon_max]) + + return subregions + def _extract_local_dataset_info(dataset): '''''' dataset_info = {'optional_args': {}} http://git-wip-us.apache.org/repos/asf/climate/blob/19d861cf/ocw-config-runner/tests/test_config_writer.py ---------------------------------------------------------------------- diff --git a/ocw-config-runner/tests/test_config_writer.py b/ocw-config-runner/tests/test_config_writer.py index 97b7e01..f163989 100644 --- a/ocw-config-runner/tests/test_config_writer.py +++ b/ocw-config-runner/tests/test_config_writer.py @@ -19,7 +19,7 @@ from mock import patch import os import unittest -from ocw.dataset import Dataset +from ocw.dataset import Dataset, Bounds from ocw.evaluation import Evaluation import ocw.metrics as metrics import configuration_writer as writer @@ -651,10 +651,16 @@ class FullExportTest(unittest.TestCase): origin=self.dap_origin ) + self.subregions = [ + Bounds(-10, 10, -20, 20), + Bounds(-5, 5, -15, 15) + ] + self.evaluation = Evaluation( self.local_ds, [self.rcmed_ds, self.esgf_ds, self.dap_ds], - [metrics.Bias(), metrics.TemporalStdDev()] + [metrics.Bias(), metrics.TemporalStdDev()], + subregions=self.subregions ) @classmethod @@ -733,3 +739,30 @@ class FullExportTest(unittest.TestCase): writer.generate_evaluation_information(self.evaluation), data['evaluation'] ) + + def test_proper_subregion_export(self): + file_path = '/tmp/test_config.yaml' + writer.export_evaluation_to_config( + self.evaluation, + file_path=file_path + ) + + data = yaml.load(open(file_path, 'r')) + + self.assertTrue('subregions' in data) + + first_bounds = [ + self.subregions[0].lat_min, + self.subregions[0].lat_max, + self.subregions[0].lon_min, + self.subregions[0].lon_max, + ] + second_bounds = [ + self.subregions[1].lat_min, + self.subregions[1].lat_max, + self.subregions[1].lon_min, + self.subregions[1].lon_max, + ] + + self.assertEqual(first_bounds, data['subregions'][0]) + self.assertEqual(second_bounds, data['subregions'][1])
