diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py index e566b2fa944..8175b3ac0c8 100644 --- a/lib/spack/spack/solver/asp.py +++ b/lib/spack/spack/solver/asp.py @@ -159,10 +159,6 @@ def build_criteria_names( costs: List[int], opt_criteria: List["AspFunction"], max_depth: int ) -> Dict[str, Union[int, List[int]]]: """Construct an ordered mapping from criteria names to costs.""" - print(costs) - print(len(costs)) - print(max_depth) - print(opt_criteria) # ensure names of all criteria are unique names = {criterion.args[0] for criterion in opt_criteria} @@ -776,7 +772,7 @@ def visit(node): cores = [] # unsatisfiable cores if they do not def on_model(model): - models.append((model.cost, model.symbols(shown=True, terms=True))) + models.append((model.cost, model.priority, model.symbols(shown=True, terms=True))) solve_kwargs = { "assumptions": self.assumptions, @@ -797,7 +793,7 @@ def on_model(model): if result.satisfiable: # get the best model builder = SpecBuilder(specs, hash_lookup=setup.reusable_and_possible) - min_cost, best_model = min(models) + min_cost, priorities, best_model = min(models) # first check for errors error_args = [fn.args for fn in extract_functions(best_model, "error")] @@ -818,6 +814,13 @@ def on_model(model): depths = extract_functions(best_model, "depth") print(depths) max_depth = max(d.args[1] for d in depths) + + print(f"COST: {len(min_cost)} {min_cost}") + print(f"PRIO: {len(priorities)} {priorities}") + print(f"MAX_DEPTH: {max_depth}") + print() + print(opt_criteria) + result.criteria = build_criteria_names(min_cost, criteria, max_depth) # record the number of models the solver considered diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp index 1c8525cdf0c..00d4d4e37ec 100644 --- a/lib/spack/spack/solver/concretize.lp +++ b/lib/spack/spack/solver/concretize.lp @@ -1118,7 +1118,7 @@ build_priority(Package, 0) :- attr("node", Package), not optimize_for_reuse(). depth(Package, 0) :- attr("root", Package). % other nodes' depth is the minimum depth of any dependent plus one. -depth(Package, N+1) :- +min_parent_depth(Package, N) :- N = #min{ D: depends_on(Dependent, Package), depth(Dependent, D), @@ -1126,9 +1126,21 @@ depth(Package, N+1) :- D < max_depth }, 0 <= N, - N <= max_depth, + N < max_depth, attr("node", Package). +depth(Package, max_depth) :- + min_parent_depth(Package, P), + P >= max_depth, + attr("node", Package). + +depth(Package, P+1) :- + min_parent_depth(Package, P), + P >= 0, + P < max_depth, + attr("node", Package). + + %----------------------------------------------------------------- % Optimization to avoid errors %----------------------------------------------------------------- diff --git a/var/spack/repos/builtin/packages/clingo/package.py b/var/spack/repos/builtin/packages/clingo/package.py index 70654c546f1..6502106e607 100644 --- a/var/spack/repos/builtin/packages/clingo/package.py +++ b/var/spack/repos/builtin/packages/clingo/package.py @@ -23,6 +23,8 @@ class Clingo(CMakePackage): url = "https://github.com/potassco/clingo/archive/v5.2.2.tar.gz" git = "https://github.com/potassco/clingo.git" tags = ["windows"] + submodules = True + maintainers = ["tgamblin", "alalazo"] version("master", branch="master", submodules=True)