test_interpolatecdo.py 5.49 KB
Newer Older
# coding=utf-8
from unittest import TestCase

from earthdiagnostics.ocean.interpolatecdo import InterpolateCDO
from mock import Mock, patch

from earthdiagnostics.modelingrealm import ModelingRealms
from earthdiagnostics.diagnostic import DiagnosticVariableListOption, DiagnosticOptionError


class TestInterpolate(TestCase):

    def setUp(self):
        self.data_manager = Mock()

        self.diags = Mock()
        self.diags.model_version = 'model_version'
        self.diags.config.experiment.get_chunk_list.return_value = (('20010101', 0, 0), ('20010101', 0, 1))
        self.diags.config.experiment.model_version = 'model_version'
        self.diags.config.experiment.atmos_grid = 'atmos_grid'

    def fake_parse(self, value):
        if not value:
            raise DiagnosticOptionError
        return value.split('-')

    @patch('earthdiagnostics.ocean.interpolatecdo.InterpolateCDO._compute_weights')
    @patch.object(DiagnosticVariableListOption, 'parse', fake_parse)
    def test_generate_jobs(self, mock_weights):
        mock_weights.return_value = None

        jobs = InterpolateCDO.generate_jobs(self.diags, ['interpcdo', 'ocean', 'var'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], InterpolateCDO(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var',
                                                 'atmos_grid', 'model_version', True, '', None))
        self.assertEqual(jobs[1], InterpolateCDO(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var',
                                                 'atmos_grid', 'model_version', True, '', None))

        jobs = InterpolateCDO.generate_jobs(self.diags, ['interpcdo', 'ocean', 'var', 'target_grid'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], InterpolateCDO(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', True, '', None))
        self.assertEqual(jobs[1], InterpolateCDO(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', True, '', None))

        jobs = InterpolateCDO.generate_jobs(self.diags, ['interpcdo', 'ocean', 'var', 'target_grid', 'bicubic'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], InterpolateCDO(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', True, '', None))
        self.assertEqual(jobs[1], InterpolateCDO(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', True, '', None))

        jobs = InterpolateCDO.generate_jobs(self.diags, ['interpcdo', 'ocean', 'var', 'target_grid', 'bicubic',
                                                         'false'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], InterpolateCDO(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', False, '', None))
        self.assertEqual(jobs[1], InterpolateCDO(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', False, '', None))

        jobs = InterpolateCDO.generate_jobs(self.diags, ['interpcdo', 'ocean', 'var', 'target_grid', 'bicubic',
                                                         'false', 'orig'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], InterpolateCDO(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', False, 'orig', None))
        self.assertEqual(jobs[1], InterpolateCDO(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', False, 'orig', None))

        jobs = InterpolateCDO.generate_jobs(self.diags, ['interpcdo', 'ocean', 'var', 'target_grid', 'bicubic',
                                                         'false', 'orig', 'false'])
        self.assertEqual(len(jobs), 2)
        self.assertEqual(jobs[0], InterpolateCDO(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', False, 'orig', None))
        self.assertEqual(jobs[1], InterpolateCDO(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var',
                                                 'target_grid', 'model_version', False, 'orig', None))

        with self.assertRaises(DiagnosticOptionError):
            InterpolateCDO.generate_jobs(self.diags, ['interp'])

        with self.assertRaises(DiagnosticOptionError):
            InterpolateCDO.generate_jobs(self.diags, ['interpcdo', 'ocean', 'var', 'bicubic', 'false', 'orig', 'false',
                                                      'extra'])

    def test_str(self):
        diag = InterpolateCDO(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var',
                                                 'atmos_grid', 'model_version', False, 'orig', None)
        self.assertEquals(str(diag), 'Interpolate with CDO Startdate: 20010101 Member: 0 Chunk: 0 Variable: ocean:var '
                                     'Target grid: atmos_grid Original grid: orig Mask ocean: False '
                                     'Model: model_version')