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])

Reply via email to