### Un-installability reasons

`type request = Cudf.package list`

The request provided to the solver

`type reason =`

1. `| Dependency of Cudf.package * Cudf_types.vpkg list * Cudf.package list`
   (*

   Not strictly a un-installability, Dependency (a,vpkglist,pkglist) is used to recontruct the the dependency path from the root package to the offending un-installable package

   *)
2. `| Missing of Cudf.package * Cudf_types.vpkg list`
   (*

   Missing (a,vpkglist) means that the dependency `vpkglist` of package `a` cannot be satisfied

   *)
3. `| Conflict of Cudf.package * Cudf.package * Cudf_types.vpkg`
   (*

   Conflict (a,b,vpkg) means that the package `a` is in conflict with package `b` because of vpkg

   *)

`type result =`

1. `| Success of ?all:bool -> unit -> Cudf.package list`
   (*

   If successfull returns a function that will return the installation set for the given query. Since not all packages are tested for installability directly, the installation set might be empty. In this case, the solver can be called again to provide the real installation set using the parameter `~all:true`

   *)
2. `| Failure of unit -> reason list`
   (*

   If unsuccessful returns a function containing the list of reason

   *)

The result of an installability query

`type diagnosis = {`

1. `result : result;`
2. `request : request;`

`}`

The aggregated result from the solver

`type reason_int =`

1. `| DependencyInt of int * Cudf_types.vpkg list * int list`
2. `| MissingInt of int * Cudf_types.vpkg list`
3. `| ConflictInt of int * int * Cudf_types.vpkg`

Low level Integer Un-installability reasons

`type result_int =`

1. `| SuccessInt of ?all:bool -> unit -> int list`
2. `| FailureInt of unit -> reason_int list`

the low-level result. All integers are sat solver indexes and need to be converted using a projection map. Moreover the result also contains the global constraints index that must filtered out before returing the final result to the user

`type request_int = int list`

#### Helpers Functions

`val diagnosis : Dose_common.Util.projection -> Cudf.universe -> result_int -> request_int -> diagnosis`

Turn an integer result into a cudf result

`val result : Dose_common.Util.projection -> Cudf.universe -> result_int -> result`

Turn an integer result into a cudf result

`val request : Cudf.universe -> request_int -> Cudf.package list`

Turn an integer request into a cudf request

### Pretty Priting Functions

`module ResultHash : Stdlib.Hashtbl.S with type key = reason`
`type summary = {`

1. `mutable missing : int;`
2. `mutable conflict : int;`
3. `mutable unique_missing : int;`
4. `mutable unique_conflict : int;`
5. `mutable unique_selfconflict : int;`
6. `summary : Cudf.package list Stdlib.ref ResultHash.t;`
7. `statistic : (int * int, int Stdlib.ref) Stdlib.Hashtbl.t;`

`}`

Collect aggregate information about not installable packages

`val default_result : int -> summary`
`val collect : summary -> diagnosis -> unit`

`collect summary result`. Callback function to collect result information in the `summary` data structure. Can be used to build a custom callback function for `Depsolver.listcheck` or `Depsolver.univcheck`

`val pp_out_version : Stdlib.Format.formatter -> unit`

print output version

`val pp_package : ?source:bool -> ?fields:bool -> Dose_common.CudfAdd.pp -> Stdlib.Format.formatter -> Cudf.package -> unit`

default package pretty printer.

`val pp_list : (Stdlib.Format.formatter -> 'a -> unit) -> Stdlib.Format.formatter -> 'a list -> unit`
`val print_error : ?condense:bool -> ?minimal:bool -> Dose_common.CudfAdd.pp -> Cudf.package -> Stdlib.Format.formatter -> reason list -> unit`
`val get_installationset : ?minimal:bool -> diagnosis -> Cudf.package list`

If the installablity query is successfull, `get_installationset` return the associated installation set . If minimal is true (false by default), the installation set is restricted to the dependency cone of the packages specified in the installablity query.

- raises `[Not_found]`

  if the result is a failure.

`val is_solution : diagnosis -> bool`

True is the result of an installablity query is successfull. False otherwise

`val pp_summary : ?pp:Dose_common.CudfAdd.pp -> ?explain:bool -> unit -> Stdlib.Format.formatter -> summary -> unit`

print a aggregate information of not installable packages.

- parameter pp

  cudf package printer

- parameter explain

  if true, print the list of all affected packages associated to and installation problem.

`val fprintf : ?pp:Dose_common.CudfAdd.pp -> ?failure:bool -> ?success:bool -> ?explain:bool -> ?minimal:bool -> ?condense:bool -> Stdlib.Format.formatter -> diagnosis -> unit`

`printf fmt d` print the output of the solver in yaml format to the formatter `fmt`.

- parameter pp

  cudf package printer

- parameter failure

  print the list of not installable packages

- parameter success

  print the list of installable packages

- parameter explain

  for installable packages, print the associated installation set for not installable packages, print the all dependencies chains

`val printf : ?pp:Dose_common.CudfAdd.pp -> ?failure:bool -> ?success:bool -> ?explain:bool -> diagnosis -> unit`

like `fprintf` but print using the standard formatter

`val print_dot : ?pp:Dose_common.CudfAdd.pp -> ?condense:bool -> ?addmissing:bool -> ?dir:string -> diagnosis -> unit`

print the explanation graph in dot format to the standard formatter