# coding=utf-8 from unittest import TestCase from earthdiagnostics.diagnostic import DiagnosticVariableOption from earthdiagnostics.box import Box from earthdiagnostics.frequency import Frequencies from earthdiagnostics.general.yearlymean import YearlyMean from mock import Mock, patch from earthdiagnostics.modelingrealm import ModelingRealms class TestYearlyMean(TestCase): def setUp(self): self.data_manager = Mock() self.diags = Mock() self.diags.config.experiment.get_chunk_list.return_value = (('20010101', 0, 0), ('20010101', 0, 1)) self.diags.config.frequency = Frequencies.monthly self.box = Box() self.box.min_depth = 0 self.box.max_depth = 100 self.mixed = YearlyMean(self.data_manager, '20000101', 1, 1, ModelingRealms.ocean, 'var', 'freq', '') def fake_parse(self, value): return value @patch.object(DiagnosticVariableOption, 'parse', fake_parse) def test_generate_jobs(self): jobs = YearlyMean.generate_jobs(self.diags, ['diagnostic', 'ocean', 'var']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], YearlyMean(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var', Frequencies.monthly, '')) self.assertEqual(jobs[1], YearlyMean(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var', Frequencies.monthly, '')) jobs = YearlyMean.generate_jobs(self.diags, ['diagnostic', 'atmos', 'var', 'day']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], YearlyMean(self.data_manager, '20010101', 0, 0, ModelingRealms.atmos, 'var', Frequencies.daily, '')) self.assertEqual(jobs[1], YearlyMean(self.data_manager, '20010101', 0, 1, ModelingRealms.atmos, 'var', Frequencies.daily, '')) jobs = YearlyMean.generate_jobs(self.diags, ['diagnostic', 'seaice', 'var', 'mon', 'grid']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], YearlyMean(self.data_manager, '20010101', 0, 0, ModelingRealms.seaIce, 'var', Frequencies.monthly, 'grid')) self.assertEqual(jobs[1], YearlyMean(self.data_manager, '20010101', 0, 1, ModelingRealms.seaIce, 'var', Frequencies.monthly, 'grid')) with self.assertRaises(Exception): YearlyMean.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): YearlyMean.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.mixed), 'Calculate yearly mean Startdate: 20000101 Member: 1 Chunk: 1 ' 'Variable: ocean:var Original frequency: freq Grid: ')