From c282c012f5f54ec48f458ab13235d2a52531e3e1 Mon Sep 17 00:00:00 2001
From: Thibault Hallouin <thibhlln@gmail.com>
Date: Wed, 21 Dec 2022 16:23:58 +0100
Subject: [PATCH] propagate xexpression real type to internal variables

---
 include/evalhyd/evald.hpp | 18 +++++++++---------
 include/evalhyd/evalp.hpp |  4 ++--
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/include/evalhyd/evald.hpp b/include/evalhyd/evald.hpp
index e2f5ddd..8ef12b0 100644
--- a/include/evalhyd/evald.hpp
+++ b/include/evalhyd/evald.hpp
@@ -216,7 +216,7 @@ namespace evalhyd
                 // else if m_cdt provided, use them to generate t_msk
             else if (m_cdt.size() > 0)
             {
-                xt::xtensor<bool, 2> c_msk = xt::zeros<bool>({n_msk, n_tim});
+                B2 c_msk = xt::zeros<bool>({n_msk, n_tim});
 
                 for (int m = 0; m < n_msk; m++)
                     xt::view(c_msk, m) =
@@ -228,7 +228,7 @@ namespace evalhyd
             }
                 // if neither t_msk nor m_cdt provided, generate dummy mask
             else
-                return xt::xtensor<bool, 2>{xt::ones<bool>({std::size_t{1}, n_tim})};
+                return B2({xt::ones<bool>({std::size_t{1}, n_tim})});
         };
 
         auto msk = gen_msk();
@@ -242,7 +242,7 @@ namespace evalhyd
             }
             else if ( transform == "sqrt" )
             {
-                return xt::eval(xt::sqrt(q));
+                return D2(xt::sqrt(q));
             }
             else if ( transform == "inv" )
             {
@@ -250,7 +250,7 @@ namespace evalhyd
                     // determine an epsilon value to avoid zero divide
                     epsilon = xt::mean(q_obs_)() * 0.01;
 
-                return xt::eval(1. / (q + epsilon));
+                return D2(1. / (q + epsilon));
             }
             else if ( transform == "log" )
             {
@@ -258,7 +258,7 @@ namespace evalhyd
                     // determine an epsilon value to avoid log zero
                     epsilon = xt::mean(q_obs_)() * 0.01;
 
-                return xt::eval(xt::log(q + epsilon));
+                return D2(xt::log(q + epsilon));
             }
             else if ( transform == "pow" )
             {
@@ -268,11 +268,11 @@ namespace evalhyd
                         // determine an epsilon value to avoid zero divide
                         epsilon = xt::mean(q_obs_)() * 0.01;
 
-                    return xt::eval(xt::pow(q + epsilon, exponent));
+                    return D2(xt::pow(q + epsilon, exponent));
                 }
                 else
                 {
-                    return xt::eval(xt::pow(q, exponent));
+                    return D2(xt::pow(q, exponent));
                 }
             }
             else
@@ -283,8 +283,8 @@ namespace evalhyd
             }
         };
 
-        auto obs = q_transform(q_obs_);
-        auto prd = q_transform(q_prd_);
+        const D2 obs = q_transform(q_obs_);
+        const D2 prd = q_transform(q_prd_);
 
         // generate bootstrap experiment if requested
         std::vector<xt::xkeep_slice<int>> exp;
diff --git a/include/evalhyd/evalp.hpp b/include/evalhyd/evalp.hpp
index 908ac99..fdf5821 100644
--- a/include/evalhyd/evalp.hpp
+++ b/include/evalhyd/evalp.hpp
@@ -246,7 +246,7 @@ namespace evalhyd
 
         // generate masks from conditions if provided
         auto gen_msk = [&]() {
-            xt::xtensor<bool, 4> c_msk = xt::zeros<bool>({n_sit, n_ltm, n_msk, n_tim});
+            B4 c_msk = xt::zeros<bool>({n_sit, n_ltm, n_msk, n_tim});
             if (m_cdt.size() > 0)
                 for (int s = 0; s < n_sit; s++)
                     for (int l = 0; l < n_ltm; l++)
@@ -259,7 +259,7 @@ namespace evalhyd
                                     );
             return c_msk;
         };
-        const xt::xtensor<bool, 4> c_msk = gen_msk();
+        const B4 c_msk = gen_msk();
 
         // generate bootstrap experiment if requested
         std::vector<xt::xkeep_slice<int>> b_exp;
-- 
GitLab