diff --git a/include/evalhyd/detail/determinist/evaluator.hpp b/include/evalhyd/detail/determinist/evaluator.hpp index 6295a20130e5cc34ad993185203cc8a9a34597ef..bd2b7457ef6ef4f4e64fbe2a050730360622acfd 100644 --- a/include/evalhyd/detail/determinist/evaluator.hpp +++ b/include/evalhyd/detail/determinist/evaluator.hpp @@ -74,7 +74,7 @@ namespace evalhyd t_msk = xt::ones<bool>({n_msk, n_srs, n_tim}); xt::view(t_msk, xt::all()) = xt::view(msk, xt::all(), xt::newaxis(), xt::all()); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { xt::view(t_msk, m) = xt::where(obs_nan | prd_nan, false, xt::view(t_msk, m)); @@ -116,13 +116,13 @@ namespace evalhyd void Evaluator<D2, B2>::calc_mean_obs() { mean_obs = xt::zeros<double>(mean_dims); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto obs_masked = xt::where(xt::view(t_msk, m), q_obs, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) { + for (std::size_t e = 0; e < n_exp; e++) { // apply the bootstrap sampling auto obs = xt::view(obs_masked, xt::all(), b_exp[e]); xt::view(mean_obs, m, e) = @@ -143,13 +143,13 @@ namespace evalhyd void Evaluator<D2, B2>::calc_mean_prd() { mean_prd = xt::zeros<double>(mean_dims); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto prd_masked = xt::where(xt::view(t_msk, m), q_prd, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) { + for (std::size_t e = 0; e < n_exp; e++) { // apply the bootstrap sampling auto prd = xt::view(prd_masked, xt::all(), b_exp[e]); xt::view(mean_prd, m, e) = @@ -190,12 +190,12 @@ namespace evalhyd void Evaluator<D2, B2>::calc_quad_obs() { quad_obs = xt::zeros<double>(inter_dims); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto obs_masked = xt::where(xt::view(t_msk, m), q_obs, NAN); - for (int e = 0; e < n_exp; e++) { + for (std::size_t e = 0; e < n_exp; e++) { xt::view(quad_obs, m, e) = xt::square( obs_masked - xt::view(mean_obs, m, e) ); @@ -218,12 +218,12 @@ namespace evalhyd void Evaluator<D2, B2>::calc_quad_prd() { quad_prd = xt::zeros<double>(inter_dims); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto prd_masked = xt::where(xt::view(t_msk, m), q_prd, NAN); - for (int e = 0; e < n_exp; e++) { + for (std::size_t e = 0; e < n_exp; e++) { xt::view(quad_prd, m, e) = xt::square( prd_masked - xt::view(mean_prd, m, e) ); @@ -260,14 +260,14 @@ namespace evalhyd // calculate error in timing and dynamics $r_{pearson}$ // (Pearson's correlation coefficient) r_pearson = xt::zeros<double>(inner_dims); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto prd_masked = xt::where(xt::view(t_msk, m), q_prd, NAN); auto obs_masked = xt::where(xt::view(t_msk, m), q_obs, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) { + for (std::size_t e = 0; e < n_exp; e++) { auto prd = xt::view(prd_masked, xt::all(), b_exp[e]); auto obs = xt::view(obs_masked, xt::all(), b_exp[e]); auto r_num = xt::nansum( @@ -309,14 +309,14 @@ namespace evalhyd { // calculate error in spread of flow $alpha$ alpha = xt::zeros<double>(inner_dims); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto prd_masked = xt::where(xt::view(t_msk, m), q_prd, NAN); auto obs_masked = xt::where(xt::view(t_msk, m), q_obs, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) { + for (std::size_t e = 0; e < n_exp; e++) { auto prd = xt::view(prd_masked, xt::all(), b_exp[e]); auto obs = xt::view(obs_masked, xt::all(), b_exp[e]); xt::view(alpha, m, e) = @@ -342,14 +342,14 @@ namespace evalhyd { // calculate $bias$ bias = xt::zeros<double>(inner_dims); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto prd_masked = xt::where(xt::view(t_msk, m), q_prd, NAN); auto obs_masked = xt::where(xt::view(t_msk, m), q_obs, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) { + for (std::size_t e = 0; e < n_exp; e++) { auto prd = xt::view(prd_masked, xt::all(), b_exp[e]); auto obs = xt::view(obs_masked, xt::all(), b_exp[e]); xt::view(bias, m, e) = @@ -371,13 +371,13 @@ namespace evalhyd { // compute RMSE RMSE = xt::zeros<double>(final_dims); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto quad_err_masked = xt::where(xt::view(t_msk, m), quad_err, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) { + for (std::size_t e = 0; e < n_exp; e++) { auto err2 = xt::view(quad_err_masked, xt::all(), b_exp[e]); xt::view(RMSE, xt::all(), m, e) = xt::sqrt(xt::nanmean(err2, -1)); } @@ -399,13 +399,13 @@ namespace evalhyd void Evaluator<D2, B2>::calc_NSE() { NSE = xt::zeros<double>(final_dims); - for (int m = 0; m < n_msk; m++) { + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto quad_err_masked = xt::where(xt::view(t_msk, m), quad_err, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) { + for (std::size_t e = 0; e < n_exp; e++) { // compute squared errors operands auto err2 = xt::view(quad_err_masked, xt::all(), b_exp[e]); xt::xtensor<double, 1> f_num = @@ -438,8 +438,8 @@ namespace evalhyd void Evaluator<D2, B2>::calc_KGE() { KGE = xt::zeros<double>(final_dims); - for (int m = 0; m < n_msk; m++) { - for (int e = 0; e < n_exp; e++) { + for (std::size_t m = 0; m < n_msk; m++) { + for (std::size_t e = 0; e < n_exp; e++) { // compute KGE xt::view(KGE, xt::all(), m, e) = 1 - xt::sqrt( xt::square(xt::view(r_pearson, m, e) - 1) @@ -474,8 +474,8 @@ namespace evalhyd void Evaluator<D2, B2>::calc_KGEPRIME() { KGEPRIME = xt::zeros<double>(final_dims); - for (int m = 0; m < n_msk; m++) { - for (int e = 0; e < n_exp; e++) { + for (std::size_t m = 0; m < n_msk; m++) { + for (std::size_t e = 0; e < n_exp; e++) { // calculate error in spread of flow $gamma$ auto gamma = xt::view(alpha, m, e) * (xt::view(mean_obs, m, e, xt::all(), 0) diff --git a/include/evalhyd/detail/probabilist/evaluator.hpp b/include/evalhyd/detail/probabilist/evaluator.hpp index 07bd764574e4dbfc4937fc7c46c6fd85559883f9..7574b197d5d9098f034838b9c3e32b77d868b54c 100644 --- a/include/evalhyd/detail/probabilist/evaluator.hpp +++ b/include/evalhyd/detail/probabilist/evaluator.hpp @@ -24,7 +24,7 @@ namespace evalhyd using view1d_xtensor2d_double_type = decltype( xt::view( std::declval<const D2&>(), - std::declval<int>(), + std::declval<std::size_t>(), xt::all() ) ); @@ -32,8 +32,8 @@ namespace evalhyd using view2d_xtensor4d_double_type = decltype( xt::view( std::declval<const D4&>(), - std::declval<int>(), - std::declval<int>(), + std::declval<std::size_t>(), + std::declval<std::size_t>(), xt::all(), xt::all() ) @@ -42,8 +42,8 @@ namespace evalhyd using view2d_xtensor4d_bool_type = decltype( xt::view( std::declval<const B4&>(), - std::declval<int>(), - std::declval<int>(), + std::declval<std::size_t>(), + std::declval<std::size_t>(), xt::all(), xt::all() ) @@ -187,7 +187,7 @@ namespace evalhyd // compute variable one sample at a time bar_o = xt::zeros<double>({n_msk, n_exp, n_thr}); - for (int e = 0; e < n_exp; e++) + for (std::size_t e = 0; e < n_exp; e++) { // apply the bootstrap sampling auto o_k_masked_sampled = @@ -284,14 +284,14 @@ namespace evalhyd BS = xt::zeros<double>({n_msk, n_exp, n_thr}); // compute variable one mask at a time to minimise memory imprint - for (int m = 0; m < n_msk; m++) + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto bs_masked = xt::where(xt::row(t_msk, m), bs, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) + for (std::size_t e = 0; e < n_exp; e++) { // apply the bootstrap sampling auto bs_masked_sampled = @@ -354,7 +354,7 @@ namespace evalhyd BS_CRD = xt::zeros<double>({n_msk, n_exp, n_thr, std::size_t {3}}); // compute variable one mask at a time to minimise memory imprint - for (int m = 0; m < n_msk; m++) + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) @@ -362,7 +362,7 @@ namespace evalhyd auto y_k_masked = xt::where(xt::row(t_msk, m), y_k, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) + for (std::size_t e = 0; e < n_exp; e++) { // apply the bootstrap sampling auto o_k_masked_sampled = @@ -479,7 +479,7 @@ namespace evalhyd BS_LBD = xt::zeros<double>({n_msk, n_exp, n_thr, std::size_t {3}}); // compute variable one mask at a time to minimise memory imprint - for (int m = 0; m < n_msk; m++) + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) @@ -487,7 +487,7 @@ namespace evalhyd auto y_k_masked = xt::where(xt::row(t_msk, m), y_k, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) + for (std::size_t e = 0; e < n_exp; e++) { // apply the bootstrap sampling auto o_k_masked_sampled = @@ -601,7 +601,7 @@ namespace evalhyd BSS = xt::zeros<double>({n_msk, n_exp, n_thr}); // compute variable one mask at a time to minimise memory imprint - for (int m = 0; m < n_msk; m++) + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) @@ -609,7 +609,7 @@ namespace evalhyd auto bs_masked = xt::where(xt::row(t_msk, m), bs, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) + for (std::size_t e = 0; e < n_exp; e++) { // apply the bootstrap sampling auto o_k_masked_sampled = @@ -707,14 +707,14 @@ namespace evalhyd QS = xt::zeros<double>({n_msk, n_exp, n_mbr}); // compute variable one mask at a time to minimise memory imprint - for (int m = 0; m < n_msk; m++) + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto qs_masked = xt::where(xt::row(t_msk, m), qs, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) + for (std::size_t e = 0; e < n_exp; e++) { // apply the bootstrap sampling auto qs_masked_sampled = @@ -773,14 +773,14 @@ namespace evalhyd CRPS = xt::zeros<double>({n_msk, n_exp}); // compute variable one mask at a time to minimise memory imprint - for (int m = 0; m < n_msk; m++) + for (std::size_t m = 0; m < n_msk; m++) { // apply the mask // (using NaN workaround until reducers work on masked_view) auto crps_masked = xt::where(xt::row(t_msk, m), crps, NAN); // compute variable one sample at a time - for (int e = 0; e < n_exp; e++) + for (std::size_t e = 0; e < n_exp; e++) { // apply the bootstrap sampling auto crps_masked_sampled = diff --git a/include/evalhyd/detail/uncertainty.hpp b/include/evalhyd/detail/uncertainty.hpp index fd26b45e17c868d9ad49b0498862a283522a5aa1..e55d04638e6d8aa42021b3e36bedad7cddf7c973 100644 --- a/include/evalhyd/detail/uncertainty.hpp +++ b/include/evalhyd/detail/uncertainty.hpp @@ -58,7 +58,7 @@ namespace evalhyd // check constant time interval auto ti = x_timepoints[1] - x_timepoints[0]; - for (int t = 1; t < x_timepoints.size() - 1; t++) + for (std::size_t t = 1; t < x_timepoints.size() - 1; t++) if (x_timepoints[t + 1] - x_timepoints[t] != ti) { throw std::runtime_error( "time interval not constant across datetimes" @@ -128,7 +128,7 @@ namespace evalhyd ); xt::xtensor<int, 1> idx = xt::concatenate(xt::xtuple(i0, i1), 0); - for (int p = 2; p < exp.size(); p++) { + for (std::size_t p = 2; p < exp.size(); p++) { auto i = xt::flatten_indices( xt::argwhere(xt::equal(year_blocks, exp(p))) ); diff --git a/include/evalhyd/evald.hpp b/include/evalhyd/evald.hpp index 32e9c161506d9b0bfb69d633eb21470bc3381aba..625ae232477215c3a62fc58e56463f11ba58a4f9 100644 --- a/include/evalhyd/evald.hpp +++ b/include/evalhyd/evald.hpp @@ -213,12 +213,12 @@ namespace evalhyd // if t_msk provided, it takes priority if (t_msk_.size() > 0) return t_msk_; - // else if m_cdt provided, use them to generate t_msk + // else if m_cdt provided, use them to generate t_msk else if (m_cdt.size() > 0) { B2 c_msk = xt::zeros<bool>({n_msk, n_tim}); - for (int m = 0; m < n_msk; m++) + for (std::size_t m = 0; m < n_msk; m++) xt::view(c_msk, m) = masks::generate_mask_from_conditions( m_cdt[0], xt::view(q_obs_, 0), q_prd_ @@ -226,7 +226,7 @@ namespace evalhyd return c_msk; } - // if neither t_msk nor m_cdt provided, generate dummy mask + // if neither t_msk nor m_cdt provided, generate dummy mask else return B2({xt::ones<bool>({std::size_t{1}, n_tim})}); }; diff --git a/include/evalhyd/evalp.hpp b/include/evalhyd/evalp.hpp index 0103ab3c01e3349b49a55e7b8534ead22d178f1e..7a044c3eccc50dc431c07d353dfedb2755eddcfc 100644 --- a/include/evalhyd/evalp.hpp +++ b/include/evalhyd/evalp.hpp @@ -249,9 +249,9 @@ namespace evalhyd auto gen_msk = [&]() { 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++) - for (int m = 0; m < n_msk; m++) + for (std::size_t s = 0; s < n_sit; s++) + for (std::size_t l = 0; l < n_ltm; l++) + for (std::size_t m = 0; m < n_msk; m++) xt::view(c_msk, s, l, m) = masks::generate_mask_from_conditions( xt::view(m_cdt, s, m), @@ -291,9 +291,9 @@ namespace evalhyd auto summary = bootstrap.find("summary")->second; // compute variables one site at a time to minimise memory imprint - for (int s = 0; s < n_sit; s++) + for (std::size_t s = 0; s < n_sit; s++) // compute variables one lead time at a time to minimise memory imprint - for (int l = 0; l < n_ltm; l++) + for (std::size_t l = 0; l < n_ltm; l++) { // instantiate probabilist evaluator const auto q_obs_v = xt::view(q_obs_, s, xt::all()); @@ -335,7 +335,7 @@ namespace evalhyd } // retrieve or compute requested metrics - for (int m = 0; m < metrics.size(); m++) + for (std::size_t m = 0; m < metrics.size(); m++) { const auto& metric = metrics[m];