Commit 513472ee authored by Thibault Hallouin's avatar Thibault Hallouin
Browse files

add unit tests on contingency-based metric values

Showing with 268 additions and 0 deletions
+268 -0
......@@ -136,6 +136,274 @@ TEST(ProbabilistTests, TestQuantiles)
EXPECT_TRUE(xt::allclose(metrics[1], crps));
}
TEST(ProbabilistTests, TestContingency)
{
// read in data
xt::xtensor<double, 1> observed;
xt::xtensor<double, 2> predicted;
std::tie(observed, predicted) = load_data_p();
// compute scores
xt::xtensor<double, 2> thresholds = {{690, 534, 445, NAN}};
std::vector<xt::xarray<double>> metrics =
evalhyd::evalp(
// shape: (sites [1], time [t])
xt::eval(xt::view(observed, xt::newaxis(), xt::all())),
// shape: (sites [1], lead times [1], members [m], time [t])
xt::eval(xt::view(predicted, xt::newaxis(), xt::newaxis(), xt::all(), xt::all())),
{"POD", "POFD", "FAR", "CSI", "ROCSS"},
thresholds,
"low"
);
// check results
// POD
xt::xtensor<double, 6> pod =
{{{{{{ 1. , 1. , 1. , NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.863309, 0.854369, 0.752941, NAN},
{ 0.848921, 0.854369, 0.752941, NAN},
{ 0.848921, 0.854369, 0.752941, NAN},
{ 0.848921, 0.84466 , 0.752941, NAN}}}}}};
EXPECT_TRUE(
xt::sum(xt::isclose(metrics[0], pod, 1e-05, 1e-08, true))
== xt::xscalar<double>(208)
);
// POFD
xt::xtensor<double, 6> pofd =
{{{{{{ 1. , 1. , 1. , NAN},
{ 0.087209, 0.038462, 0.026549, NAN},
{ 0.087209, 0.038462, 0.026549, NAN},
{ 0.087209, 0.038462, 0.026549, NAN},
{ 0.087209, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.026549, NAN},
{ 0.081395, 0.038462, 0.022124, NAN}}}}}};
EXPECT_TRUE(
xt::sum(xt::isclose(metrics[1], pofd, 1e-04, 1e-07, true))
== xt::xscalar<double>(208)
);
// FAR
xt::xtensor<double, 6> far =
{{{{{{ 0.553055, 0.66881 , 0.726688, NAN},
{ 0.111111, 0.083333, 0.085714, NAN},
{ 0.111111, 0.083333, 0.085714, NAN},
{ 0.111111, 0.083333, 0.085714, NAN},
{ 0.111111, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.104478, 0.083333, 0.085714, NAN},
{ 0.106061, 0.083333, 0.085714, NAN},
{ 0.106061, 0.083333, 0.085714, NAN},
{ 0.106061, 0.084211, 0.072464, NAN}}}}}};
EXPECT_TRUE(
xt::sum(xt::isclose(metrics[2], far, 1e-05, 1e-08, true))
== xt::xscalar<double>(208)
);
// CSI
xt::xtensor<double, 6> csi =
{{{{{{ 0.446945, 0.33119 , 0.273312, NAN},
{ 0.779221, 0.792793, 0.703297, NAN},
{ 0.779221, 0.792793, 0.703297, NAN},
{ 0.779221, 0.792793, 0.703297, NAN},
{ 0.779221, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.784314, 0.792793, 0.703297, NAN},
{ 0.771242, 0.792793, 0.703297, NAN},
{ 0.771242, 0.792793, 0.703297, NAN},
{ 0.771242, 0.783784, 0.711111, NAN}}}}}}
;
EXPECT_TRUE(
xt::sum(xt::isclose(metrics[3], csi, 1e-05, 1e-08, true))
== xt::xscalar<double>(208)
);
// ROC skill scores
xt::xtensor<double, 5> rocss =
{{{{{ 0.71085 , 0.783047, 0.713066, NAN}}}}};
EXPECT_TRUE(
xt::sum(xt::isclose(metrics[4], rocss, 1e-05, 1e-08, true))
== xt::xscalar<double>(4)
);
}
TEST(ProbabilistTests, TestMasks)
{
// read in data
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment