Start refactoring of `-o` and `-v` (#7449)
authorGereon Kremer <nafur42@gmail.com>
Thu, 4 Nov 2021 19:15:28 +0000 (12:15 -0700)
committerGitHub <noreply@github.com>
Thu, 4 Nov 2021 19:15:28 +0000 (19:15 +0000)
This PR does the first step in consolidating our various output mechanisms. The goal is to have only three major ways to output information:
- verbose(level) prints log-like information to the user via stderr, -v and -q increase and decrease the verbosity, respectively.
- output(tag) prints structured information (as s-expressions) to the user via stdout, -o enables individual tags.
- Trace(tag) prints log-like information to the developer via stdout, -t enables individual tags.
While Debug and Trace (and eventually Dump) will be combined within Trace, all of Warning, Message, Notice and Chat will be combined into verbose.

25 files changed:
src/api/cpp/cvc5.cpp
src/main/command_executor.cpp
src/options/mkoptions.py
src/options/options_handler.cpp
src/smt/check_models.cpp
src/smt/env.cpp
src/smt/env.h
src/smt/env_obj.cpp
src/smt/env_obj.h
src/smt/quant_elim_solver.cpp
src/smt/solver_engine.cpp
src/smt/sygus_solver.cpp
src/theory/datatypes/theory_datatypes.cpp
src/theory/quantifiers/alpha_equivalence.cpp
src/theory/quantifiers/ematching/inst_strategy_e_matching.cpp
src/theory/quantifiers/ematching/trigger.cpp
src/theory/quantifiers/instantiate.cpp
src/theory/quantifiers/sygus/synth_conjecture.cpp
src/theory/quantifiers/sygus_sampler.cpp
src/theory/theory_engine.cpp
src/theory/uf/cardinality_extension.cpp
test/regress/regress0/options/set-and-get-options.smt2
test/regress/regress0/sygus/issue5512-vvv.sy
test/unit/api/java/SolverTest.java
test/unit/api/solver_black.cpp

index 0450ac06a7a236ed1024b52f594bd381f952d0b3..90f6f0d5647688f10037d975b3ec6cfe1d06e0d3 100644 (file)
@@ -7862,12 +7862,12 @@ bool Solver::isOutputOn(const std::string& tag) const
 
 std::ostream& Solver::getOutput(const std::string& tag) const
 {
-  // `getOutput(tag)` may raise an `OptionException`, which we do not want to
+  // `output(tag)` may raise an `OptionException`, which we do not want to
   // forward as such. We thus do not use the standard exception handling macros
   // here but roll our own.
   try
   {
-    return d_slv->getEnv().getOutput(tag);
+    return d_slv->getEnv().output(tag);
   }
   catch (const cvc5::Exception& e)
   {
index f08d9adde520312ee634c664fddd47b86ff94e92..be3652dd4f0f0f61304f1a40297b396f9c0abc11 100644 (file)
@@ -200,8 +200,7 @@ bool solverInvoke(api::Solver* solver,
   // print output for -o raw-benchmark
   if (solver->isOutputOn("raw-benchmark"))
   {
-    std::ostream& ss = solver->getOutput("raw-benchmark");
-    cmd->toStream(ss);
+    cmd->toStream(solver->getOutput("raw-benchmark"));
   }
 
   // In parse-only mode, we do not invoke any of the commands except define-fun
index 0db16e7c65a2fca0bbb9eaec15bbc0940951f564..63ca49c7667c4b5a69ce7367d3ef2a9fa57b05e8 100644 (file)
@@ -524,8 +524,9 @@ def generate_module_mode_impl(module):
         if option.name is None or not option.mode:
             continue
         cases = [
-            'case {type}::{enum}: return os << "{type}::{enum}";'.format(
-                type=option.type, enum=x) for x in option.mode.keys()
+            'case {type}::{enum}: return os << "{name}";'.format(
+                type=option.type, enum=enum, name=info[0]['name'])
+            for enum,info in option.mode.items()
         ]
         res.append(
             TPL_MODE_STREAM_OPERATOR.format(type=option.type,
index 2a7331c67255ae2b27d8d1668ab68a0ed3ff1b51..b58063dbbdc2cbea4704c1d3bb8a2f9dc69f9074 100644 (file)
@@ -269,8 +269,7 @@ void OptionsHandler::enableOutputTag(const std::string& flag,
 {
   size_t tagid = static_cast<size_t>(stringToOutputTag(optarg));
   Assert(d_options->base.outputTagHolder.size() > tagid)
-      << "Trying to enable an output tag whose value is larger than the bitset "
-         "that holds it. Maybe someone forgot to update the bitset size?";
+      << "Output tag is larger than the bitset that holds it.";
   d_options->base.outputTagHolder.set(tagid);
 }
 
index 5d16c12ce1e4dfe62f94a4d08b181dcdb3f89149..13e504835330ccba448db0091dd06f33aa57d91c 100644 (file)
@@ -64,8 +64,8 @@ void CheckModels::checkModel(TheoryModel* m,
   // Now go through all our user assertions checking if they're satisfied.
   for (const Node& assertion : al)
   {
-    Notice() << "SolverEngine::checkModel(): checking assertion " << assertion
-             << std::endl;
+    verbose(1) << "SolverEngine::checkModel(): checking assertion " << assertion
+               << std::endl;
 
     // Apply any define-funs from the problem. We do not expand theory symbols
     // like integer division here. Hence, the code below is not able to properly
@@ -73,17 +73,19 @@ void CheckModels::checkModel(TheoryModel* m,
     // is not trustworthy, since the UF introduced by expanding definitions may
     // not be properly constrained.
     Node n = sm.apply(assertion, false);
-    Notice() << "SolverEngine::checkModel(): -- substitutes to " << n
-             << std::endl;
+    verbose(1) << "SolverEngine::checkModel(): -- substitutes to " << n
+               << std::endl;
 
     n = rewrite(n);
-    Notice() << "SolverEngine::checkModel(): -- rewrites to " << n << std::endl;
+    verbose(1) << "SolverEngine::checkModel(): -- rewrites to " << n
+               << std::endl;
 
     // We look up the value before simplifying. If n contains quantifiers,
     // this may increases the chance of finding its value before the node is
     // altered by simplification below.
     n = m->getValue(n);
-    Notice() << "SolverEngine::checkModel(): -- get value : " << n << std::endl;
+    verbose(1) << "SolverEngine::checkModel(): -- get value : " << n
+               << std::endl;
 
     if (n.isConst() && n.getConst<bool>())
     {
@@ -109,7 +111,7 @@ void CheckModels::checkModel(TheoryModel* m,
     if (!n.isConst())
     {
       // Not constant, print a less severe warning message here.
-      Warning()
+      warning()
           << "Warning : SolverEngine::checkModel(): cannot check simplified "
              "assertion : "
           << n << std::endl;
@@ -118,8 +120,8 @@ void CheckModels::checkModel(TheoryModel* m,
     }
     // Assertions that simplify to false result in an InternalError or
     // Warning being thrown below (when hardFailure is false).
-    Notice() << "SolverEngine::checkModel(): *** PROBLEM: EXPECTED `TRUE' ***"
-             << std::endl;
+    verbose(1) << "SolverEngine::checkModel(): *** PROBLEM: EXPECTED `TRUE' ***"
+               << std::endl;
     std::stringstream ss;
     ss << "SolverEngine::checkModel(): "
        << "ERRORS SATISFYING ASSERTIONS WITH MODEL:" << std::endl
@@ -134,13 +136,13 @@ void CheckModels::checkModel(TheoryModel* m,
     }
     else
     {
-      Warning() << ss.str() << std::endl;
+      warning() << ss.str() << std::endl;
     }
   }
   if (noCheckList.empty())
   {
-    Notice() << "SolverEngine::checkModel(): all assertions checked out OK !"
-             << std::endl;
+    verbose(1) << "SolverEngine::checkModel(): all assertions checked out OK !"
+               << std::endl;
     return;
   }
   // if the noCheckList is non-empty, we could expand definitions on this list
index fd44c274c6f35ce62de9f892cbff7185cafc8b7c..dc9efdf91b082695ba250614e415928dd2246df1 100644 (file)
@@ -148,7 +148,7 @@ const Printer& Env::getPrinter()
 
 std::ostream& Env::getDumpOut() { return *d_options.base.out; }
 
-bool Env::isOutputOn(options::OutputTag tag) const
+bool Env::isOutputOn(OutputTag tag) const
 {
   return d_options.base.outputTagHolder[static_cast<size_t>(tag)];
 }
@@ -156,7 +156,12 @@ bool Env::isOutputOn(const std::string& tag) const
 {
   return isOutputOn(options::stringToOutputTag(tag));
 }
-std::ostream& Env::getOutput(options::OutputTag tag) const
+std::ostream& Env::output(const std::string& tag) const
+{
+  return output(options::stringToOutputTag(tag));
+}
+
+std::ostream& Env::output(OutputTag tag) const
 {
   if (isOutputOn(tag))
   {
@@ -164,9 +169,19 @@ std::ostream& Env::getOutput(options::OutputTag tag) const
   }
   return cvc5::null_os;
 }
-std::ostream& Env::getOutput(const std::string& tag) const
+
+bool Env::isVerboseOn(int64_t level) const
+{
+  return !Configuration::isMuzzledBuild() && d_options.base.verbosity >= level;
+}
+
+std::ostream& Env::verbose(int64_t level) const
 {
-  return getOutput(options::stringToOutputTag(tag));
+  if (isVerboseOn(level))
+  {
+    return *d_options.base.err;
+  }
+  return cvc5::null_os;
 }
 
 Node Env::evaluate(TNode n,
index 1974408ad3cd48a034d8e90170c52c1e021de807..25f8d0b7103cc47f017da665294e44f16fb692f4 100644 (file)
@@ -21,7 +21,6 @@
 
 #include <memory>
 
-#include "options/base_options.h"
 #include "options/options.h"
 #include "proof/method_id.h"
 #include "theory/logic_info.h"
@@ -34,6 +33,10 @@ class StatisticsRegistry;
 class ProofNodeManager;
 class Printer;
 class ResourceManager;
+namespace options {
+enum class OutputTag;
+}
+using OutputTag = options::OutputTag;
 
 namespace context {
 class Context;
@@ -152,25 +155,41 @@ class Env
    * Check whether the output for the given output tag is enabled. Output tags
    * are enabled via the `output` option (or `-o` on the command line).
    */
-  bool isOutputOn(options::OutputTag tag) const;
+  bool isOutputOn(OutputTag tag) const;
   /**
    * Check whether the output for the given output tag (as a string) is enabled.
    * Output tags are enabled via the `output` option (or `-o` on the command
    * line).
    */
   bool isOutputOn(const std::string& tag) const;
+
+  /**
+   * Return the output stream for the given output tag (as a string). If the
+   * output tag is enabled, this returns the output stream from the `out`
+   * option. Otherwise, a null stream (`cvc5::null_os`) is returned.
+   */
+  std::ostream& output(const std::string& tag) const;
+
   /**
    * Return the output stream for the given output tag. If the output tag is
    * enabled, this returns the output stream from the `out` option. Otherwise,
-   * a null stream (`cvc5::null_os`) is returned.
+   * a null stream (`cvc5::null_os`) is returned. The user of this method needs
+   * to make sure that a proper S-expression is printed.
    */
-  std::ostream& getOutput(options::OutputTag tag) const;
+  std::ostream& output(OutputTag tag) const;
+
   /**
-   * Return the output stream for the given output tag (as a string). If the
-   * output tag is enabled, this returns the output stream from the `out`
-   * option. Otherwise, a null stream (`cvc5::null_os`) is returned.
+   * Check whether the verbose output for the given verbosity level is enabled.
+   * The verbosity level is raised (or lowered) with the `-v` (or `-q`) option.
+   */
+  bool isVerboseOn(int64_t level) const;
+
+  /**
+   * Return the output stream for the given verbosity level. If the verbosity
+   * level is enabled, this returns the output stream from the `err` option.
+   * Otherwise, a null stream (`cvc5::null_os`) is returned.
    */
-  std::ostream& getOutput(const std::string& tag) const;
+  std::ostream& verbose(int64_t level) const;
 
   /* Rewrite helpers--------------------------------------------------------- */
   /**
index 926bf61ff555c1584f917504df562350b8bc905b..8af3bdfd0e8ba80f01db0d8c8b62da6a87f661c0 100644 (file)
@@ -70,4 +70,20 @@ StatisticsRegistry& EnvObj::statisticsRegistry() const
   return d_env.getStatisticsRegistry();
 }
 
+bool EnvObj::isOutputOn(OutputTag tag) const { return d_env.isOutputOn(tag); }
+
+std::ostream& EnvObj::output(OutputTag tag) const { return d_env.output(tag); }
+
+bool EnvObj::isVerboseOn(int64_t level) const
+{
+  return d_env.isVerboseOn(level);
+}
+
+std::ostream& EnvObj::verbose(int64_t level) const
+{
+  return d_env.verbose(level);
+}
+
+std::ostream& EnvObj::warning() const { return verbose(0); }
+
 }  // namespace cvc5
index b240b48525c0316a2f80ba35ff81c54e65718f2d..2c88f45b40ccdecd2bc030922b71ffe4ebfa9694 100644 (file)
@@ -22,7 +22,6 @@
 #include <memory>
 
 #include "expr/node.h"
-
 namespace cvc5 {
 
 class Env;
@@ -35,6 +34,10 @@ namespace context {
 class Context;
 class UserContext;
 }  // namespace context
+namespace options {
+enum class OutputTag;
+}
+using OutputTag = options::OutputTag;
 
 class EnvObj
 {
@@ -88,6 +91,21 @@ class EnvObj
   /** Get the statistics registry via Env. */
   StatisticsRegistry& statisticsRegistry() const;
 
+  /** Convenience wrapper for Env::isOutputOn(). */
+  bool isOutputOn(OutputTag tag) const;
+
+  /** Convenience wrapper for Env::output(). */
+  std::ostream& output(OutputTag tag) const;
+
+  /** Convenience wrapper for Env::isVerboseOn(). */
+  bool isVerboseOn(int64_t level) const;
+
+  /** Convenience wrapper for Env::verbose(). */
+  std::ostream& verbose(int64_t) const;
+
+  /** Convenience wrapper for Env::verbose(0). */
+  std::ostream& warning() const;
+
   /** The associated environment. */
   Env& d_env;
 };
index 2ffa0d7c1d9db86726586e5de43ff210231004a4..9193685124a477c3f32dcf976443cbbead2c432d 100644 (file)
@@ -79,9 +79,9 @@ Node QuantElimSolver::getQuantifierElimination(Assertions& as,
   {
     if (r.asSatisfiabilityResult().isSat() != Result::SAT && doFull)
     {
-      Notice()
+      verbose(1)
           << "While performing quantifier elimination, unexpected result : "
-          << r << " for query.";
+          << r << " for query." << std::endl;
       // failed, return original
       return q;
     }
index c7147a67635162500c21866f58481039e76b8c0e..fddea7649b844f8327f503dfe5066d044bb78a52 100644 (file)
@@ -1383,7 +1383,8 @@ std::vector<Node> SolverEngine::reduceUnsatCore(const std::vector<Node>& core)
   Assert(options::unsatCores())
       << "cannot reduce unsat core if unsat cores are turned off";
 
-  Notice() << "SolverEngine::reduceUnsatCore(): reducing unsat core" << endl;
+  d_env->verbose(1) << "SolverEngine::reduceUnsatCore(): reducing unsat core"
+                    << std::endl;
   std::unordered_set<Node> removed;
   for (const Node& skip : core)
   {
@@ -1450,7 +1451,8 @@ void SolverEngine::checkUnsatCore()
   Assert(d_env->getOptions().smt.unsatCores)
       << "cannot check unsat core if unsat cores are turned off";
 
-  Notice() << "SolverEngine::checkUnsatCore(): generating unsat core" << endl;
+  d_env->verbose(1) << "SolverEngine::checkUnsatCore(): generating unsat core"
+                    << std::endl;
   UnsatCore core = getUnsatCore();
 
   // initialize the core checker
@@ -1468,14 +1470,15 @@ void SolverEngine::checkUnsatCore()
     coreChecker->declareSepHeap(sepLocType, sepDataType);
   }
 
-  Notice() << "SolverEngine::checkUnsatCore(): pushing core assertions"
-           << std::endl;
+  d_env->verbose(1) << "SolverEngine::checkUnsatCore(): pushing core assertions"
+                    << std::endl;
   theory::TrustSubstitutionMap& tls = d_env->getTopLevelSubstitutions();
   for (UnsatCore::iterator i = core.begin(); i != core.end(); ++i)
   {
     Node assertionAfterExpansion = tls.apply(*i, false);
-    Notice() << "SolverEngine::checkUnsatCore(): pushing core member " << *i
-             << ", expanded to " << assertionAfterExpansion << "\n";
+    d_env->verbose(1) << "SolverEngine::checkUnsatCore(): pushing core member "
+                      << *i << ", expanded to " << assertionAfterExpansion
+                      << std::endl;
     coreChecker->assertFormula(assertionAfterExpansion);
   }
   Result r;
@@ -1487,7 +1490,8 @@ void SolverEngine::checkUnsatCore()
   {
     throw;
   }
-  Notice() << "SolverEngine::checkUnsatCore(): result is " << r << endl;
+  d_env->verbose(1) << "SolverEngine::checkUnsatCore(): result is " << r
+                    << std::endl;
   if (r.asSatisfiabilityResult().isUnknown())
   {
     Warning() << "SolverEngine::checkUnsatCore(): could not check core result "
@@ -1511,7 +1515,8 @@ void SolverEngine::checkModel(bool hardFailure)
 
   TimerStat::CodeTimer checkModelTimer(d_stats->d_checkModelTime);
 
-  Notice() << "SolverEngine::checkModel(): generating model" << endl;
+  d_env->verbose(1) << "SolverEngine::checkModel(): generating model"
+                    << std::endl;
   TheoryModel* m = getAvailableModel("check model");
   Assert(m != nullptr);
 
index 5db9804c6985e7ee42293a47ad07f252d4f159de..4c8d3e5bd2a3529cab0d4ee7db0a40c55fce1ecb 100644 (file)
@@ -257,8 +257,11 @@ void SygusSolver::checkSynthSolution(Assertions& as)
 {
   NodeManager* nm = NodeManager::currentNM();
   SkolemManager* sm = nm->getSkolemManager();
-  Notice() << "SygusSolver::checkSynthSolution(): checking synthesis solution"
-           << std::endl;
+  if (isVerboseOn(1))
+  {
+    verbose(1) << "SyGuS::checkSynthSolution: checking synthesis solution"
+               << std::endl;
+  }
   std::map<Node, std::map<Node, Node>> sol_map;
   // Get solutions and build auxiliary vectors for substituting
   QuantifiersEngine* qe = d_smtSolver.getQuantifiersEngine();
@@ -308,13 +311,19 @@ void SygusSolver::checkSynthSolution(Assertions& as)
   std::unordered_map<Node, Node> cache;
   for (const Node& assertion : alist)
   {
-    Notice() << "SygusSolver::checkSynthSolution(): checking assertion "
-             << assertion << std::endl;
+    if (isVerboseOn(1))
+    {
+      verbose(1) << "SyGuS::checkSynthSolution: checking assertion "
+                 << assertion << std::endl;
+    }
     Trace("check-synth-sol") << "Retrieving assertion " << assertion << "\n";
     // Apply any define-funs from the problem.
     Node n = d_smtSolver.getPreprocessor()->expandDefinitions(assertion, cache);
-    Notice() << "SygusSolver::checkSynthSolution(): -- expands to " << n
-             << std::endl;
+    if (isVerboseOn(1))
+    {
+      verbose(1) << "SyGuS::checkSynthSolution: -- expands to " << n
+                 << std::endl;
+    }
     Trace("check-synth-sol") << "Expanded assertion " << n << "\n";
     if (conjs.find(n) == conjs.end())
     {
@@ -364,8 +373,12 @@ void SygusSolver::checkSynthSolution(Assertions& as)
       conjBody = conjBody.substitute(
           vars.begin(), vars.end(), skos.begin(), skos.end());
     }
-    Notice() << "SygusSolver::checkSynthSolution(): -- body substitutes to "
-             << conjBody << std::endl;
+
+    if (isVerboseOn(1))
+    {
+      verbose(1) << "SyGuS::checkSynthSolution: -- body substitutes to "
+                 << conjBody << std::endl;
+    }
     Trace("check-synth-sol")
         << "Substituted body of assertion to " << conjBody << "\n";
     solChecker->assertFormula(conjBody);
@@ -381,8 +394,10 @@ void SygusSolver::checkSynthSolution(Assertions& as)
       solChecker->assertFormula(ar);
     }
     Result r = solChecker->checkSat();
-    Notice() << "SygusSolver::checkSynthSolution(): result is " << r
-             << std::endl;
+    if (isVerboseOn(1))
+    {
+      verbose(1) << "SyGuS::checkSynthSolution: result is " << r << std::endl;
+    }
     Trace("check-synth-sol") << "Satsifiability check: " << r << "\n";
     if (r.asSatisfiabilityResult().isUnknown())
     {
index fe48aa59dc026c7b98eec5c06affb1a97af66951..1c6e3f0cb85769f9ac0b27bd775d9fc24fe3ca69 100644 (file)
@@ -382,9 +382,7 @@ void TheoryDatatypes::postCheck(Effort level)
   }
 
   Trace("datatypes-check") << "Finished check effort " << level << std::endl;
-  if( Debug.isOn("datatypes") || Debug.isOn("datatypes-split") ) {
-    Notice() << "TheoryDatatypes::check(): done" << endl;
-  }
+  Debug("datatypes") << "TheoryDatatypes::check(): done" << std::endl;
 }
 
 bool TheoryDatatypes::needsCheckLastEffort() {
index f4370c01798d2d979ab12777955a7b1050089b04..0c9a5ba46dfbdc6208d7fef8385eecb251cecd59 100644 (file)
@@ -172,9 +172,9 @@ TrustNode AlphaEquivalence::reduceQuantifier(Node q)
   lem = ret.eqNode(q);
   if (q.getNumChildren() == 3)
   {
-    Notice() << "Ignoring annotated quantified formula based on alpha "
-                "equivalence: "
-             << q << std::endl;
+    verbose(1) << "Ignoring annotated quantified formula based on alpha "
+                  "equivalence: "
+               << q << std::endl;
   }
   // if successfully computed the substitution above
   if (isProofEnabled() && !vars.empty())
index fdb0d0db3dcd7b268a32e5d0d28fd132637a52f1..f1d80032b8cda2f2b80e60113106b14ae8a5c5c6 100644 (file)
@@ -153,10 +153,9 @@ InstStrategyStatus InstStrategyAutoGenTriggers::process(Node f,
         && d_auto_gen_trigger[1][f].empty() && !QuantAttributes::hasPattern(f))
     {
       Trace("trigger-warn") << "Could not find trigger for " << f << std::endl;
-      if (d_env.isOutputOn(options::OutputTag::TRIGGER))
+      if (isOutputOn(OutputTag::TRIGGER))
       {
-        d_env.getOutput(options::OutputTag::TRIGGER)
-            << "(no-trigger " << f << ")" << std::endl;
+        output(OutputTag::TRIGGER) << "(no-trigger " << f << ")" << std::endl;
       }
     }
   }
index ff02e5f3e39a83096ae5c9e781b1aa269c74eebb..e267b470d026ce1a2b53b806b1ad9e09209d3069 100644 (file)
@@ -78,12 +78,11 @@ Trigger::Trigger(Env& env,
     extNodes.push_back(ns);
   }
   d_trNode = NodeManager::currentNM()->mkNode(SEXPR, extNodes);
-  if (d_env.isOutputOn(options::OutputTag::TRIGGER))
+  if (isOutputOn(OutputTag::TRIGGER))
   {
     QuantAttributes& qa = d_qreg.getQuantAttributes();
-    d_env.getOutput(options::OutputTag::TRIGGER)
-        << "(trigger " << qa.quantToString(q) << " " << d_trNode << ")"
-        << std::endl;
+    output(OutputTag::TRIGGER) << "(trigger " << qa.quantToString(q) << " "
+                               << d_trNode << ")" << std::endl;
   }
   QuantifiersStatistics& stats = qs.getStats();
   if( d_nodes.size()==1 ){
index 23f789f4e03a0d64f071a13484fbb2e954f164a9..1af2b3f7545f82a8ac6d58c138737133e593114f 100644 (file)
@@ -706,7 +706,7 @@ void Instantiate::notifyEndRound()
           << " * " << i.second << " for " << i.first << std::endl;
     }
   }
-  if (d_env.isOutputOn(options::OutputTag::INST))
+  if (isOutputOn(OutputTag::INST))
   {
     bool req = !options().printer.printInstFull;
     for (std::pair<const Node, uint32_t>& i : d_instDebugTemp)
@@ -716,9 +716,8 @@ void Instantiate::notifyEndRound()
       {
         continue;
       }
-      d_env.getOutput(options::OutputTag::INST)
-          << "(num-instantiations " << name << " " << i.second << ")"
-          << std::endl;
+      output(OutputTag::INST) << "(num-instantiations " << name << " "
+                              << i.second << ")" << std::endl;
     }
   }
 }
index 6c3f5e70b816d31a3bfda1fd3c1e9eba2ee52e6a..1fde4391395a983d2e37a253026e725e9cf4db49 100644 (file)
@@ -372,7 +372,7 @@ bool SynthConjecture::doCheck()
     }
   }
 
-  bool printDebug = d_env.isOutputOn(options::OutputTag::SYGUS);
+  bool printDebug = isOutputOn(OutputTag::SYGUS);
   if (!constructed_cand)
   {
     // get the model value of the relevant terms from the master module
@@ -437,9 +437,9 @@ bool SynthConjecture::doCheck()
           }
         }
         Trace("sygus-engine") << std::endl;
-        if (d_env.isOutputOn(options::OutputTag::SYGUS))
+        if (d_env.isOutputOn(OutputTag::SYGUS))
         {
-          d_env.getOutput(options::OutputTag::SYGUS)
+          d_env.output(OutputTag::SYGUS)
               << "(sygus-enum" << sygusEnumOut.str() << ")" << std::endl;
         }
       }
@@ -518,16 +518,15 @@ bool SynthConjecture::doCheck()
   // print the candidate solution for debugging
   if (constructed_cand && printDebug)
   {
-    const Options& sopts = options();
-    std::ostream& out = *sopts.base.out;
+    std::ostream& out = output(OutputTag::SYGUS);
     out << "(sygus-candidate ";
     Assert(d_quant[0].getNumChildren() == candidate_values.size());
     for (size_t i = 0, ncands = candidate_values.size(); i < ncands; i++)
     {
       Node v = candidate_values[i];
-      std::stringstream ss;
-      TermDbSygus::toStreamSygus(ss, v);
-      out << "(" << d_quant[0][i] << " " << ss.str() << ")";
+      out << "(" << d_quant[0][i] << " ";
+      TermDbSygus::toStreamSygus(out, v);
+      out << ")";
     }
     out << ")" << std::endl;
   }
index 08fab59ebbe40693bb734b8b916f5c23f90af87d..2fc7f0c29d826bc304084815bd1987c600e1e47b 100644 (file)
@@ -815,10 +815,11 @@ void SygusSampler::checkEquivalent(Node bv, Node bvr, std::ostream& out)
     }
     if (!ptDisequalConst)
     {
-      Notice() << "Warning: " << bv << " and " << bvr
-               << " evaluate to different (non-constant) values on point:"
-               << std::endl;
-      Notice() << ptOut.str();
+      d_env.verbose(1)
+          << "Warning: " << bv << " and " << bvr
+          << " evaluate to different (non-constant) values on point:"
+          << std::endl;
+      d_env.verbose(1) << ptOut.str();
       return;
     }
     // we have detected unsoundness in the rewriter
index 03880bfbb8a4a1c88268e15a6083f81a8f055ce4..5aafae367ee30acdc7a66d920cdd8ee5ff2ee34b 100644 (file)
@@ -1892,7 +1892,7 @@ void TheoryEngine::checkTheoryAssertionsWithModel(bool hardFailure) {
               // assertions with unevaluable operators, e.g. transcendental
               // functions. It also may happen for separation logic, where
               // check-model support is limited.
-              Warning() << ss.str();
+              warning() << ss.str();
             }
           }
         }
index 650ef1d70cd5b3234d699aeae13787c5ee47dc4f..83862e8bbf9c166ca10655b36f61a9a0987f63aa 100644 (file)
@@ -828,7 +828,6 @@ void SortModel::getDisequalitiesToRegions(int ri,
       for( DiseqList::iterator it2 = del->begin(); it2 != del->end(); ++it2 ){
         if( (*it2).second ){
           Assert(isValid(d_regions_map[(*it2).first]));
-          //Notice() << "Found disequality with " << (*it2).first << ", region = " << d_regions_map[ (*it2).first ] << std::endl;
           regions_diseq[ d_regions_map[ (*it2).first ] ]++;
         }
       }
@@ -1046,7 +1045,6 @@ int SortModel::addSplit(Region* r)
     //Trace("uf-ss-lemma") << d_th->getEqualityEngine()->areEqual( s[0], s[1] ) << " ";
     //Trace("uf-ss-lemma") << d_th->getEqualityEngine()->areDisequal( s[0], s[1] ) << std::endl;
     //Trace("uf-ss-lemma") << s[0].getType() << " " << s[1].getType() << std::endl;
-    //Notice() << "*** Split on " << s << std::endl;
     //split on the equality s
     Node lem = NodeManager::currentNM()->mkNode( kind::OR, ss, ss.negate() );
     // send lemma, with caching
index 6b07dfc1c72ee79c224e6f509f8a722794a52b20..24e05ec2a91d2ba6b3cf0598492036f14a00ad3c 100644 (file)
@@ -3,7 +3,7 @@
 ; EXPECT: true
 ; EXPECT: false
 ; EXPECT: 15
-; EXPECT: SimplificationMode::NONE
+; EXPECT: none
 
 (get-option :command-verbosity)
 (set-option :command-verbosity (* 1))
index 9d37032acc846b9d7155046b14b7850f1820134c..333c0dd5ae24375c9f5577d5927e24df0fdd91a9 100644 (file)
@@ -1,4 +1,5 @@
 ; COMMAND-LINE: -vvv --sygus-out=status --check-synth-sol --check-abducts
+; ERROR-SCRUBBER: sed -e 's/.*//g'
 ; SCRUBBER: sed -e 's/.*//g'
 ; EXIT: 0
 
index 4c9ec4c0d83e287fe8a42364a97614d24d1095d2..f89ecfffd5a009e7692fe1c8da9f4e2f0ba2bcdb 100644 (file)
@@ -1429,7 +1429,7 @@ class SolverTest
       assertions.add(() -> assertTrue(info.getBaseInfo().getClass() == OptionInfo.ModeInfo.class));
       OptionInfo.ModeInfo modeInfo = (OptionInfo.ModeInfo) info.getBaseInfo();
       assertions.add(() -> assertEquals("NONE", modeInfo.getDefaultValue()));
-      assertions.add(() -> assertEquals("OutputTag::NONE", modeInfo.getCurrentValue()));
+      assertions.add(() -> assertEquals("none", modeInfo.getCurrentValue()));
       assertions.add(() -> assertTrue(Arrays.asList(modeInfo.getModes()).contains("NONE")));
     }
     assertAll(assertions);
index 062a2a59e1a7c12c28ccb68fb1949af5b88a4295..eca6683ba26e1570c71d8966c3bf191058da13f3 100644 (file)
@@ -1379,7 +1379,7 @@ TEST_F(TestApiBlackSolver, getOptionInfo)
     EXPECT_TRUE(std::holds_alternative<OptionInfo::ModeInfo>(info.valueInfo));
     auto modeInfo = std::get<OptionInfo::ModeInfo>(info.valueInfo);
     EXPECT_EQ("NONE", modeInfo.defaultValue);
-    EXPECT_EQ("OutputTag::NONE", modeInfo.currentValue);
+    EXPECT_EQ("none", modeInfo.currentValue);
     EXPECT_TRUE(std::find(modeInfo.modes.begin(), modeInfo.modes.end(), "NONE")
                 != modeInfo.modes.end());
   }