Repository: kjappelbaum/pyepal (language: python)

Issue:
add tests for modeling assumptions
- Levene's test
- Fligner-Killeen


Discussion / hints:
they are both in scipy, we just provide helpers to take a feature matrix

Fix patch:
diff --git a/src/pyepal/__init__.py b/src/pyepal/__init__.py
index e096b81..53d21ec 100644
--- a/src/pyepal/__init__.py
+++ b/src/pyepal/__init__.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/metrics/__init__.py b/src/pyepal/metrics/__init__.py
new file mode 100644
index 0000000..8d2d994
--- /dev/null
+++ b/src/pyepal/metrics/__init__.py
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+# Copyright 2022 PyePAL authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/src/pyepal/metrics/stationarity.py b/src/pyepal/metrics/stationarity.py
new file mode 100644
index 0000000..da50567
--- /dev/null
+++ b/src/pyepal/metrics/stationarity.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# Copyright 2022 PyePAL authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+from typing import List, Tuple, Union
+
+import numpy as np
+from scipy.stats import levene
+
+
+def levene_stationarity_test(
+    X: np.array,
+    excluded_cols: Union[List[int], None] = None,
+    center: str = "median",
+    proportiontocut: float = 0.05,
+) -> Tuple[float, float]:
+    """Levene's test for stationarity - commmon assumption for Gaussian processes
+    with ||x-x'|| in the kernel.
+
+    Args:
+        X (np.array): Feature matrix.
+        excluded_cols (Union[List[int], None], optional): Optional list of column indices to exclude.
+            Defaults to None.
+        center (str, optional): One from {'mean’, ‘median’, ‘trimmed’}.
+            Which function of the data to use in the test. The default is ‘median’.
+             Defaults to "median".
+            * ‘median’ : Recommended for skewed (non-normal) distributions>
+            * ‘mean’ : Recommended for symmetric, moderate-tailed distributions.
+            * ‘trimmed’ : Recommended for heavy-tailed distributions.
+        proportiontocut (float, optional): When center is ‘trimmed’,
+            this gives the proportion of data points to cut from each end.
+            (See scipy.stats.trim_mean.). Defaults to 0.05.
+
+    Returns:
+        Tuple[float, float]: The test statistic and the p-value for the test.
+    """
+    if excluded_cols is None:
+        excluded_cols = []
+    cols = [i for i in range(X.shape[1]) if i not in excluded_cols]
+
+    return levene(*X[:, cols].T, center=center, proportiontocut=proportiontocut)
diff --git a/src/pyepal/metrics/uncertainty.py b/src/pyepal/metrics/uncertainty.py
new file mode 100644
index 0000000..36ec325
--- /dev/null
+++ b/src/pyepal/metrics/uncertainty.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Copyright 2022 PyePAL authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import numpy as np
+
+
+def picp(y_true: np.ndarray, y_lower: np.array, y_upper: np.array) -> float:
+    """
+    Prediction Interval Coverage Probability (PICP). Computes the fraction of samples for which the grounds truth lies
+    within predicted interval.
+    Taken from https://github.com/IBM/UQ360/blob/main/uq360/metrics/regression_metrics.py
+
+    Args:
+        y_true: Ground truth
+        y_lower: predicted lower bound
+        y_upper: predicted upper bound
+
+    Returns:
+        float: the fraction of samples for which the grounds truth lies within predicted interval.
+    """
+    satisfies_upper_bound = y_true <= y_upper
+    satisfies_lower_bound = y_true >= y_lower
+    return np.mean(satisfies_upper_bound * satisfies_lower_bound)
diff --git a/src/pyepal/models/__init__.py b/src/pyepal/models/__init__.py
index dfaf98a..8d2d994 100644
--- a/src/pyepal/models/__init__.py
+++ b/src/pyepal/models/__init__.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/models/gbdt.py b/src/pyepal/models/gbdt.py
index e10ca7a..89751c5 100644
--- a/src/pyepal/models/gbdt.py
+++ b/src/pyepal/models/gbdt.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/models/gpr.py b/src/pyepal/models/gpr.py
index 8622753..a448fa4 100644
--- a/src/pyepal/models/gpr.py
+++ b/src/pyepal/models/gpr.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/models/nt.py b/src/pyepal/models/nt.py
index f74b3f3..a760114 100644
--- a/src/pyepal/models/nt.py
+++ b/src/pyepal/models/nt.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/__init__.py b/src/pyepal/pal/__init__.py
index dfaf98a..8d2d994 100644
--- a/src/pyepal/pal/__init__.py
+++ b/src/pyepal/pal/__init__.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/_hypervolume.py b/src/pyepal/pal/_hypervolume.py
index 6f00fbe..917e462 100644
--- a/src/pyepal/pal/_hypervolume.py
+++ b/src/pyepal/pal/_hypervolume.py
@@ -2,7 +2,7 @@
 # This code is part of the nevergrad package (https://github.com/facebookresearch/nevergrad)
 # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
 #
-# (C) Copyright 2020 Enthought, Inc., Austin, TX
+# (C) Copyright 2022 Enthought, Inc., Austin, TX
 # All rights reserved.
 #
 # This work is implemented under the Formulations and Computational Engineering (FORCE) project within Horizon 2020
diff --git a/src/pyepal/pal/core.py b/src/pyepal/pal/core.py
index b92f493..37facdc 100644
--- a/src/pyepal/pal/core.py
+++ b/src/pyepal/pal/core.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 # pylint:disable=anomalous-backslash-in-string
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/pal_base.py b/src/pyepal/pal/pal_base.py
index fcf44de..3a961f9 100644
--- a/src/pyepal/pal/pal_base.py
+++ b/src/pyepal/pal/pal_base.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 # pylint:disable=anomalous-backslash-in-string
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/pal_coregionalized.py b/src/pyepal/pal/pal_coregionalized.py
index f81f34f..5ac1240 100644
--- a/src/pyepal/pal/pal_coregionalized.py
+++ b/src/pyepal/pal/pal_coregionalized.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/pal_finite_ensemble.py b/src/pyepal/pal/pal_finite_ensemble.py
index 3d75a89..ad036a5 100644
--- a/src/pyepal/pal/pal_finite_ensemble.py
+++ b/src/pyepal/pal/pal_finite_ensemble.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/pal_gbdt.py b/src/pyepal/pal/pal_gbdt.py
index 595fc9f..5e72209 100644
--- a/src/pyepal/pal/pal_gbdt.py
+++ b/src/pyepal/pal/pal_gbdt.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/pal_gpflowgpr.py b/src/pyepal/pal/pal_gpflowgpr.py
index 38b9d12..9392cdf 100644
--- a/src/pyepal/pal/pal_gpflowgpr.py
+++ b/src/pyepal/pal/pal_gpflowgpr.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/pal_gpy.py b/src/pyepal/pal/pal_gpy.py
index 283cb4f..9a17ea4 100644
--- a/src/pyepal/pal/pal_gpy.py
+++ b/src/pyepal/pal/pal_gpy.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/pal_neural_tangent.py b/src/pyepal/pal/pal_neural_tangent.py
index 46dc2c3..61ed564 100644
--- a/src/pyepal/pal/pal_neural_tangent.py
+++ b/src/pyepal/pal/pal_neural_tangent.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/pal_sklearn.py b/src/pyepal/pal/pal_sklearn.py
index 44bd46e..ea10cb0 100644
--- a/src/pyepal/pal/pal_sklearn.py
+++ b/src/pyepal/pal/pal_sklearn.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/schedules.py b/src/pyepal/pal/schedules.py
index 1f223ec..3d57025 100644
--- a/src/pyepal/pal/schedules.py
+++ b/src/pyepal/pal/schedules.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/utils.py b/src/pyepal/pal/utils.py
index aa07e82..e8c59d3 100644
--- a/src/pyepal/pal/utils.py
+++ b/src/pyepal/pal/utils.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/pal/validate_inputs.py b/src/pyepal/pal/validate_inputs.py
index db309b1..328f68f 100644
--- a/src/pyepal/pal/validate_inputs.py
+++ b/src/pyepal/pal/validate_inputs.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/pyepal/plotting/__init__.py b/src/pyepal/plotting/__init__.py
index 84be7cd..0678ef0 100644
--- a/src/pyepal/plotting/__init__.py
+++ b/src/pyepal/plotting/__init__.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.


Test patch:
diff --git a/tests/conftest.py b/tests/conftest.py
index e7ccb2f..0a45e60 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_coregionalized.py b/tests/test_coregionalized.py
index 5f48ca3..9eaa51c 100644
--- a/tests/test_coregionalized.py
+++ b/tests/test_coregionalized.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_metrics.py b/tests/test_metrics.py
new file mode 100644
index 0000000..7efd250
--- /dev/null
+++ b/tests/test_metrics.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+import numpy as np
+import pytest
+
+from pyepal.metrics.stationarity import levene_stationarity_test
+from pyepal.metrics.uncertainty import picp
+
+
+def test_levene_stationarity_test():
+    a = np.random.multivariate_normal([0, 0], [[1, 1], [1, 1]], size=(10))
+    assert levene_stationarity_test(a)[1] == pytest.approx(1)
+
+
+def test_picp():
+    a = np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
+    b = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
+    c = np.array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1])
+
+    assert picp(a, c, b) == pytest.approx(1)
+    assert picp(a, c + 2, b + 1) == pytest.approx(0)
diff --git a/tests/test_models_gbdt.py b/tests/test_models_gbdt.py
index 236d8db..1b4e675 100644
--- a/tests/test_models_gbdt.py
+++ b/tests/test_models_gbdt.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_models_gpy.py b/tests/test_models_gpy.py
index 91dd5fe..7cd324e 100644
--- a/tests/test_models_gpy.py
+++ b/tests/test_models_gpy.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_models_nt.py b/tests/test_models_nt.py
index aa66b9c..36224d0 100644
--- a/tests/test_models_nt.py
+++ b/tests/test_models_nt.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_base.py b/tests/test_pal_base.py
index 8a254b7..0875f4e 100644
--- a/tests/test_pal_base.py
+++ b/tests/test_pal_base.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_core.py b/tests/test_pal_core.py
index 8353fcb..ea84349 100644
--- a/tests/test_pal_core.py
+++ b/tests/test_pal_core.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_coregionalized.py b/tests/test_pal_coregionalized.py
index 6a99fa8..647a0f8 100644
--- a/tests/test_pal_coregionalized.py
+++ b/tests/test_pal_coregionalized.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_finite_ensemble.py b/tests/test_pal_finite_ensemble.py
index f220ec4..11bf687 100644
--- a/tests/test_pal_finite_ensemble.py
+++ b/tests/test_pal_finite_ensemble.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_gbdt.py b/tests/test_pal_gbdt.py
index 70d1718..9693889 100644
--- a/tests/test_pal_gbdt.py
+++ b/tests/test_pal_gbdt.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_gpflowgpr.py b/tests/test_pal_gpflowgpr.py
index 90807f1..bdb0a37 100644
--- a/tests/test_pal_gpflowgpr.py
+++ b/tests/test_pal_gpflowgpr.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_gpy.py b/tests/test_pal_gpy.py
index 8ecb77a..cc2ec15 100644
--- a/tests/test_pal_gpy.py
+++ b/tests/test_pal_gpy.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_neural_tangent.py b/tests/test_pal_neural_tangent.py
index 5b0ab82..071ec38 100644
--- a/tests/test_pal_neural_tangent.py
+++ b/tests/test_pal_neural_tangent.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_schedules.py b/tests/test_pal_schedules.py
index 5e196bc..2813471 100644
--- a/tests/test_pal_schedules.py
+++ b/tests/test_pal_schedules.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_sklearn.py b/tests/test_pal_sklearn.py
index 6cc5a65..367c671 100644
--- a/tests/test_pal_sklearn.py
+++ b/tests/test_pal_sklearn.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_pal_utils.py b/tests/test_pal_utils.py
index 6e264da..fbe3b55 100644
--- a/tests/test_pal_utils.py
+++ b/tests/test_pal_utils.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_plotting.py b/tests/test_plotting.py
index ee6b625..41c3b69 100644
--- a/tests/test_plotting.py
+++ b/tests/test_plotting.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/tests/test_validate_inputs.py b/tests/test_validate_inputs.py
index 6da05ad..0faae08 100644
--- a/tests/test_validate_inputs.py
+++ b/tests/test_validate_inputs.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright 2020 PyePAL authors
+# Copyright 2022 PyePAL authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.