Пример #1
0
    def test_save_load_exdir(self):
        self.data = Data(logger_level="error", backend="exdir")

        self.setup_mock_data(self.data)

        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_mock")
        filename = os.path.join(self.output_test_dir, "test_save_mock")

        self.data.save(filename)

        new_data = Data(filename, backend="exdir")

        for statistical_metric in self.statistical_metrics:
            new_data["feature1d"][statistical_metric] = np.array([1., 2.])
            new_data["TestingModel1d"][statistical_metric] = np.array([3., 4.])

        new_data["feature1d"]["labels"] = ["xlabel", "ylabel"]
        new_data["TestingModel1d"]["labels"] = ["xlabel", "ylabel"]

        new_data.model_name = "TestingModel1d"
        new_data.uncertain_parameters = ["a", "b"]
        new_data.method = "mock"
        new_data.seed = 10
        new_data.incomplete = ["a", "b"]
        new_data.error = ["feature1d"]
Пример #2
0
        def custom(self, argument):
            self.convert_uncertain_parameters()

            data = Data()
            data.argument = argument

            return data
Пример #3
0
    def test_set_data(self):
        data = Data()

        data.load(os.path.join(self.test_data_dir, "test_save_mock"))

        self.plot.data = data

        self.assert_data()
Пример #4
0
    def test_seed(self):
        data = Data()
        self.assertEqual(data.seed, "")

        data.seed = 10
        self.assertEqual(data.seed, 10)

        data.seed = None
        self.assertEqual(data.seed, "")
Пример #5
0
    def test_save_empty(self):
        data = Data()

        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_empty")
        filename = os.path.join(self.output_test_dir, "test_save_empty")

        data.save(filename)

        result = subprocess.call(["h5diff", filename, compare_file])

        self.assertEqual(result, 0)
Пример #6
0
    def test_empty_data(self):
        self.plot.data = Data()
        self.plot.data.model_name = "1D"
        self.plot.data.add_features("0D")
        self.plot.data.add_features("1D")
        self.plot.data.add_features("2D")

        with self.assertRaises(AttributeError):
            self.plot.evaluations()

        self.plot.data["0D"].evaluations = [1, 2, 3]
        self.plot.data["1D"].evaluations = [[1], [2], [3]]
        self.plot.data["2D"].evaluations = [[[1]], [[2]], [[3]]]

        self.assertIsNone(self.plot.attribute_feature_1d("1D"))
        self.assertIsNone(self.plot.attribute_feature_2d("2D"))
        self.assertIsNone(self.plot.mean_variance_1d("1D"))
        self.assertIsNone(self.plot.prediction_interval_1d("1D"))
        self.assertIsNone(self.plot.sensitivity_1d("1D"))
        self.assertIsNone(self.plot.sensitivity_1d_grid("1D"))
        self.assertIsNone(self.plot.sensitivity_1d_combined("1D"))
        self.assertIsNone(self.plot.feature_0d("0D"))
        self.assertIsNone(self.plot.sensitivity_sum("1D"))
        self.assertIsNone(self.plot.sensitivity_sum_grid())

        with self.assertRaises(ValueError):
            self.plot.attribute_feature_1d(attribute="not_existing")
Пример #7
0
    def test_evaluations(self):
        self.plot.data = Data(
            os.path.join(self.test_data_dir, "TestingModel1d.h5"))

        self.plot.all_evaluations()

        plot_count = len(
            glob.glob(
                os.path.join(self.output_test_dir,
                             "evaluations/feature0d_var_evaluations/*.png")))
        self.assertEqual(plot_count, 1)

        plot_count = len(
            glob.glob(
                os.path.join(self.output_test_dir,
                             "evaluations/feature1d_var_evaluations/*.png")))
        self.assertEqual(plot_count, 32)

        plot_count = len(
            glob.glob(
                os.path.join(self.output_test_dir,
                             "evaluations/feature2d_var_evaluations/*.png")))
        self.assertEqual(plot_count, 32)

        plot_count = len(
            glob.glob(
                os.path.join(self.output_test_dir,
                             "evaluations/TestingModel1d_evaluations/*.png")))
        self.assertEqual(plot_count, 32)
Пример #8
0
    def test_evaluations_2d(self):
        self.plot.data = Data(os.path.join(self.test_data_dir, "TestingModel2d.h5"))

        self.plot.evaluations(feature="TestingModel2d")

        plot_count = 0
        for plot in glob.glob(os.path.join(self.output_test_dir, "TestingModel2d_evaluations/*.png")):
            plot_count += 1

        self.assertEqual(plot_count, 22)
Пример #9
0
    def setUp(self):
        self.output_test_dir = ".tests/"
        self.seed = 10

        if os.path.isdir(self.output_test_dir):
            shutil.rmtree(self.output_test_dir)
        os.makedirs(self.output_test_dir)

        self.data = Data(logger_level="error")

        self.statistical_metrics = [
            "evaluations", "time", "mean", "variance", "percentile_5",
            "percentile_95", "sobol_first", "sobol_first_average",
            "sobol_total", "sobol_total_average"
        ]

        self.data_information = [
            "uncertain_parameters", "model_name", "incomplete", "method",
            "version"
        ]
Пример #10
0
    def test_evaluations_1d_feature(self):
        self.plot.data = Data(
            os.path.join(self.test_data_dir, "TestingModel1d.h5"))

        self.plot.evaluations_1d(feature="feature1d_var")

        plot_count = 0
        for plot in glob.glob(
                os.path.join(self.output_test_dir,
                             "feature1d_var_evaluations/*.png")):
            plot_count += 1

        self.assertEqual(plot_count, 32)
Пример #11
0
    def test_evaluations_1d_error(self):
        with self.assertRaises(ValueError):
            self.plot.evaluations_1d(feature="TestingModel1d")

        self.plot.data = Data()

        self.plot.evaluations_1d(feature="TestingModel1d")

        self.plot.data.add_features("TestingModel1d")
        self.plot.data["TestingModel1d"].evaluations = [1, 1, 1, 1, 1]
        self.plot.data.model_name = "TestingModel1d"

        with self.assertRaises(ValueError):
            self.plot.evaluations_1d(feature="TestingModel1d")
Пример #12
0
    def test_evaluations_2d_error(self):
        with self.assertRaises(ValueError):
            self.plot.evaluations_2d(feature="TestingModel1d")

        self.plot.data = Data()

        self.plot.evaluations_2d(feature="TestingModel1d")

        self.plot.data.add_features("TestingModel1d")
        self.plot.data["TestingModel1d"].labels = ["x", "y"]
        self.plot.data["TestingModel1d"].time = np.load(os.path.join(self.folder, "data/t_test.npy"))
        values = np.load(os.path.join(self.folder, "data/U_test.npy"))
        self.plot.data["TestingModel1d"].evaluations = [values, values, values, values, values]
        self.plot.data.model_name = "TestingModel1d"

        with self.assertRaises(ValueError):
            self.plot.evaluations_2d(feature="TestingModel1d")
Пример #13
0
    def test_evaluations_with_error_results(self):
        self.plot.data = Data(
            os.path.join(self.test_data_dir, "TestingModel1d.h5"))

        self.plot.data.error = ["feature1d_var"]

        del self.plot.data.data["feature0d_var"]
        del self.plot.data.data["feature2d_var"]
        del self.plot.data.data["TestingModel1d"]

        self.plot.all_evaluations()

        plot_count = len(
            glob.glob(
                os.path.join(self.output_test_dir,
                             "evaluations/feature1d_var_evaluations/*.png")))
        self.assertEqual(plot_count, 32)
Пример #14
0
    def test_evaluations_1d(self):

        self.plot.data = Data()

        self.plot.data.add_features("TestingModel1d")
        self.plot.data["TestingModel1d"].labels = ["x", "y"]
        self.plot.data["TestingModel1d"].time = np.load(os.path.join(self.folder, "data/t_test.npy"))
        values = np.load(os.path.join(self.folder, "data/U_test.npy"))
        self.plot.data["TestingModel1d"].evaluations = [values, values, values, values, values]
        self.plot.data.model_name = "TestingModel1d"

        self.plot.evaluations_1d(feature="TestingModel1d")

        plot_count = 0
        for plot in glob.glob(os.path.join(self.output_test_dir, "TestingModel1d_evaluations/*.png")):
            plot_count += 1

        self.assertEqual(plot_count, 5)
Пример #15
0
        def create_PCE_custom(self, uncertain_parameters=None):
            data = Data()

            q0, q1 = cp.variable(2)
            parameter_space = [cp.Uniform(), cp.Uniform()]
            distribution = cp.J(*parameter_space)

            data.uncertain_parameters = ["a", "b"]

            data.test_value = "custom PCE method"
            data.add_features(
                ["TestingModel1d", "feature0d", "feature1d", "feature2d"])

            U_hat = {}
            U_hat["TestingModel1d"] = cp.Poly([q0, q1 * q0, q1])
            U_hat["feature0d"] = cp.Poly([q0, q1 * q0, q1])
            U_hat["feature1d"] = cp.Poly([q0, q1 * q0, q1])
            U_hat["feature2d"] = cp.Poly([q0, q1 * q0, q1])

            return U_hat, distribution, data
Пример #16
0
class TestData(unittest.TestCase):
    def setUp(self):
        self.output_test_dir = ".tests/"
        self.seed = 10

        if os.path.isdir(self.output_test_dir):
            shutil.rmtree(self.output_test_dir)
        os.makedirs(self.output_test_dir)

        self.data = Data()

        self.statistical_metrics = [
            "evaluations", "time", "mean", "variance", "percentile_5",
            "percentile_95", "sobol_first", "sobol_first_sum", "sobol_total",
            "sobol_total_sum"
        ]

        self.data_information = [
            "uncertain_parameters", "model_name", "incomplete", "method",
            "version"
        ]

    def tearDown(self):
        if os.path.isdir(self.output_test_dir):
            shutil.rmtree(self.output_test_dir)

    # def test_features_0d(self):
    #     self.data.features_0d = ["feature0d"]

    #     self.assertEqual(self.data.feature_list, ["feature0d"])
    #     self.assertEqual(self.data.features_0d, ["feature0d"])

    # def test_features_1d(self):
    #     self.data.features_1d = ["feature1d"]

    #     self.assertEqual(self.data.feature_list, ["feature1d"])
    #     self.assertEqual(self.data.features_1d, ["feature1d"])

    def test_add_features(self):
        self.data.add_features("feature1")

        self.assertEqual(self.data.data, {"feature1": DataFeature("feature1")})

        self.data.add_features(["feature2", "feature3"])

        self.assertEqual(
            self.data.data, {
                "feature1": DataFeature("feature1"),
                "feature2": DataFeature("feature2"),
                "feature3": DataFeature("feature3")
            })

    # def test_nan_to_none(self):
    #     a = np.array([0, 1, 2, None, 4, None, None])
    #     b = np.array([0, 1, 2, np.nan, 4, np.nan, np.nan])

    #     result = self.data.nan_to_none(b)

    #     self.assertTrue(np.array_equal(a, result))

    # def test_none_to_nan(self):
    #     a = [0, 1, 2, None, 4, None, None]
    #     b = np.array([0, 1, 2, np.nan, 4, np.nan, np.nan])

    #     result = self.data.none_to_nan(a)

    #     self.assertTrue(np.array_equal(b[~np.isnan(b)], result[~np.isnan(result)]))
    #     self.assertTrue(np.array_equal(np.isnan(b), np.isnan(result)))

    # def test_features_2d(self):
    #     self.data.features_2d = ["feature2d"]

    #     self.assertEqual(self.data.feature_list, ["feature2d"])
    #     self.assertEqual(self.data.features_2d, ["feature2d"])

    # def test_update_feature_list(self):
    #     self.data._features_1d = ["b"]
    #     self.data._features_2d = ["a"]

    #     self.data._update_feature_list()
    #     self.assertEqual(self.data.feature_list, ["a", "b"])

    # def test_is_adaptive_false(self):
    #     self.data.evaluations = {"feature1d": [np.arange(1, 4), np.arange(1, 4), np.arange(1, 4)],
    #                    "TestingModel1d": [np.arange(1, 4), np.arange(1, 4), np.arange(1, 4)]}

    #     self.data.features_1d = ["feature1d", "TestingModel1d"]

    #     self.assertFalse(self.data.is_adaptive())

    # def test_is_adaptive_true(self):
    #     self.data.evaluations = {"feature1d": [np.arange(1, 4), np.arange(1, 4), np.arange(1, 5)],
    #                    "TestingModel1d": [np.arange(1, 4), np.arange(1, 4), np.arange(1, 4)]}

    #     self.data.features_1d = ["feature1d", "TestingModel1d"]

    #     self.assertTrue(self.data.is_adaptive())

    def test_save(self):
        self.data.add_features(["feature1d", "TestingModel1d"])

        for statistical_metric in self.statistical_metrics:
            self.data["feature1d"][statistical_metric] = [1., 2.]
            self.data["TestingModel1d"][statistical_metric] = [3., 4.]

        self.data["feature1d"]["labels"] = ["xlabel", "ylabel"]
        self.data["TestingModel1d"]["labels"] = ["xlabel", "ylabel"]

        self.data.model_name = "TestingModel1d"
        self.data.uncertain_parameters = ["a", "b"]
        self.data.method = "mock"
        self.data.seed = 10
        self.data.incomplete = ["a", "b"]

        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_mock")
        filename = os.path.join(self.output_test_dir, "test_save_mock")

        self.data.save(filename)

        result = subprocess.call(["h5diff", filename, compare_file])

        self.assertEqual(result, 0)

    # TODO add this check when changing to python 3
    # def test_loadError(self):
    #     compare_file = "this_file_should_not_exist"
    #
    #     with self.assertRaises(FileNotFoundError):
    #         self.data.load(compare_file)

    def test_seed(self):
        data = Data()
        self.assertEqual(data.seed, "")

        data.seed = 10
        self.assertEqual(data.seed, 10)

        data.seed = None
        self.assertEqual(data.seed, "")

    def test_save_empty(self):
        data = Data()

        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_empty")
        filename = os.path.join(self.output_test_dir, "test_save_empty")

        data.save(filename)

        result = subprocess.call(["h5diff", filename, compare_file])

        self.assertEqual(result, 0)

    def test_load(self):
        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_mock")

        self.data.load(compare_file)

        for statistical_metric in self.statistical_metrics:
            self.assertTrue(
                np.array_equal(self.data["feature1d"][statistical_metric],
                               [1., 2.]))
            self.assertTrue(
                np.array_equal(self.data["TestingModel1d"][statistical_metric],
                               [3., 4.]))

        self.assertEqual(self.data.uncertain_parameters, ["a", "b"])
        self.assertEqual(self.data.incomplete, ["a", "b"])

        self.assertEqual(self.data.model_name, "TestingModel1d")
        self.assertEqual(self.data.method, "mock")
        self.assertEqual(self.data.seed, 10)

        self.assertTrue(
            np.array_equal(self.data["TestingModel1d"]["labels"],
                           ["xlabel", "ylabel"]))
        self.assertTrue(
            np.array_equal(self.data["feature1d"]["labels"],
                           ["xlabel", "ylabel"]))

    def test_load_empty(self):
        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_empty")

        self.data.load(compare_file)

        self.assertEqual(self.data.data, {})

        self.assertEqual(self.data.uncertain_parameters, [])
        self.assertEqual(self.data.model_name, "")
        self.assertEqual(self.data.uncertain_parameters, [])
        self.assertEqual(self.data.incomplete, [])
        self.assertEqual(self.data.method, "")
        self.assertEqual(self.data.seed, "")

    def test_get_labels(self):
        self.data.add_features(["model_name", "feature", "feature2"])

        self.data["model_name"].labels = ["x", "y"]
        self.data["feature"].labels = ["x", "y"]
        self.data["model_name"].evaluations = [[1, 2], [1, 2]]
        self.data["feature"].evaluations = [[1, 2], [1, 2]]
        self.data["feature2"].evaluations = [[1, 2], [1, 2]]

        self.data.model_name = "model_name"

        self.assertEqual(self.data.get_labels("feature"), ["x", "y"])
        self.assertEqual(self.data.get_labels("feature2"), ["x", "y"])

        self.data["feature2"].evaluations = [[[1], [2]], [[1], [2]]]
        self.assertEqual(self.data.get_labels("feature2"), ["", "", ""])

        self.data["feature"]["labels"] = ["x"]

        self.assertEqual(self.data.get_labels("feature"), ["x"])

    def test_getitem(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        self.assertEqual(self.data["test1"], 1)
        self.assertEqual(self.data["test2"], 2)

    def test_iter(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        result = []
        for feature in self.data:
            result.append(feature)

        self.assertEqual(result, ["test1", "test2"])

    def test_len(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        self.assertEqual(len(self.data), 2)

    def test_delitem(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        del self.data["test2"]

        self.assertTrue("test1" in self.data)
        self.assertFalse("test2" in self.data)

    def test_remove_only_invalid_features(self):
        self.data.add_features(["feature1d", "TestingModel1d"])
        self.data["feature1d"]["evaluations"] = np.array([[1, 2], [2, 3]])
        self.data["TestingModel1d"]["evaluations"] = np.array([[3, 4],
                                                               [np.nan]])

        self.data["feature1d"]["time"] = np.array([1, 2])
        self.data["TestingModel1d"]["time"] = np.array([3, 4])

        self.data.remove_only_invalid_features()

        self.assertTrue(
            np.array_equal(self.data["feature1d"]["evaluations"],
                           np.array([[1, 2], [2, 3]])))
        self.assertTrue(
            np.array_equal(self.data["feature1d"]["time"], np.array([1, 2])))
        self.assertTrue(
            np.array_equal(self.data["TestingModel1d"]["evaluations"],
                           np.array([[3, 4], [np.nan]])))
        self.assertTrue(
            np.array_equal(self.data["TestingModel1d"]["time"],
                           np.array([3, 4])))

    def test_remove_only_invalid_features_error(self):
        self.data.add_features(["feature1d", "TestingModel1d"])
        self.data["feature1d"]["evaluations"] = np.array([[1, 2], [2, 3]])
        self.data["TestingModel1d"]["evaluations"] = np.array([[np.nan],
                                                               [np.nan]])

        self.data["feature1d"]["time"] = np.array([1, 2])
        self.data["TestingModel1d"]["time"] = np.array([3, 4])

        self.data.remove_only_invalid_features()

        self.assertTrue(
            np.array_equal(self.data["feature1d"]["evaluations"],
                           np.array([[1, 2], [2, 3]])))
        self.assertTrue(
            np.array_equal(self.data["feature1d"]["time"], np.array([1, 2])))
        self.assertFalse("TestingModel1d" in self.data)

    def test_str(self):
        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/TestingModel1d.h5")

        self.data.load(compare_file)

        # TODO Test that the content of the data string is correct
        self.assertIsInstance(str(self.data), str)

    def test_clear(self):
        self.data.uncertain_parameters = -1
        self.data.model_name = -1
        self.data.data = -1
        self.data.incomplete = -1
        self.data.method = -1
        self.data.seed = -1

        self.data.clear()

        self.assertEqual(self.data.model_name, "")
        self.assertEqual(self.data.data, {})
        self.assertEqual(self.data.uncertain_parameters, [])
        self.assertEqual(self.data.incomplete, [])
        self.assertEqual(self.data.model_name, "")
        self.assertEqual(self.data.method, "")
        self.assertEqual(self.data.seed, "")

    def test_ndim(self):

        self.data.add_features(
            ["feature0d", "feature1d", "feature2d", "feature_invalid"])

        self.data["feature0d"].evaluations = [1]
        self.data["feature1d"].evaluations = [np.arange(0, 10)]
        self.data["feature2d"].evaluations = [
            np.array([np.arange(0, 10), np.arange(0, 10)])
        ]
        self.data["feature_invalid"].evaluations = [np.nan]

        self.assertEqual(self.data.ndim("feature0d"), 0)
        self.assertEqual(self.data.ndim("feature1d"), 1)
        self.assertEqual(self.data.ndim("feature2d"), 2)
        self.assertEqual(self.data.ndim("feature_invalid"), 0)
Пример #17
0
class TestData(unittest.TestCase):
    def setUp(self):
        self.output_test_dir = ".tests/"
        self.seed = 10

        if os.path.isdir(self.output_test_dir):
            shutil.rmtree(self.output_test_dir)
        os.makedirs(self.output_test_dir)

        self.data = Data(logger_level="error")

        self.statistical_metrics = [
            "evaluations", "time", "mean", "variance", "percentile_5",
            "percentile_95", "sobol_first", "sobol_first_average",
            "sobol_total", "sobol_total_average"
        ]

        self.data_information = [
            "uncertain_parameters", "model_name", "incomplete", "method",
            "version"
        ]

    def tearDown(self):
        if os.path.isdir(self.output_test_dir):
            shutil.rmtree(self.output_test_dir)

    def test_add_features(self):
        self.data.add_features("feature1")

        self.assertEqual(self.data.data, {"feature1": DataFeature("feature1")})

        self.data.add_features(u"feature1")

        self.assertEqual(self.data.data, {"feature1": DataFeature("feature1")})

        self.data.add_features(["feature2", "feature3"])

        self.assertEqual(
            self.data.data, {
                "feature1": DataFeature("feature1"),
                "feature2": DataFeature("feature2"),
                "feature3": DataFeature("feature3")
            })

    def test_save(self):
        self.setup_mock_data(self.data)

        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_mock")
        filename = os.path.join(self.output_test_dir, "test_save_mock")

        self.data.save(filename)

        result = subprocess.call(["h5diff", filename, compare_file])

        self.assertEqual(result, 0)

    def test_backend_error(self):
        with self.assertRaises(ValueError):
            self.data = Data(backend="not a backend")

    def test_save_load_exdir(self):
        self.data = Data(logger_level="error", backend="exdir")

        self.setup_mock_data(self.data)

        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_mock")
        filename = os.path.join(self.output_test_dir, "test_save_mock")

        self.data.save(filename)

        new_data = Data(filename, backend="exdir")

        for statistical_metric in self.statistical_metrics:
            new_data["feature1d"][statistical_metric] = np.array([1., 2.])
            new_data["TestingModel1d"][statistical_metric] = np.array([3., 4.])

        new_data["feature1d"]["labels"] = ["xlabel", "ylabel"]
        new_data["TestingModel1d"]["labels"] = ["xlabel", "ylabel"]

        new_data.model_name = "TestingModel1d"
        new_data.uncertain_parameters = ["a", "b"]
        new_data.method = "mock"
        new_data.seed = 10
        new_data.incomplete = ["a", "b"]
        new_data.error = ["feature1d"]

    def setup_mock_data(self, data):
        data.add_features(["feature1d", "TestingModel1d"])

        for statistical_metric in self.statistical_metrics:
            data["feature1d"][statistical_metric] = np.array([1., 2.])
            data["TestingModel1d"][statistical_metric] = np.array([3., 4.])

        data["feature1d"]["labels"] = ["xlabel", "ylabel"]
        data["TestingModel1d"]["labels"] = ["xlabel", "ylabel"]

        data.model_name = "TestingModel1d"
        data.uncertain_parameters = ["a", "b"]
        data.method = "mock"
        data.seed = 10
        data.incomplete = ["a", "b"]
        data.error = ["feature1d"]

        return data

    def test_save_irregular(self):
        self.data.add_features(["feature1d", "TestingModel1d"])

        self.setup_mock_data(self.data)

        self.data.model_ignore = True
        self.data["TestingModel1d"].evaluations = [[1, 2], [np.nan],
                                                   [1, [2, 3], 3], [1], 3,
                                                   [3, 4, 5], [1, 2], [],
                                                   [3, 4, 5], [], [3, 4, 5]]
        self.data["TestingModel1d"].time = [[1, 2], [np.nan], [1, [2, 3], 3],
                                            [1], 3, [3, 4, 5], [1, 2], [],
                                            [3, 4, 5], [], [3, 4, 5]]

        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_mock_irregular")
        filename = os.path.join(self.output_test_dir,
                                "test_save_mock_irregular")

        self.data.save(filename)

        result = subprocess.call(["h5diff", filename, compare_file])

        self.assertEqual(result, 0)

    def test_load_irregular(self):

        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_mock_irregular")

        self.data.load(compare_file)

        for statistical_metric in self.statistical_metrics:
            if statistical_metric in ["evaluations", "time"]:
                self.assertTrue(
                    np.array_equal(self.data["feature1d"][statistical_metric],
                                   [1., 2.]))

                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][0],
                        [1., 2.]))
                self.assertTrue(
                    np.isnan(
                        self.data["TestingModel1d"][statistical_metric][1]))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][2][0],
                        1))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][2][1],
                        np.array([2, 3])))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][2][2],
                        3))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][3],
                        np.array([1])))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][4], 3))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][5],
                        [3, 4, 5]))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][6],
                        [1., 2.]))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][7],
                        np.array([])))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][8],
                        [3, 4, 5]))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][9],
                        np.array([])))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric][10],
                        [3, 4, 5]))

            else:
                self.assertTrue(
                    np.array_equal(self.data["feature1d"][statistical_metric],
                                   [1., 2.]))
                self.assertTrue(
                    np.array_equal(
                        self.data["TestingModel1d"][statistical_metric],
                        [3., 4.]))

        self.assertEqual(self.data.uncertain_parameters, ["a", "b"])
        self.assertEqual(self.data.incomplete, ["a", "b"])
        self.assertEqual(self.data.error, ["feature1d"])

        self.assertEqual(self.data.model_name, "TestingModel1d")
        self.assertEqual(self.data.method, "mock")
        self.assertEqual(self.data.seed, 10)

        self.assertTrue(
            np.array_equal(self.data["TestingModel1d"]["labels"],
                           ["xlabel", "ylabel"]))
        self.assertTrue(
            np.array_equal(self.data["feature1d"]["labels"],
                           ["xlabel", "ylabel"]))

    # # TODO add this check when changing to python 3
    # # def test_loadError(self):
    # #     compare_file = "this_file_should_not_exist"
    # #
    # #     with self.assertRaises(FileNotFoundError):
    # #         self.data.load(compare_file)

    def test_seed(self):
        data = Data()
        self.assertEqual(data.seed, "")

        data.seed = 10
        self.assertEqual(data.seed, 10)

        data.seed = None
        self.assertEqual(data.seed, "")

    def test_save_empty(self):
        data = Data()

        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_empty")
        filename = os.path.join(self.output_test_dir, "test_save_empty")

        data.save(filename)

        result = subprocess.call(["h5diff", filename, compare_file])

        self.assertEqual(result, 0)

    def test_load(self):
        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_mock")

        self.data.load(compare_file)

        for statistical_metric in self.statistical_metrics:
            self.assertTrue(
                np.array_equal(self.data["feature1d"][statistical_metric],
                               [1., 2.]))
            self.assertTrue(
                np.array_equal(self.data["TestingModel1d"][statistical_metric],
                               [3., 4.]))

        self.assertEqual(self.data.uncertain_parameters, ["a", "b"])
        self.assertEqual(self.data.incomplete, ["a", "b"])
        self.assertEqual(self.data.error, ["feature1d"])

        self.assertEqual(self.data.model_name, "TestingModel1d")
        self.assertEqual(self.data.method, "mock")
        self.assertEqual(self.data.seed, 10)
        self.assertTrue(
            np.array_equal(self.data["TestingModel1d"]["labels"],
                           ["xlabel", "ylabel"]))
        self.assertTrue(
            np.array_equal(self.data["feature1d"]["labels"],
                           ["xlabel", "ylabel"]))

    def test_load_missing(self):
        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_mock_missing")

        self.data.load(compare_file)

        for statistical_metric in self.statistical_metrics:
            self.assertTrue(
                np.array_equal(self.data["feature1d"][statistical_metric],
                               [1., 2.]))
            self.assertTrue(
                np.array_equal(self.data["TestingModel1d"][statistical_metric],
                               [3., 4.]))

        self.assertEqual(self.data.uncertain_parameters, ["a", "b"])
        self.assertEqual(self.data.incomplete, [])
        self.assertEqual(self.data.error, ["feature1d"])

        self.assertEqual(self.data.model_name, "TestingModel1d")
        self.assertEqual(self.data.method, "mock")
        self.assertEqual(self.data.seed, "")

        self.assertTrue(
            np.array_equal(self.data["TestingModel1d"]["labels"],
                           ["xlabel", "ylabel"]))
        self.assertTrue(
            np.array_equal(self.data["feature1d"]["labels"],
                           ["xlabel", "ylabel"]))

    def test_load_empty(self):
        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/test_save_empty")

        self.data.load(compare_file)

        self.assertEqual(self.data.data, {})

        self.assertEqual(self.data.uncertain_parameters, [])
        self.assertEqual(self.data.model_name, "")
        self.assertEqual(self.data.uncertain_parameters, [])
        self.assertEqual(self.data.incomplete, [])
        self.assertEqual(self.data.method, "")
        self.assertEqual(self.data.seed, "")

    def test_get_labels(self):
        self.data.add_features(["model_name", "feature", "feature2"])

        self.data["model_name"].labels = ["x", "y"]
        self.data["feature"].labels = ["x", "y"]
        self.data["model_name"].evaluations = [[1, 2], [1, 2]]
        self.data["feature"].evaluations = [[1, 2], [1, 2]]
        self.data["feature2"].evaluations = [[1, 2], [1, 2]]

        self.data.model_name = "model_name"

        self.assertEqual(self.data.get_labels("feature"), ["x", "y"])
        self.assertEqual(self.data.get_labels("feature2"), ["x", "y"])

        self.data["feature2"].evaluations = [[[1], [2]], [[1], [2]]]
        self.assertEqual(self.data.get_labels("feature2"), ["", "", ""])

        self.data["feature"]["labels"] = ["x"]

        self.assertEqual(self.data.get_labels("feature"), ["x"])

    def test_getitem(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        self.assertEqual(self.data["test1"], 1)
        self.assertEqual(self.data["test2"], 2)

    def test_iter(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        result = []
        for feature in self.data:
            result.append(feature)

        self.assertEqual(result, ["test1", "test2"])

    def test_iter_error(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        self.data.error = ["test2"]
        result = []
        for feature in self.data:
            result.append(feature)

        self.assertEqual(result, ["test1"])

    def test_iter_error_all(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        self.data.error = ["test1", "test2"]
        result = []
        for feature in self.data:
            result.append(feature)

        self.assertEqual(result, [])

    def test_len(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        self.data.error = ["test2"]

        self.assertEqual(len(self.data), 1)

    def test_delitem(self):
        self.data.data["test1"] = 1
        self.data.data["test2"] = 2

        del self.data["test2"]

        self.assertTrue("test1" in self.data)
        self.assertFalse("test2" in self.data)

    def test_remove_only_invalid_features(self):
        self.data.add_features(["feature1d", "TestingModel1d"])
        self.data["feature1d"]["evaluations"] = np.array([[1, 2], [2, 3]])
        self.data["TestingModel1d"]["evaluations"] = np.array([[3, 4],
                                                               [np.nan]])

        self.data["feature1d"]["time"] = np.array([1, 2])
        self.data["TestingModel1d"]["time"] = np.array([3, 4])

        self.data.remove_only_invalid_features()

        self.assertTrue(
            np.array_equal(self.data["feature1d"]["evaluations"],
                           np.array([[1, 2], [2, 3]])))
        self.assertTrue(
            np.array_equal(self.data["feature1d"]["time"], np.array([1, 2])))
        self.assertTrue(
            np.array_equal(self.data["TestingModel1d"]["evaluations"],
                           np.array([[3, 4], [np.nan]])))
        self.assertTrue(
            np.array_equal(self.data["TestingModel1d"]["time"],
                           np.array([3, 4])))

    def test_remove_only_invalid_features_error(self):
        self.data.add_features(["feature1d", "TestingModel1d"])
        self.data["feature1d"]["evaluations"] = np.array([[1, 2], [2, 3]])
        self.data["TestingModel1d"]["evaluations"] = np.array([[np.nan],
                                                               [np.nan]])

        self.data["feature1d"]["time"] = np.array([1, 2])
        self.data["TestingModel1d"]["time"] = np.array([3, 4])

        self.data.remove_only_invalid_features()

        self.assertTrue(
            np.array_equal(self.data["feature1d"]["evaluations"],
                           np.array([[1, 2], [2, 3]])))
        self.assertTrue(
            np.array_equal(self.data["feature1d"]["time"], np.array([1, 2])))
        self.assertFalse("TestingModel1d" in self.data)

    def test_str(self):
        folder = os.path.dirname(os.path.realpath(__file__))
        compare_file = os.path.join(folder, "data/TestingModel1d.h5")

        self.data.load(compare_file)

        # TODO Test that the content of the data string is correct
        self.assertIsInstance(str(self.data), str)

    def test_clear(self):
        self.data.uncertain_parameters = -1
        self.data.model_name = -1
        self.data.data = -1
        self.data.incomplete = -1
        self.data.method = -1
        self.data.seed = -1

        self.data.clear()

        self.assertEqual(self.data.model_name, "")
        self.assertEqual(self.data.data, {})
        self.assertEqual(self.data.uncertain_parameters, [])
        self.assertEqual(self.data.incomplete, [])
        self.assertEqual(self.data.model_name, "")
        self.assertEqual(self.data.method, "")
        self.assertEqual(self.data.seed, "")

    def test_ndim(self):

        self.data.add_features([
            "feature0d", "feature1d", "feature2d", "feature_invalid", "empty",
            "test"
        ])

        self.data["feature0d"].evaluations = [1]
        self.data["feature1d"].evaluations = [np.arange(0, 10)]
        self.data["feature2d"].evaluations = [
            np.array([np.arange(0, 10), np.arange(0, 10)])
        ]
        self.data["feature_invalid"].evaluations = [np.nan]
        self.data["test"].evaluations = [np.nan, np.arange(0, 10)]

        self.assertEqual(self.data.ndim("feature0d"), 0)
        self.assertEqual(self.data.ndim("feature1d"), 1)
        self.assertEqual(self.data.ndim("feature2d"), 2)
        self.assertIsNone(self.data.ndim("feature_invalid"))
        self.assertIsNone(self.data.ndim("empty"))
Пример #18
0
 def test_backend_error(self):
     with self.assertRaises(ValueError):
         self.data = Data(backend="not a backend")