123456789101112131415161718192021222324252627282930313233343536373839(* SPDX-License-Identifier: MIT *)(* Copyright (C) 2023-2024 formalsec *)(* Written by the Smtml programmers *)typeentry=[`Intofint|`Floatoffloat]moduleMap=Map.Make(String)typet=entryMap.tletsum_entriesentry1entry2=match(entry1,entry2)with|`Inti1,`Inti2->`Int(i1+i2)|`Floatf1,`Floatf2->`Float(f1+.f2)|_->Fmt.failwith"Statistics: entry type mismatch"letmerges1s2=Map.merge(fun_leftright->match(left,right)with|Someleft,Someright->Some(sum_entriesleftright)|(Some_asv),None|None,(Some_asv)->v|None,None->None)s1s2letpp_entryfmt=function|`Inti->Fmt.intfmti|`Floatf->Fmt.floatfmtfletpp=Fmt.vbox~indent:1(Fmt.parens(Fmt.iter~sep:(funfmt()->Fmt.pffmt"@\n")(funfm->Map.iter(funab->f(a,b))m)(Fmt.parens(Fmt.pair~sep:Fmt.spFmt.stringpp_entry))))