From 477ef5c045a5b2120df3d22f740afa65d9c3ad37 Mon Sep 17 00:00:00 2001 From: VIGNET Pierre <pierre.vignet@irisa.fr> Date: Thu, 12 Dec 2019 20:35:30 +0100 Subject: [PATCH] [lib] Cleaning stats management; Sync with new solver (nb_clauses) --- .../clause_constraints/mcl/CLUnfolder.py | 42 ++++++++++++------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/library/cadbiom/models/clause_constraints/mcl/CLUnfolder.py b/library/cadbiom/models/clause_constraints/mcl/CLUnfolder.py index a37c5d1..efc9fe6 100644 --- a/library/cadbiom/models/clause_constraints/mcl/CLUnfolder.py +++ b/library/cadbiom/models/clause_constraints/mcl/CLUnfolder.py @@ -154,9 +154,11 @@ shift(): """ from __future__ import print_function +from packaging import version #from pyCryptoMS import CryptoMS from pycryptosat import Solver as CryptoMS +from pycryptosat import __version__ as solver_version from cadbiom.models.biosignal.translators.gt_visitors import compile_cond, compile_event from cadbiom.models.clause_constraints.CLDynSys import Clause, Literal from cadbiom.models.clause_constraints.mcl.MCLSolutions import RawSolution, MCLException @@ -439,10 +441,10 @@ class CLUnfolder(object): """Disable solver statistics (never used)""" self.__stats = False - def _stats(self): + def stats(self): """Display solver statistics""" - print("\n NB Variables in solver:", self.__nb_vars) - print("NB Clauses in solver:", self.__nb_clauses) + LOGGER.info("NB Variables in solver:", self.__nb_vars) + LOGGER.info("NB Clauses in solver:", self.__nb_clauses) def set_include_aux_clauses(self, val): """Flag to include auxiliary clause to eliminate undesirable solutions. @@ -1375,6 +1377,24 @@ class CLUnfolder(object): LOGGER.debug(str(self.__initial_constraints)) + def __sync_stats(self, solver): + """Sync local data (nb vars, nb clauses) with solver state + if stats are activated (never besides in test environment). + + .. note:: Its the only way to set __nb_vars and __nb_clauses attributes. + """ + if version.parse(solver_version) < version.parse("5.6.9"): + if solver.nb_vars() > self.__nb_vars: + self.__nb_vars = solver.nb_vars() + else: + if solver.nb_vars > self.__nb_vars: + self.__nb_vars = solver.nb_vars + # Starting from pycryptosat 5.2, nb_clauses is private + # Starting from 5.6.9 the attribute is exposed + if solver.nb_clauses > self.__nb_clauses: + self.__nb_clauses = solver.nb_clauses + + def __constraints_satisfied(self): """Ask the SAT solver if the query/system is satisfiable in the given number of steps. @@ -1391,13 +1411,9 @@ class CLUnfolder(object): if self.__stats: # If stats are activated (never besides in test environment): - # sync local data (nb vars, nb clauses with solver state) - if solver.nb_vars() > self.__nb_vars: - self.__nb_vars = solver.nb_vars() + # sync local data (nb vars, nb clauses) with solver state + self.__sync_stats(solver) - # Starting from pycryptosat 5.2, nb_clauses() is a private attribute - #if solver.nb_clauses() > self.__nb_clauses: - # self.__nb_clauses = solver.nb_clauses() # Is the problem satisfiable ? return solver.is_satisfiable() @@ -1422,12 +1438,8 @@ class CLUnfolder(object): if self.__stats: # If stats are activated (never besides in test environment): - # sync local data (nb vars, nb clauses with solver state) - if solver.nb_vars() > self.__nb_vars: - self.__nb_vars = solver.nb_vars() - # Starting from pycryptosat 5.2, nb_clauses() is a private attribute - #if solver.nb_clauses() > self.__nb_clauses: - # self.__nb_clauses = solver.nb_clauses() + # sync local data (nb vars, nb clauses) with solver state + self.__sync_stats(solver) if LOGGER.getEffectiveLevel() == DEBUG: LOGGER.debug("__msolve_constraints :: vvars : %s", vvars) -- GitLab