From 3bc4823c9e67e75b5156b7b9c406b727c8f9fc6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Thu, 6 Jun 2024 10:48:12 +0200
Subject: [PATCH] Suppress error messages of k_order_perturbation MEX when
 options_.verbosity=0

---
 matlab/stochastic_solver/k_order_pert.m            |  4 +++-
 .../k_order_perturbation/k_order_perturbation.cc   | 14 +++++++++++---
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/matlab/stochastic_solver/k_order_pert.m b/matlab/stochastic_solver/k_order_pert.m
index 41ea2df57b..a7428128c6 100644
--- a/matlab/stochastic_solver/k_order_pert.m
+++ b/matlab/stochastic_solver/k_order_pert.m
@@ -43,7 +43,9 @@ end
 try
     [dynpp_derivs, dyn_derivs] = k_order_perturbation(dr,M_,options_);
 catch ME
-    disp(ME.message)
+    if options_.verbosity > 0
+        disp(ME.message)
+    end
     info(1)=9;
     return
 end
diff --git a/mex/sources/k_order_perturbation/k_order_perturbation.cc b/mex/sources/k_order_perturbation/k_order_perturbation.cc
index 90ee33610b..9cf3232792 100644
--- a/mex/sources/k_order_perturbation/k_order_perturbation.cc
+++ b/mex/sources/k_order_perturbation/k_order_perturbation.cc
@@ -131,6 +131,11 @@ extern "C"
       mexErrMsgTxt("options_.pruning should be a logical scalar");
     bool pruning = static_cast<bool>(mxGetScalar(pruning_mx));
 
+    const mxArray* verbosity_mx = mxGetField(options_mx, 0, "verbosity");
+    if (!(verbosity_mx && mxIsScalar(verbosity_mx) && mxIsNumeric(verbosity_mx)))
+      mexErrMsgTxt("options_.verbosity should be a numeric scalar");
+    int verbosity {static_cast<int>(mxGetScalar(verbosity_mx))};
+
     // Extract various fields from M_
     const mxArray* fname_mx = mxGetField(M_mx, 0, "fname");
     if (!(fname_mx && mxIsChar(fname_mx) && mxGetM(fname_mx) == 1))
@@ -356,18 +361,21 @@ extern "C"
       }
     catch (const KordException& e)
       {
-        e.print();
+        if (verbosity > 0)
+          e.print();
         mexErrMsgTxt(
             ("dynare:k_order_perturbation: Caught Kord exception: " + e.get_message()).c_str());
       }
     catch (const TLException& e)
       {
-        e.print();
+        if (verbosity > 0)
+          e.print();
         mexErrMsgTxt("dynare:k_order_perturbation: Caught TL exception");
       }
     catch (SylvException& e)
       {
-        e.printMessage();
+        if (verbosity > 0)
+          e.printMessage();
         mexErrMsgTxt("dynare:k_order_perturbation: Caught Sylv exception");
       }
     catch (const DynareException& e)
-- 
GitLab