spack.solver package


spack.solver.asp module

class spack.solver.asp.AspFunction(name, args=None)[source]

Bases: AspObject

class spack.solver.asp.AspFunctionBuilder[source]

Bases: object

class spack.solver.asp.AspObject[source]

Bases: object

Object representing a piece of ASP code.

spack.solver.asp.DEFAULT_OUTPUT_CONFIGURATION = OutputConfiguration(timers=False, stats=False, out=None, setup_only=False)

Default output configuration for a solve

class spack.solver.asp.DeclaredVersion(version, idx, origin)

Bases: tuple

Named tuple to contain information on declared versions

property idx

Alias for field number 1

property origin

Alias for field number 2

property version

Alias for field number 0

exception spack.solver.asp.InternalConcretizerError(provided, conflicts)[source]

Bases: UnsatisfiableSpecError

Subclass for new constructor signature for new concretizer

class spack.solver.asp.OutputConfiguration(timers, stats, out, setup_only)

Bases: tuple

Data class that contain configuration on what a clingo solve should output.

  • timers (bool) – Print out coarse timers for different solve phases.

  • stats (bool) – Whether to output Clingo’s internal solver statistics.

  • out – Optional output stream for the generated ASP program.

  • setup_only (bool) – if True, stop after setup and don’t solve (default False).

property out

Alias for field number 2

property setup_only

Alias for field number 3

property stats

Alias for field number 1

property timers

Alias for field number 0

class spack.solver.asp.PyclingoDriver(cores=True)[source]

Bases: object


ASP fact (a rule without a body).


head (AspFunction) – ASP function to generate as fact

handle_error(msg, *args)[source]

Handle an error state derived by the solver.

solve(setup, specs, reuse=None, output=None, control=None)[source]

Set up the input and solve for dependencies of specs.

  • setup (SpackSolverSetup) – An object to set up the ASP problem.

  • specs (list) – List of Spec objects to solve for.

  • reuse (None or list) – list of concrete specs that can be reused

  • output (None or OutputConfiguration) – configuration object to set the output of this solve.

  • control (clingo.Control) – configuration for the solver. If None, default values will be used


A tuple of the solve result, the timer for the different phases of the solve, and the internal statistics from clingo.

title(name, char)[source]
class spack.solver.asp.Result(specs, asp=None)[source]

Bases: object

Result of an ASP solve.


Format an unsatisfiable core for human readability

Returns a list of strings, where each string is the human readable representation of a single fact in the core, including a newline.

Modeled after traceback.format_stack.


List of facts for each core

Separate cores are separated by an empty line Cores are not minimized


List of facts for each core

Separate cores are separated by an empty line


Return a list of subset-minimal unsatisfiable cores.


Return a subset-minimal subset of the core.

Clingo cores may be thousands of lines when two facts are sufficient to ensure unsatisfiability. This algorithm reduces the core to only those essential facts.


Raise an appropriate error if the result is unsatisfiable.

The error is an InternalConcretizerError, and includes the minimized cores resulting from the solve, formatted to be human readable.

property specs

List of concretized specs satisfying the initial abstract request.

property specs_by_input
property unsolved_specs

List of abstract input specs that were not solved.

class spack.solver.asp.Solver[source]

Bases: object

This is the main external interface class for solving.

It manages solver configuration and preferences in one place. It sets up the solve and passes the setup method to the driver, as well.

Properties of interest:

reuse (bool)

Whether to try to reuse existing installs/binaries

solve(specs, out=None, timers=False, stats=False, tests=False, setup_only=False)[source]
  • specs (list) – List of Spec objects to solve for.

  • out – Optionally write the generate ASP program to a file-like object.

  • timers (bool) – Print out coarse fimers for different solve phases.

  • stats (bool) – Print out detailed stats from clingo.

  • tests (bool or tuple) – If True, concretize test dependencies for all packages. If a tuple of package names, concretize test dependencies for named packages (defaults to False: do not concretize test dependencies).

  • setup_only (bool) – if True, stop after setup and don’t solve (default False).

solve_in_rounds(specs, out=None, timers=False, stats=False, tests=False)[source]

Solve for a stable model of specs in multiple rounds.

This relaxes the assumption of solve that everything must be consistent and solvable in a single round. Each round tries to maximize the reuse of specs from previous rounds.

The function is a generator that yields the result of each round.

  • specs (list) – list of Specs to solve.

  • out – Optionally write the generate ASP program to a file-like object.

  • timers (bool) – print timing if set to True

  • stats (bool) – print internal statistics if set to True

  • tests (bool) – add test dependencies to the solve

class spack.solver.asp.SpackSolverSetup(tests=False)[source]

Bases: object

Class to set up and run a Spack concretization solve.

add_concrete_versions_from_specs(specs, origin)[source]

Add concrete versions to possible versions from lists of CLI/dev specs.


Facts about available compilers.


Declare any versions in specs not declared in packages.


Set compiler defaults, given a list of possible compilers.

condition(required_spec, imposed_spec=None, name=None, msg=None, node=False)[source]

Generate facts for a dependency or virtual provider condition.

  • required_spec (spack.spec.Spec) – the spec that triggers this condition

  • imposed_spec (spack.spec.Spec or None) – the spec with constraints that are imposed when this condition is triggered

  • name (str or None) – name for required_spec (required if required_spec is anonymous, ignored if not)

  • msg (str or None) – description of the condition

  • node (bool) – if False does not emit “node” or “virtual_node” requirements from the imposed spec


id of the condition created by this function

Return type


define_concrete_input_specs(specs, possible)[source]

Validate variant values from the command line.

Also add valid variant values from the command line to the possible values for a variant.


Define what version_satisfies(…) means in ASP logic.


Define versions for constraints on virtuals.

Must be called before define_version_constraints().

emit_facts_from_requirement_rules(rules, virtual=False)[source]

Generate facts to enforce requirements from packages.yaml.


Facts on external packages, as read from packages.yaml

impose(condition_id, imposed_spec, node=True, name=None, body=False)[source]

Facts about packages’ compiler prefs.


Translate ‘depends_on’ directives into ASP logic.

pkg_rules(pkg, tests)[source]

Output declared versions of a package.

This uses self.declared_versions so that we include any versions that arise from a spec.


Facts on concretization preferences, as read from packages.yaml

setup(driver, specs, reuse=None)[source]

Generate an ASP program with relevant constraints for specs.

This calls methods on the solve driver to set up the problem with facts and rules from all possible dependencies of the input specs, as well as constraints from the specs themselves.

  • driver (PyclingoDriver) – driver instance of this solve

  • specs (list) – list of Specs to solve

  • reuse (None or list) – list of concrete specs that can be reused

spec_clauses(*args, **kwargs)[source]

Wrap a call to _spec_clauses() into a try/except block that raises a comprehensible error message in case of failure.


Return list of clauses expressing spec’s version constraints.


Add facts about targets and target compatibility.

target_ranges(spec, single_target_fn)[source]
virtual_preferences(pkg_name, func)[source]

Call func(vspec, provider, i) for each of pkg’s provider prefs.

class spack.solver.asp.SpecBuilder(specs, hash_lookup=None)[source]

Bases: object

Class with actions to rebuild a spec from ASP results.

depends_on(pkg, dep, type)[source]
deprecated(pkg, version)[source]
external_spec_selected(pkg, idx)[source]

This means that the external spec and index idx has been selected for this package.

hash(pkg, h)[source]
ignored_attributes = re.compile('^.*_propagate$|^.*_satisfies$|^.*_set$|^package_hash$|^root$|^virtual_node$|^virtual_root$')

Regex for attributes that don’t need actions b/c they aren’t used to construct specs.

no_flags(pkg, flag_type)[source]
node_compiler(pkg, compiler)[source]
node_compiler_version(pkg, compiler, version)[source]
node_flag(pkg, flag_type, flag)[source]
node_flag_source(pkg, flag_type, source)[source]
node_os(pkg, os)[source]
node_platform(pkg, platform)[source]
node_target(pkg, target)[source]

Order compiler flags on specs in predefined order.

We order flags so that any node’s flags will take priority over those of its dependents. That is, the deepest node in the DAG’s flags will appear last on the compile line, in the order they were specified.

The solver determines wihch flags are on nodes; this routine imposes order afterwards.

static sort_fn(function_tuple)[source]

Ensure attributes are evaluated in the correct order.

hash attributes are handled first, since they imply entire concrete specs node attributes are handled next, since they instantiate nodes node_compiler attributes are handled next to ensure they come before node_compiler_version external_spec_selected attributes are handled last, so that external extensions can find the concrete specs on which they depend because all nodes are fully constructed before we consider which ones are external.

variant_value(pkg, name, value)[source]
version(pkg, version)[source]
exception spack.solver.asp.UnsatisfiableSpecError(msg)[source]

Bases: UnsatisfiableSpecError

Subclass for new constructor signature for new concretizer

spack.solver.asp.build_criteria_names(costs, arg_tuples)[source]

Construct an ordered mapping from criteria names to costs.

spack.solver.asp.build_priority_offset = 200

Priority offset for “build” criteria (regular criterio shifted to higher priority for specs we have to build)


Ensure all packages mentioned in specs exist.


Return a control object with the default settings used in Spack

spack.solver.asp.extend_flag_list(flag_list, new_flags)[source]

Extend a list of flags, preserving order and precedence.

Add new_flags at the end of flag_list. If any flags in new_flags are already in flag_list, they are moved to the end so that they take higher precedence on the compile line.

spack.solver.asp.extract_args(model, predicate_name)[source]

Extract the arguments to predicates with the provided name from a model.

Pull out all the predicates with name predicate_name from the model, and return their stringified arguments as tuples.

spack.solver.asp.fixed_priority_offset = 100

Priority offset of “fixed” criteria (those w/o build criteria)

spack.solver.asp.high_fixed_priority_offset = 300

High fixed priority offset for criteria that supersede all build criteria


Stringify symbols from clingo models.

This will turn a clingo.Symbol into a string, or a sequence of clingo.Symbol objects into a tuple of strings.

spack.solver.asp.version_origin_fields = ['spec', 'dev_spec', 'external', 'packages_yaml', 'package_py', 'installed']

Order of precedence for version origins. Topmost types are preferred.

spack.solver.asp.version_origin_str = {0: 'spec', 1: 'dev_spec', 2: 'external', 3: 'packages_yaml', 4: 'package_py', 5: 'installed'}

Look up version precedence strings by enum id

spack.solver.asp.version_provenance = VersionProvenance(spec=0, dev_spec=1, external=2, packages_yaml=3, package_py=4, installed=5)

Enumeration like object to mark version provenance