module Depsolver_int:sig..end
Dependency solver. Low Level API
Implementation of the EDOS algorithms (and more). This module respects the cudf semantic.
This module contains two type of functions. Normal functions work on a cudf universe. These are just a wrapper to _cache functions.
_cache functions work on a pool of ids that is a more compact representation of a cudf universe based on arrays of integers. _cache function can be used to avoid recreating the pool for each operation and therefore speed up operations.
module R:sig..end
Sat Solver instance
module S:Common.EdosSolver.Twith module X = R
type solver = {
|
constraints : |
(* | the sat problem | *) |
|
map : |
(* | a map from cudf package ids to solver ids | *) |
|
globalid : |
(* | (keep_constrains,global_constrains),gui) where gid is the last index of the cudfpool. Used to encode a 'dummy' package and to enforce global constraints. keep_constrains and global_constrains are true if either keep_constrains or global_constrains are enforceble. | *) |
internal state of the sat solver. The map allows to transform sat solver variables (that must be contiguous) to integers representing the id of a package
typeglobal_constraints =(Cudf_types.vpkglist * int list) list
typedep_t =(Cudf_types.vpkg list * int list) list * (Cudf_types.vpkg * int list) list
Solver Package Pool. pool_t is an array where each index
is an solver variable and the content of the array associates
cudf dependencies to a list of solver varialbles representing
a package
typepool =dep_t array
A pool can either be a low level representation of the universe where all integers are interpreted as solver variables or a universe where all integers are interpreted as cudf package indentifiers. The boolean associate to the cudfpool is true if keep_constrains are present in the universe.
typet =[ `CudfPool of bool * pool
| `SolverPool of pool ]
type result =
| |
Success of |
(* | return a function providing the list of the cudf packages belonging to the installation set | *) |
| |
Failure of |
(* | return a function with the failure explanations | *) |
val init_pool_univ : global_constraints:global_constraints ->
Cudf.universe -> [> `CudfPool of bool * pool ]Given a cudf universe , this function returns a CudfPool.
We assume that cudf uid are sequential and we can use them as an array index
val init_solver_pool : Common.Util.projection ->
[< `CudfPool of bool * pool ] ->
'a list -> [> `SolverPool of pool ]this function creates an array indexed by solver ids that can be
used to init the edos solver. Return a SolverPool
val init_solver_cache : ?buffer:bool ->
?explain:bool ->
[< `SolverPool of pool ] -> S.stateInitalise the sat solver. Operates only on solver ids SolverPool
val solve : ?tested:bool array ->
explain:bool ->
solver ->
Algo.Diagnostic.request_int -> Algo.Diagnostic.result_intCall the sat solver
val pkgcheck : (Algo.Diagnostic.result_int * Algo.Diagnostic.request_int -> 'a) option ->
bool -> solver -> bool array -> int -> bool
val init_solver_univ : global_constraints:global_constraints ->
?buffer:bool -> ?explain:bool -> Cudf.universe -> solverConstraint solver initialization
buffer : debug buffer to print out debug messagesval init_solver_closure : global_constraints:global_constraints ->
?buffer:bool ->
[< `CudfPool of bool * pool ] ->
int list -> solverConstraint solver initialization
buffer : debug buffer to print out debug messagesval copy_solver : solver -> solverreturn a copy of the state of the solver
val reverse_dependencies : Cudf.universe -> int list arrayreverse_dependencies index return an array that associates to a package id
i the list of all packages ids that have a dependency on i.
val dependency_closure_cache : ?maxdepth:int ->
?conjunctive:bool ->
[< `CudfPool of bool * pool ] ->
int list -> S.var list
val reverse_dependency_closure : ?maxdepth:int -> int list array -> int list -> int listreturn the dependency closure of the reverse dependency graph. The visit is bfs.
maxdepth : the maximum cone depth (infinite by default)val progressbar_init : Common.Util.Progress.tval progressbar_univcheck : Common.Util.Progress.t