From 722e71ed3deb5430d2e03f56793ea42028d966f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Fri, 8 Jul 2022 21:53:53 +0200 Subject: [PATCH] [wp] printing stats wrt various modes --- src/plugins/wp/ProverWhy3.ml | 2 +- src/plugins/wp/Stats.ml | 35 ++++++++++++++++++++-------------- src/plugins/wp/Stats.mli | 4 ++-- src/plugins/wp/VCS.ml | 15 ++++++--------- src/plugins/wp/Why3Provers.ml | 9 +++++---- src/plugins/wp/Why3Provers.mli | 7 +++---- src/plugins/wp/register.ml | 2 +- 7 files changed, 39 insertions(+), 35 deletions(-) diff --git a/src/plugins/wp/ProverWhy3.ml b/src/plugins/wp/ProverWhy3.ml index 212fe6f8bab..307d9dc45c1 100644 --- a/src/plugins/wp/ProverWhy3.ml +++ b/src/plugins/wp/ProverWhy3.ml @@ -1247,7 +1247,7 @@ let digest wpo drv prover task = let _ = Command.print_file file begin fun fmt -> Format.fprintf fmt "(* WP Task for Prover %s *)@\n" - (Why3Provers.print_why3 prover) ; + (Why3Provers.ident_why3 prover) ; Why3.Driver.print_task_prepared drv fmt task ; end in Digest.file file |> Digest.to_hex diff --git a/src/plugins/wp/Stats.ml b/src/plugins/wp/Stats.ml index de3d5cee53e..32e6fb46c18 100644 --- a/src/plugins/wp/Stats.ml +++ b/src/plugins/wp/Stats.ml @@ -124,16 +124,14 @@ let consolidated ~smoke = function r.verdict, (if cached then 1 else 0), if p = Qed then [Qed,pqed r] - else - if VCS.is_valid r - then pmerge [Qed,psolver r] [p,if smoke then psmoke r else presult r] - else [] + else pmerge [Qed,psolver r] [p,if smoke then psmoke r else presult r] let smoked_result (p,r) = p, { r with verdict = VCS.smoked r.verdict } let results ~smoke prs = let prs = if smoke then List.map smoked_result prs else prs in let verdict, cached, provers = consolidated ~smoke prs in + verdict, match verdict with | Valid -> { zero with provers ; cached ; proved = 1 } @@ -194,7 +192,7 @@ let pp_pstats fmt p = Rformat.pp_time mean Rformat.pp_time p.tmax -let pp_stats fmt s = +let pp_stats ~shell ~updating fmt s = let vp = s.proved in let np = proofs s in if vp < np && np > 1 then @@ -203,21 +201,30 @@ let pp_stats fmt s = Format.fprintf fmt " (Tactics %d)" s.tactics else if np <= 1 && s.tactics = 1 then Format.fprintf fmt " (Tactic)" ; - let shell = Wp_parameters.has_dkey dkey_shell in + let perfo = not shell || (not updating && s.cached < vp) in + let only_qed = match s.provers with [Qed,_] -> true | _ -> false in List.iter (fun (p,pr) -> let success = truncate pr.success in - let title = VCS.title_of_prover ~version:false p in - Format.fprintf fmt " (%s" title ; - if success > 0 && np > 1 then - Format.fprintf fmt " %d/%d" success np ; - if not shell && pr.time > Rformat.epsilon then - Format.fprintf fmt " %a" Rformat.pp_time pr.time ; - Format.fprintf fmt ")" + let print_perfo = perfo && pr.time > Rformat.epsilon in + let print_proofs = success > 0 && np > 1 in + if p != Qed || only_qed || print_perfo || print_proofs then + begin + let title = VCS.title_of_prover ~version:false p in + Format.fprintf fmt " (%s" title ; + if print_proofs then + Format.fprintf fmt " %d/%d" success np ; + if print_perfo then + Format.fprintf fmt " %a" Rformat.pp_time pr.time ; + Format.fprintf fmt ")" + end ) s.provers ; if 0 < s.cached then - if s.cached = np then + if s.cached = vp || updating then Format.fprintf fmt " (Cached)" + else + if shell then + Format.fprintf fmt " (Cache miss %d)" (np - s.cached) else Format.fprintf fmt " (Cached %d/%d)" s.cached np diff --git a/src/plugins/wp/Stats.mli b/src/plugins/wp/Stats.mli index 0a2023db5fc..c1ced421667 100644 --- a/src/plugins/wp/Stats.mli +++ b/src/plugins/wp/Stats.mli @@ -47,9 +47,9 @@ type stats = { } val pp_pstats : Format.formatter -> pstats -> unit -val pp_stats : Format.formatter -> stats -> unit +val pp_stats : shell:bool -> updating:bool -> Format.formatter -> stats -> unit -val results : smoke:bool -> (VCS.prover * VCS.result) list -> stats +val results : smoke:bool -> (VCS.prover * VCS.result) list -> VCS.verdict * stats val tactical : qed:float -> stats list -> stats val proofs : stats -> int diff --git a/src/plugins/wp/VCS.ml b/src/plugins/wp/VCS.ml index a280067c96a..3a94da3f3fc 100644 --- a/src/plugins/wp/VCS.ml +++ b/src/plugins/wp/VCS.ml @@ -55,7 +55,7 @@ let parse_prover = function | Fallback p -> Wp_parameters.warning ~current:false ~once:true "Prover '%s' not found, fallback to '%s'" - (String.concat ":" prv) (Why3Provers.print_wp p) ; + (String.concat ":" prv) (Why3Provers.ident_wp p) ; Some (Why3 p) | NotFound -> Wp_parameters.error ~once:true @@ -75,18 +75,15 @@ let parse_mode m = Batch let name_of_prover = function - | Why3 s -> Why3Provers.print_wp s + | Why3 s -> Why3Provers.ident_wp s | Qed -> "qed" | Tactical -> "script" let title_of_prover ?version = function | Why3 s -> - let v = match version with Some v -> v | None -> - Wp_parameters.has_dkey dkey_shell - in - if v - then Why3Provers.name s - else Why3Provers.title s + let version = match version with Some v -> v | None -> + not (Wp_parameters.has_dkey dkey_shell) + in Why3Provers.title ~version s | Qed -> "Qed" | Tactical -> "Script" @@ -112,7 +109,7 @@ let sanitize_why3 s = Buffer.contents buffer let filename_for_prover = function - | Why3 s -> sanitize_why3 (Why3Provers.print_wp s) + | Why3 s -> sanitize_why3 (Why3Provers.ident_wp s) | Qed -> "Qed" | Tactical -> "Tactical" diff --git a/src/plugins/wp/Why3Provers.ml b/src/plugins/wp/Why3Provers.ml index 167dc3e1370..0d2e6511ac8 100644 --- a/src/plugins/wp/Why3Provers.ml +++ b/src/plugins/wp/Why3Provers.ml @@ -87,14 +87,15 @@ let find_fallback name = end | _ -> NotFound -let print_why3 = Why3.Whyconf.prover_parseable_format -let print_wp s = +let ident_why3 = Why3.Whyconf.prover_parseable_format +let ident_wp s = let name = Why3.Whyconf.prover_parseable_format s in let prv = String.split_on_char ',' name in String.concat ":" prv -let title p = Pretty_utils.to_string Why3.Whyconf.print_prover p -let name p = p.Why3.Whyconf.prover_name +let title ?(version=true) p = + if version then Pretty_utils.to_string Why3.Whyconf.print_prover p + else p.Why3.Whyconf.prover_name let compare = Why3.Whyconf.Prover.compare let is_mainstream p = p.Why3.Whyconf.prover_altern = "" diff --git a/src/plugins/wp/Why3Provers.mli b/src/plugins/wp/Why3Provers.mli index 5463b35fa48..13f9ef446de 100644 --- a/src/plugins/wp/Why3Provers.mli +++ b/src/plugins/wp/Why3Provers.mli @@ -32,10 +32,9 @@ val find_opt : string -> t option type fallback = Exact of t | Fallback of t | NotFound val find_fallback : string -> fallback -val print_why3 : t -> string -val print_wp : t -> string -val title : t -> string -val name : t -> string +val ident_why3 : t -> string +val ident_wp : t -> string +val title : ?version:bool -> t -> string val compare : t -> t -> int val provers : unit -> t list diff --git a/src/plugins/wp/register.ml b/src/plugins/wp/register.ml index 8952be0b750..99bd498c8a5 100644 --- a/src/plugins/wp/register.ml +++ b/src/plugins/wp/register.ml @@ -873,7 +873,7 @@ let do_prover_detect () = Wp_parameters.result "Prover %10s %-6s [%a%s]" p.prover_name p.prover_version print_prover_shortcuts_for p - (Why3Provers.print_wp p) + (Why3Provers.ident_wp p) ) provers (* ------------------------------------------------------------------------ *) -- GitLab