`module Source : sig ... end`
`module Sink : sig ... end`
`module Sanitizer : sig ... end`
`val get_report : Source.t ‑> Sink.t ‑> Sanitizer.t list ‑> InferBase.IssueType.t option`
`type t``= MockTrace.t```
`type astate``= t```
`val (<=) : lhs:astate ‑> rhs:astate ‑> bool`
`val join : astate ‑> astate ‑> astate`
`val widen : prev:astate ‑> next:astate ‑> num_iters:int ‑> astate`
`module Sources : sig ... end`
`module Sinks = Sink.Set`
`module Passthroughs = InferModules.Passthrough.Set`
`type path``= Passthroughs.t * (Source.t * Passthroughs.t) list * (Sink.t * Passthroughs.t) list```
`type report``= MockTrace.report``=` `{`

`issue : InferBase.IssueType.t;`
`path_source : Source.t;`
`path_sink : Sink.t;`
`path_passthroughs : Passthroughs.t;`

`}```
`val empty : t`
`val sources : t ‑> Sources.t`
`val sinks : t ‑> Sinks.t`
`val passthroughs : t ‑> Passthroughs.t`
`val get_reports : ?⁠cur_site:InferIR.CallSite.t ‑> t ‑> report list`
`val get_reportable_paths : ?⁠cur_site:InferIR.CallSite.t ‑> t ‑> trace_of_pname:(InferIR.Typ.Procname.t ‑> t) ‑> path list`
`val to_loc_trace : ?⁠desc_of_source:(Source.t ‑> string) ‑> ?⁠source_should_nest:(Source.t ‑> bool) ‑> ?⁠desc_of_sink:(Sink.t ‑> string) ‑> ?⁠sink_should_nest:(Sink.t ‑> bool) ‑> path ‑> InferIR.Errlog.loc_trace`
`val of_source : Source.t ‑> t`
`val of_footprint : InferIR.AccessPath.Abs.t ‑> t`
`val add_source : Source.t ‑> t ‑> t`
`val add_sink : Sink.t ‑> t ‑> t`
`val add_sanitizer : Sanitizer.t ‑> t ‑> t`
`val update_sources : t ‑> Sources.t ‑> t`
`val update_sinks : t ‑> Sinks.t ‑> t`
`val get_footprint_indexes : t ‑> InferStdlib.IntSet.t`
`val append : t ‑> t ‑> InferIR.CallSite.t ‑> t`
`val is_empty : t ‑> bool`
`val pp : InferModules.Trace.F.formatter ‑> t ‑> unit`
`val pp_path : InferIR.Typ.Procname.t ‑> InferModules.Trace.F.formatter ‑> path ‑> unit`