From ba42c36f00fe40c047121a32117018eb93e0c4b1 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Wed, 3 Feb 2021 19:12:03 +0100 Subject: [PATCH] concretizer: simplify "fact" method (#21148) The "fact" method before was dealing with multiple facts registered per call, which was used when we were emitting grounded rules from knowledge of the problem instance. Now that the encoding is changed we can simplify the method to deal only with a single fact per call. --- lib/spack/spack/solver/asp.py | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py index 25b2181708..4d7b019ea6 100644 --- a/lib/spack/spack/solver/asp.py +++ b/lib/spack/spack/solver/asp.py @@ -210,19 +210,6 @@ def print_cores(self): *sorted(str(symbol) for symbol in core)) -def _normalize(body): - """Accept an AspAnd object or a single Symbol and return a list of - symbols. - """ - if isinstance(body, clingo.Symbol): - args = [body] - elif hasattr(body, 'symbol'): - args = [body.symbol()] - else: - raise TypeError("Invalid typee: ", type(body)) - return args - - def _normalize_packages_yaml(packages_yaml): normalized_yaml = copy.copy(packages_yaml) for pkg_name in packages_yaml: @@ -280,19 +267,14 @@ def newline(self): def fact(self, head): """ASP fact (a rule without a body).""" - symbols = _normalize(head) - self.out.write("%s.\n" % ','.join(str(a) for a in symbols)) + symbol = head.symbol() if hasattr(head, 'symbol') else head - atoms = {} - for s in symbols: - atoms[s] = self.backend.add_atom(s) + self.out.write("%s.\n" % str(symbol)) - self.backend.add_rule( - [atoms[s] for s in symbols], [], choice=self.cores - ) + atom = self.backend.add_atom(symbol) + self.backend.add_rule([atom], [], choice=self.cores) if self.cores: - for s in symbols: - self.assumptions.append(atoms[s]) + self.assumptions.append(atom) def solve( self, solver_setup, specs, dump=None, nmodels=0,