test_region_mean.py 9.51 KB
Newer Older
# coding=utf-8
from unittest import TestCase

from mock import Mock, patch

from earthdiagnostics.box import Box
from earthdiagnostics.frequency import Frequencies
from earthdiagnostics.constants import Basins
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
from earthdiagnostics.diagnostic import (
    DiagnosticOptionError,
    DiagnosticVariableListOption,
)
from earthdiagnostics.modelingrealm import ModelingRealms
from earthdiagnostics.ocean.regionmean import RegionMean
from earthdiagnostics.utils import TempFile


class TestRegionMean(TestCase):
    def setUp(self):
        self.data_manager = Mock()
        self.diags = Mock()
        self.diags.config.experiment.get_chunk_list.return_value = (
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            ("20010101", 0, 0),
            ("20010101", 0, 1),
        )
        self.diags.config.frequency = Frequencies.monthly

    def fake_parse(self, value):
        if not value:
            raise DiagnosticOptionError
        return value

    @staticmethod
    def fake_get():
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        return "tempfile"
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
    @patch.object(DiagnosticVariableListOption, "parse", fake_parse)
    @patch.object(TempFile, "get", fake_get)
    def test_generate_jobs(self):
        box = Box()
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        box.min_depth = -1
        box.max_depth = -1
        jobs = RegionMean.generate_jobs(
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            self.diags, ["diagnostic", "ocean", ["var"]]
        )
        self.assertEqual(len(jobs), 2)
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        self.assertEqual(
            jobs[0],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                0,
                ModelingRealms.ocean,
                "var",
                box,
                True,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "t",
                Frequencies.monthly,
            ),
        )
        self.assertEqual(
            jobs[1],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                1,
                ModelingRealms.ocean,
                "var",
                box,
                True,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "t",
                Frequencies.monthly,
            ),
        )
        jobs = RegionMean.generate_jobs(
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            self.diags, ["diagnostic", "ocean", ["var"], "", "U"]
        )
        self.assertEqual(len(jobs), 2)
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        self.assertEqual(
            jobs[0],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                0,
                ModelingRealms.ocean,
                "var",
                box,
                True,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "u",
                Frequencies.monthly,
            ),
        )
        self.assertEqual(
            jobs[1],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                1,
                ModelingRealms.ocean,
                "var",
                box,
                True,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "u",
                Frequencies.monthly,
            ),
        )
        jobs = RegionMean.generate_jobs(
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            self.diags, ["diagnostic", "ocean", ["var"], "global", "U"]
        )
        self.assertEqual(len(jobs), 2)
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        self.assertEqual(
            jobs[0],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                0,
                ModelingRealms.ocean,
                "var",
                box,
                True,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "u",
                Frequencies.monthly,
            ),
        )
        self.assertEqual(
            jobs[1],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                1,
                ModelingRealms.ocean,
                "var",
                box,
                True,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "u",
                Frequencies.monthly,
            ),
        )
        box.min_depth = 1.0
        box.max_depth = 10.0
        jobs = RegionMean.generate_jobs(
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            self.diags,
            ["diagnostic", "ocean", ["var"], "global", "U", "1", "10"],
        )
        self.assertEqual(len(jobs), 2)
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        self.assertEqual(
            jobs[0],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                0,
                ModelingRealms.ocean,
                "var",
                box,
                True,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "u",
                Frequencies.monthly,
            ),
        )
        self.assertEqual(
            jobs[1],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                1,
                ModelingRealms.ocean,
                "var",
                box,
                True,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "u",
                Frequencies.monthly,
            ),
        )
        jobs = RegionMean.generate_jobs(
            self.diags,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            [
                "diagnostic",
                "ocean",
                ["var"],
                "global",
                "U",
                "1",
                "10",
                "false",
            ],
        self.assertEqual(len(jobs), 2)
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        self.assertEqual(
            jobs[0],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                0,
                ModelingRealms.ocean,
                "var",
                box,
                False,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "u",
                Frequencies.monthly,
            ),
        )
        self.assertEqual(
            jobs[1],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                1,
                ModelingRealms.ocean,
                "var",
                box,
                False,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "u",
                Frequencies.monthly,
            ),
        )
        jobs = RegionMean.generate_jobs(
            self.diags,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            [
                "diagnostic",
                "ocean",
                ["var"],
                "global",
                "U",
                "1",
                "10",
                "false",
                "grid",
            ],
        self.assertEqual(len(jobs), 2)
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        self.assertEqual(
            jobs[0],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                0,
                ModelingRealms.ocean,
                "var",
                box,
                False,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "grid",
                Frequencies.monthly,
            ),
        )
        self.assertEqual(
            jobs[1],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                1,
                ModelingRealms.ocean,
                "var",
                box,
                False,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "grid",
                Frequencies.monthly,
            ),
        )
        jobs = RegionMean.generate_jobs(
            self.diags,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            [
                "diagnostic",
                "ocean",
                ["var"],
                "global",
                "U",
                "1",
                "10",
                "false",
                "grid",
                "day",
            ],
        )
        self.assertEqual(len(jobs), 2)
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        self.assertEqual(
            jobs[0],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                0,
                ModelingRealms.ocean,
                "var",
                box,
                False,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "grid",
                Frequencies.daily,
            ),
        )
        self.assertEqual(
            jobs[1],
            RegionMean(
                self.data_manager,
                "20010101",
                0,
                1,
                ModelingRealms.ocean,
                "var",
                box,
                False,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                "grid",
                Frequencies.daily,
            ),
        )
        with self.assertRaises(DiagnosticOptionError):
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            RegionMean.generate_jobs(self.diags, ["diagnostic"])

        with self.assertRaises(DiagnosticOptionError):
            RegionMean.generate_jobs(
                self.diags,
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
                [
                    "diagnostic",
                    "ocean",
                    ["var"],
                    "global",
                    "U",
                    "1",
                    "10",
                    "false",
                    "grid",
                    "day",
                    "extra",
                ],

    def test_str(self):
        box = Box()
        box.min_depth = 1
        box.max_depth = 10
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        diag = RegionMean(
            self.data_manager,
            "20010101",
            0,
            0,
            ModelingRealms.ocean,
            "var",
            box,
            False,
            [Basins().Global],
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            "T",
            Frequencies.monthly,
        )
        self.assertEqual(
            str(diag),
            "Region mean Startdate: 20010101 Member: 0 Chunk: 0 Variable: var "
            "Box: 1-10 Save 3D: False Grid point: T",
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
        )