Analysis_and_optimization.Factor_graphtype factor = | TargetTerm of Middle.Expr.Typed.t| Reject| LPFunction of string * Middle.Expr.Typed.t listval sexp_of_factor : factor -> Sexplib0.Sexp.tmodule FactorMap : sig ... endmodule VExprMap : sig ... endtype factor_graph = {factor_map : Dataflow_types.vexpr Std.Set.Poly.t FactorMap.t;var_map : (factor * Dataflow_types.label) Std.Set.Poly.t VExprMap.t;}val sexp_of_factor_graph : factor_graph -> Sexplib0.Sexp.tval extract_factors_statement :
(Middle.Expr.Typed.t, 'a) Middle.Stmt.Pattern.t ->
factor listval extract_factors :
((Middle.Expr.Typed.t, Dataflow_types.LabelMap.key) Middle.Stmt.Pattern.t
* 'a)
Dataflow_types.LabelMap.t ->
Dataflow_types.LabelMap.key ->
(Dataflow_types.LabelMap.key * factor) listval factor_rhs : factor -> Dataflow_types.vexpr Std.Set.Poly.tval factor_var_dependencies :
((Middle.Expr.Typed.t, Dataflow_types.label) Middle.Stmt.Pattern.t
* Dependence_analysis.node_dep_info)
Dataflow_types.LabelMap.t ->
Dataflow_types.vexpr Std.Set.Poly.t ->
(Dataflow_types.label * factor) ->
Dataflow_types.vexpr Std.Set.Poly.tval build_adjacency_maps :
(Dataflow_types.label * factor * Dataflow_types.vexpr Std.Set.Poly.t) list ->
factor_graphHelper function to generate the factor graph adjacency map representation from a factor-adjacency list
val fg_remove_fac :
(factor * Dataflow_types.cf_state) ->
factor_graph ->
factor_graphval fg_remove_var : Dataflow_types.vexpr -> factor_graph -> factor_graphval remove_touching :
VExprMap.key Std.Set.Poly.t ->
factor_graph ->
factor_graphval prog_factor_graph :
?exclude_data_facs:??? ->
Middle.Program.Typed.t ->
factor_graphBuild a factor graph from prog.log_prob using dependency analysis
val fg_reaches :
Dataflow_types.vexpr Std.Set.Poly.t ->
Dataflow_types.vexpr Std.Set.Poly.t ->
factor_graph ->
boolBFS on 'fg' with initial frontier 'starts' and terminating at any element of 'goals'
val fg_factor_reaches :
(factor * Dataflow_types.label) ->
Dataflow_types.vexpr Std.Set.Poly.t ->
factor_graph ->
boolval fg_factor_is_prior :
Dataflow_types.vexpr ->
(factor * Dataflow_types.label) ->
Dataflow_types.vexpr Std.Set.Poly.t ->
factor_graph ->
boolval fg_var_priors :
Dataflow_types.vexpr ->
Dataflow_types.vexpr Std.Set.Poly.t ->
factor_graph ->
(factor * Dataflow_types.label) Std.Set.Poly.t optionPriors of V are neighbors of V which have no connection to any data except though V So for graph G and each parameter V: G' = G\V; For each neighbor F: Use BFS starting from F in G' and search for any data, if there is none, F is a prior
val list_priors :
?factor_graph:??? ->
Middle.Program.Typed.t ->
((factor * Dataflow_types.label) Std.Set.Poly.t option
* Middle.Location_span.t)
VExprMap.tval string_of_factor : factor -> stringval string_of_vexpr : Dataflow_types.vexpr -> stringval factor_graph_to_dot : factor_graph -> stringUtility to print a factor graph to the Graphviz dot language for visualization